Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101454246
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-04-28 22:31:11

 
文章来源ChinaITLab收集整理 
 

  当组织添加应用程序和服务时,将认证和密码服务集中化可以增加安全性、减少管理开销及开发人员的负担。但是,将所有服务聚集到单个上会引起可靠性问题。对于企业认证服务,高可用性尤其关键,因为在许多情况中,当认证停止工作时,整个企业都将陷入停顿。

  我们使用 LDAP(轻量级目录访问,Lightweight Directory Access Protocol)来提供认证服务,各种应用程序都可以订阅这些服务。为了提供高度可用的 LDAP 服务器,我们使用来自 Linux-HA()倡议的 heartbeat 软件包。我们也提供一个示例,设置 Apache Web 服务器以使用 LDAP 认证。

  关于 LDAP 的一些背景知识

  我们使用 OpenLDAP 软件包( ),它是几种 Linux 分发版的组成部分。它随 RedHat 7.1 一起提供,其当前版本是 2.0.11。

RFC 的 2251 和 2253 中定义了 LDAP 标准。存在几种 LDAP 的商业实现,其中包括密歇根大学(University of Michigan)的实现和 Netscape 的实现。OpenLDAP 基金会是作为“为开发健壮的、商业级别的、功能完善和开放源码的 LDAP 应用程序与开发工具套件而协力完成的工作”创建的(请参阅 )。OpenLDAP V1.0 于 1998 年 8 月发行。其当前主版本是 2.0(2000 年 8 月 31 日发布),添加了 LDAPv3 支持。

正如所有好的网络服务一样,LDAP 旨在跨多个服务器运行。本文使用了 LDAP 的两个特性 — 复制(replication)引用(referral)。

引用机制使您能跨多服务器分割 LDAP 名称空间,并能以层次结构的形式安排 LDAP 服务器。LDAP 在一个特定目录名称空间中只允许有一个主服务器。

复制由 OpenLDAP 复制守护程序 slurpd驱动。slurpd 定期醒来并检查主服务器上的日志文件,看是否有更新。更新随后被传递到从服务器。读请求可以由任一服务器应答,但更新只能在主服务器上进行。对从服务器的更新请求会生成一个引用消息,该消息会给出主服务器的地址。跟踪引用和重新尝试更新是客户机的职责。OpenLDAP 没有内置方法来跨已复制服务器分发查询,因此必须使用 IP 发射器(sprayer)/扇出(fanout)程序(如 balance)。

为了实现可靠性目标,我们将一对服务器以群集方式组织在一起。我们可以在服务器间使用共享器,维护一个数据副本。但为了简单起见,我们选择进行无共享(shared-nothing)的实现。LDAP 数据库通常很小,而且更新频率较低(提示:如果您的 LDAP 数据集确实较大,请考虑用引用将名称空间划分成较小的部分)。重新启动故障节点时,对无共享设置的确需要注意:在重新启动之前,必须将所有新的更改添加到故障节点上的数据库。稍后,我们将演示一个示例。

群集软件和配置

在开始之前,让我们澄清一个细微的混淆。大多数 HA(高可用性,High Availability)群集都有一个名为“heartbeat”的系统持活(system-keepalive)功能。HA 软件使用 heartbeat 以监控群集中节点的健康状态。Linux-HA( )组提供了开放源码群集软件。他们软件包的名称是 Heartbeat(目前是 Heartbeat-0.4.9)。这可能导致一些可以理解的混淆(喔,它有时也使我糊涂)。在本文中,我们将把 Linux-HA 软件包称为“Heartbeat”,而把一般性的概念称为“heartbeat”。

Linux-HA 项目作为 Linux-HA HOWTO(Harald Milz 撰写)的产物于 1998 年启动。该项目目前由 Alan Robertson 和其他许多志愿开发人员领导。版本 0.4.9 于 2001 年早期发布。

Heartbeat 通过通信媒介监控节点的可用状态,媒介通常是串行线或以太网。最好有多个冗余媒介,因此我们使用了一条串行线和一个以太网链路。每个节点运行一个守护程序进程(名为“heartbeat”)。主守护程序派生子进程以对每个 heartbeat 媒介进行读写,并且派生状态进程。当检测到节点终止时,Heartbeat 运行 shell 脚本以在辅助节点上启动(或停止)服务。在设计时,规定这些脚本使用与系统 init 脚本(通常位于 /etc/init.d)相同的语法。它还提供了用于文件系统、Web 服务器和虚拟 IP 故障转移的缺省脚本。

假设有两个匹配的 LDAP 服务器,我们可以使用几种配置。首先,我们可以实现‘冷备用’。主节点有一个虚拟 IP 和正在运行的服务器。辅助节点处于空闲状态。当主节点出现故障时,服务器实例和 IP 会转移到“冷”节点。这是容易实现的,但主服务器和辅助服务器之间的数据同步却是个问题。要解决这个问题,我们可以这样配置群集,即在两个节点上都配置处于运行状态的服务器。主节点运行主 LDAP 服务器,辅助节点则运行从实例。对主服务器的更新通过 slurpd 被立即传递到从服务器。

主节点的故障使得辅助节点要响应查询,但现在我们还不能更新。为了提供更新,在故障转移时,我们要重新启动辅助服务器并将它提升为主服务器。

  这给予我们完整的 LDAP 服务,但却增加了一个问题 — 如果向辅助服务器作出了更新,那么在允许它重新启动之前必须修复主服务器。Heartbeat 支持‘nice failback’选项,该选项禁止有故障的节点在故障转移后重新获得资源,这会更令人满意。在本文中,我们手工演示重新启动。我们的样本配置将使用 Heartbeat 提供的虚拟 IP 工具。如果需要支持较重的查询负载,则会用同时向主从服务器分发查询的 IP 发射器取代虚拟 IP.在这一情况中,对从服务器作出的更新请求会产生引用。对引用的跟踪不是自动的;必须将该功能构建到客户机应用程序中。除了复制伪指令外,主节点和从节点是以完全相同的方式配置的。 主服务器配置文件指明复制日志文件的位置(第 16 行),并且有一份从服务器的清单,这些从服务器是具有凭证信息的复制目标(第 34-36 行)。
  
  



34 replica host=slave5:389

35 binddn="cn=Manager,dc=lcc,dc=ibm,dc=com";

36 bindmethod=simple credentials=secret



  从服务器配置文件不指明主服务器;相反,它列出复制所需的凭证信息(第 33 行)。
  
  33 updatedn "cn=Manager,dc=lcc,dc=ibm,dc=com"
  

阅读(355) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~