应用Linux上的OpenLDAP集群应用.docx
- 文档编号:9353286
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:33.49KB
应用Linux上的OpenLDAP集群应用.docx
《应用Linux上的OpenLDAP集群应用.docx》由会员分享,可在线阅读,更多相关《应用Linux上的OpenLDAP集群应用.docx(15页珍藏版)》请在冰豆网上搜索。
应用Linux上的OpenLDAP集群应用
∙应用Linux上的 OpenLDAP集群
∙ Linux服务器具有低成本、性能卓越、代码开放等特性。
越来越多的企业正在准备或已经采用Linux担起了企业应用服务器的重任。
本文要介绍的是笔者在实际工作中,采用Linux和其它开放套件共同部署高可靠性LDAP认证服务的实例。
系统所要用到的软件包括:
◆RedHat7.2;
◆OpenLDAP2.1,www.openldap.org;
◆Heartbeat1.04,www.linux-ha.org。
合理的流程提供高可靠性
OpenLDAP在该系统的网络应用体系中用于对所有应用提供统一的身份认证服务,还包括如邮件路由、地址、联系人信息等其它信息的查询。
LDAP作为一种特殊的数据库,通过对读取、查询操作进行特别的优化和处理,以保证在查询速度方面的优势,所以特别适合用来统一企业的各种认证服务,从而规范各种业务系统的同一登录身份和口令。
当然,它的缺点和优点一样明显,比如不善于update、insert等操作,但是如果把它作为中央认证数据库,则正好可以利用它的长处而回避它的弱点。
由于系统采用了LDAP作为所有应用的中央认证数据库,一旦该LDAP服务器失效,则系统网络环境中所有依赖于该数据库的应用都会受到影响,甚至停止提供相应的服务。
为了避免这种情况的发生,就要通过两台LDAP服务器建立一个高可靠性的认证数据库集群,同时对其它应用系统提供统一的数据库访问网络接口。
系统网络结构图如图1。
图1系统网络结构图
从图1可以看到,整个系统分为三层:
应用服务器、数据库中间引擎和OpenLDAP数据库集群。
所有的应用服务器通过数据库中间引擎(midd)来访问192.168.1.200,并通过这一统一的数据库网络接口来访问LDAP数据库。
对于系统的要求是,正常情况下master服务器(192.168.1.100)绑定在192.168.1.200上提供服务,slave服务器处于备机状态,一旦master发生故障,slave能够自动接管任务,同时通过某种通信方式通知系统管理员(如邮件、手机短信)。
这里,midd数据库中间引擎是根据需要编写的一个简单工具,使用它要达到以下几个目的:
◆统一应用服务器上的应用程序访问各种数据库的接口。
例如,以后有可能将后台的LDAP数据库换为其它数据库,如Oracle等,这时只需要更改midd的配置文件,而不需要对应用程序进行任何更改。
◆通过采用进程池的方式来提供应用程序的查询速度。
midd能通过对前端应用程序的访问负载,自动调节进程池的进程数量。
同时进程池中的每个进程和后台的LDAP数据库保持一个长连接,这样可以避免一般条件下每次查询都要开一个连接的资源浪费和延时。
◆每个应用服务器上都部署一个midd。
这样应用程序每次请求的时候都是通过本地IPC与midd进行通信,避免了TCP方式连接的开销。
◆midd在两台LDAP数据库active-active模式下的应用模式。
midd根据启动时的参数能够自动区别读、写请求,会将写请求分配到MasterLDAP数据库上,这是由于SlaveLDAP数据库只能进行读操作。
在整个网络负载大、两台LDAP数据库同时提供服务的情况下,使用midd的这一模式,可以避免SlaveLDAP数据库不能更改数据导致两台服务器不能保持数据同步的问题。
根据以上流程的要求,系统必须解决两个问题,首先是由于作为LDAP数据库的两台服务器并没有实现存储共享,因此要求master和slave两台数据库服务器的数据必须实时同步,才能保证一旦slave接管任务后能够提供完整的服务。
其次,master和slave必须能够实时检测对方的健康状态,一旦发现对方有故障,自己能够接管各种任务,包括切换虚拟IP地址、LDAP服务(变为主LDAP服务,意味着其能对写进行操作,从而要求master服务器恢复后必须先和slave进行一次数据同步),以及通过rsh方式来执行其它远程应用服务器上的midd启动模式(在active-active模式下)。
下面就将解决以上数据同步和任务接管两个问题。
主、从LDAP服务器的数据同步
OpenLDAP本身提供了一种复制机制来保证网络上主、从节点之间的数据同步。
slurpd守护程序实现了这一功能,它通过定期活动检查主服务器master上的日志文件,检查master上的数据是否有更新。
如果有更新,那么把更新的数据传递到各个从服务器。
读(查询)请求可以由LDAP数据群中的任一服务器应答,但写操作(update、insert)只能在主服务器master上进行,这就是为什么midd数据库中间引擎必须采用不同的启动模式来处理读写的原因。
下面主要说明主、从LDAP服务器的配置过程。
有关OpenLDAP的安装过程可以查看http:
//www.openldap.org上的安装文档,本文不再赘述。
将OpenLDAP安装到两台服务器上,并对它们分别进行主、从配置。
1.主LDAP服务器(master)上的配置文件如下,这是一个简单的配置例子。
配置文件名:
slapd.conf
文件内容:
include/Opt/LDAP/etc/openldap/schema/core.schema
include/Opt/LDAP/etc/openldap/schema/corba.schema
include/Opt/LDAP/etc/openldap/schema/cosine.schema
include/Opt/LDAP/etc/openldap/schema/inetorgperson.schema
include/Opt/LDAP/etc/openldap/schema/java.schema
include/Opt/LDAP/etc/openldap/schema/nis.schema
include/Opt/LDAP/etc/openldap/schema/misc.schema
include/Opt/LDAP/etc/openldap/schema/mail.schema
include/Opt/LDAP/etc/openldap/schema/openldap.schema
accessto*
byselfwrite
bydn.base="cn=Manager,dc=yourdomain,dc=com"write
by*read
pidfile/Opt/LDAP/var/slapd.pid
argsfile/Opt/LDAP/var/slapd.args
#ldbmdatabasedefinitions
#databasebdb
databaseldbm
suffix"dc=yourdomain,dc=com"
rootdn"cn=Manager,dc=yourdomain,dc=com"
#Cleartextpasswords,especiallyfortherootdn,should
#beavoid.Seeslappasswd(8)andslapd.conf(5)fordetails.
#Useofstrongauthenticationencouraged.
rootpwtest
#ThedatabasedirectoryMUSTexistpriortorunningslapdAND
#shouldonlybeaccessiblebytheslapd/tools.Mode700recommended.
replogfile/Opt/LDAP/var/slapd.replog
directory/Opt/LDAP/var/ldbm
#Indicestomaintain
accesstoattr=userPassword
byselfwrite
byanonymousauth
bydn.base="cn=Manager,dc=yourdomain,dc=com"write
by*none
accessto*
byselfwrite
bydn.base="cn=Manager,dc=yourdomain,dc=com"write
by*node
indexobjectClasseq
replicahost=slave:
389
binddn="cn=Manager,dc=yourdomain,dc=com"
bindmethod=simplecredentials=test
∙ 2.从LDAP服务器(slave)上的配置文件。
配置文件名:
slapd.conf
文件内容:
include/Opt/LDAP/etc/openldap/schema/core.schema
include/Opt/LDAP/etc/openldap/schema/corba.schema
include/Opt/LDAP/etc/openldap/schema/cosine.schema
include/Opt/LDAP/etc/openldap/schema/inetorgperson.schema
include/Opt/LDAP/etc/openldap/schema/java.schema
include/Opt/LDAP/etc/openldap/schema/nis.schema
include/Opt/LDAP/etc/openldap/schema/misc.schema
include/Opt/LDAP/etc/openldap/schema/mail.schema
include/Opt/LDAP/etc/openldap/schema/openldap.schema
accessto*
byselfwrite
bydn.base="cn=Manager,dc=yourdomain,dc=com"write
by*read
pidfile/Opt/LDAP/var/slapd.pid
argsfile/Opt/LDAP/var/slapd.args
#ldbmdatabasedefinitions
#databasebdb
databaseldbm
suffix"dc=yourdomain,dc=com"
rootdn"cn=Manager,dc=yourdomain,dc=com"
rootpwtest
#replogfile/Opt/LDAP/var/slapd.replog
directory/Opt/LDAP/var/ldbm
accesstoattr=userPassword
byselfwrite
byanonymousauth
bydn.base="cn=Manager,dc=yourdomain,dc=com"write
by*none
accessto*
byselfwrite
bydn.base="cn=Manager,dc=yourdomain,dc=com"write
by*read
indexobjectClasseq
accessto*
byselfread
bydn="cn=Manager,dc=yourdomain,dc=com"write
by*none
updatedn"cn=Manager,dc=yourdomain,dc=com"
∙
分别对主、从LDAP数据库进行配置后,初始化主LDAP数据库中的数据,可以利用OpenLDAP本身提供的工具完成。
3.数据同步。
在运行主、从模式前,必须先将主、从LDAP服务器上的数据同步。
可以通过把master上的数据文件(本例中是ldbm目录下的所有文件)直接拷贝到从LDAP服务器上,实现节点数据的完全一致。
4.启动服务
分别启动服务,测试数据的同步是否有效。
先启动主LDAP服务器上的两个进程:
#/opt/LDAP/libexec/slapd-f/opt/LDAP/etc/openldap/slapd.conf-d5>/dev/null2>&1&
#/opt/LDAP/libexec/slurpd-f/opt/LDAP/etc/openldap/slapd.conf-d5>/dev/null2>&1&
然后启动从LDAP服务器上的进程:
#/opt/LDAP/libexec/slapd-f/opt/LDAP/etc/openldap/slapd.conf-d5>/dev/null2>&1&
对主LDAP服务器上的数据进行各种更新操作,包括增加、删除、修改等动作,然后在从LDAP服务器上查看数据是否保持与主LDAP服务器同步更新。
通过以上测试,主、从LDAP数据库服务器已经达到了数据同步复制的效果。
∙使用Heartbeat实现自动检测和任务接管
1.Linux下HA软件简要介绍
(1)TheHighAvailabilityLinuxProject
其Heartbeat软件不仅可以作为高可靠性的HA软件独立使用,也可以配合其它IP分发器做BalancingCluster应用。
参见http:
//www.linux-ha.org。
(2)Lifekeeper
Lifekeeper是一款著名的高可靠性软件,能支持32个节点的应用,支持Linux、x86Solaris和Windows等操作系统。
参见
(3)SRRD
SRRD(ServiceRoutingRedundancyDaemon),支持PKI、SSL的通信认证。
参见http:
//srrd.org/。
这里选择Linux-HA提供的HeartbeatHA软件来实现该系统的高可靠性,软件名Heartbeat,当前最新版本为1.2。
Heartbeat通过监控几个节点的状态来进行管理操作,监控方式支持串行线和以太网作为媒介的通信,这里使用以太网链路。
在集群中的每个节点运行一个守护程序进程,名为heartbeat。
主守护程序派生子进程,以对每个heartbeat媒介进行读写,并派生状态进程。
当检测到节点终止时,heartbeat运行Shell脚本实现资源任务的切换和接管,从而保证了整个系统的高可靠性。
2.下载安装Heartbeat
可以从http:
//www.linux-ha.org/download/下载最新的安装包,包括src和rpm。
本例下载了heartbeat-1.0.4.tar.gz包进行安装,具体操作如下:
#./configure-prefix=/opt/ha
#make
#makeinstall
∙
在此过程中,系统可能会提醒安装其它依赖软件包,比如libnet等,按照提示进行下载安装即可。
安装完成后在/opt/ha目录下将产生相关子目录。
进入/opt/ha/etc/ha.d,在该目录下创建以下文件:
ha.cf、authkeys、haresources、myexec。
3.master配置说明:
(1)ha.cf
logfile/var/log/ha-log
logfacilitylocal0
keepalive2
deadtime30
warntime10
initdead120
ucasteth0192.168.1.101
nice_failbackon//保证slave变为master后,
即使master恢复启动服务也不转移,从而保证LDAP数据同步。
nodemaster
nodeslave
∙
(2)authkeys
auth3
3md5test
(3)haresources
master192.168.1.200myexec
(4)进入/opt/ha/etc/ha.d/resource.d,创建执行脚本myexec。
当Heartbeat软件监控到其它节点出现故障时,会执行该脚本并完成以下工作:
如果本机是主LDAP服务器,则必须以某种方式(邮件或手机短信)来通知系统管理员,备用服务器出现故障;如果是从服务器监控到主服务器不可用状态,则必须以主LDAP模式启动LDAP服务,并通过rsh重新启动远程midd启动模式。
∙主LDAP服务器上的myexec文件内容如下:
MASNODE='master'
PIDFILE=/Opt/LDAP/var/slapd.pid
APP=/Opt/LDAP/libexec/slapd
SLURP=/Opt/LDAP/libexec/slurpd
MASTER=/Opt/LDAP/etc/openldap/slapd.master.conf
SLAVE=/Opt/LDAP/etc/openldap/slapd.slave.conf
./opt/ha/etc/ha.d/shellfuncs
test_start(){
#firstwekilleverythingpossible
ha_log"info:
$0:
Starting"
if[-f$PIDFILE];then
PID=`head-1$PIDFILE`
ha_log"info:
$0:
Appearstoalreadyberunning,killing[$PID]"
kill-9$PID>/dev/null
rm$PIDFILE
fi
#slurpdshoulddiewhentheslapdprocessdoes,butjustincase:
foriin`ps-ef|grepslurp|grep-vgrep|awk'{print$2}'`
do
kill-9$i
done
#slightdelaytoallowforstability
sleep2
#nowwewillattempttostartasamaster
$APP-f$MASTER//启动slapd
if[!
-f$PIDFILE];then
ha_log"warn:
$0:
Slapddidnotstartproperly"
#exit1
fi
#Nowwedetermineifthisistheprimaryorsecondarynode
#firstwaitabitforstability
sleep10
#ifwearesecondary,donothing:
otherwise
if[$HA_CURHOST==$MASNODE];then
/usr/bin/rshslave'/opt/ha/etc/ha.d/resource.d/slapd.slave'
&//启动从服务器上的LDAP
/usr/bin/rshmailserver'/opt/sbin/midd-mmaster-sslave'&//启动midd
$SLURP-f$MASTER//启动主服务器上的复制进程
else
ha_log"warn:
$0:
slavenodeisnotresponding"
fi
}
test_stop(){
ha_log"info:
$0:
Shuttingdown"
if[-f$PIDFILE];then
PID=`head-1$PIDFILE`
kill-9$PID>/dev/null
rm$PIDFILE
fi
#Let'sbesureit'sdead,Jim
foriin`ps-ef|grepslap|grep-vgrep|awk'{print$2}'`
do
kill-9$i
done
foriin`ps-ef|grepslurp|grep-vgrep|awk'{print$2}'`
do
kill-9$i
done
}
#Seehowwewerecalled.
case"$1"in
start)
test_start
;;
stop)
test_stop
;;
restart)
$0stop
$0start
;;
status)
if[-f$PIDFILE];then
echorunning
else
echostopped
fi
;;
*)
echo"Usage:
$0{start|stop|restart|status}"
exit1
esac
exit0
∙
(5)创建/opt/ha/etc/ha.d/resource.d/slapd.slave文件。
#/bin/sh
/opt/LDAP/libexec/slapd-f/opt/LDAP/etc/openldap/
slapd.slave.conf-d5>/dev/null2>&1&
∙
至此,主服务器配置完成。
slave服务器上的配置和master服务器的完全一样,差别仅在于将“master”改为“slave”。
同时要注意,一是两台服务器上必须能够执行rsh;二是在几个节点中,能通过设置的主机名互相解析到对方的IP地址。
这样,整个系统的HA就配置完成。
(6)启动heartbeat
首先执行#killslapd,再启动master上的heartbeat:
#/etc/init.d/heartbeatstart
然后启动slave上的heartbeat:
#/etc/init.d/heartbeatstart
执行#tail-f/var/log/ha-log,确定服务是否正常启动。
如果正常运行,那么当前的状态是master提供主LDAP服务;slave提供从LDAP服务。
测试
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 Linux OpenLDAP 集群