用于做OpenLDAP同步的兩臺(tái)機(jī)器的IP分別為: 192.168.1.35(Master), 192.168.1.36(Slave)
為西安等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及西安網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、西安網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
操作系統(tǒng): CentOS 6.5 x64 , 并且已經(jīng)安裝好 OpenLDAP ,其管理員為 cn=Manager,dc=test,dc=com, 管理員密碼: ldap
實(shí)驗(yàn)環(huán)境: VMware Workstation , 可以先安裝好 Master, 然后直接克隆一個(gè)鏡像作為 Slave
OpenLDAP 安裝配置請(qǐng)參考: OpenLDAP安裝與基本配置
為了避免單點(diǎn)故障,通常都會(huì)采用雙機(jī)環(huán)境。使用OpenLDAP復(fù)制同步功能,保持Master 與 Slave 的數(shù)據(jù)一致性。
Ldap Master : 提供所有的更新、修改
Ldap Slave : 提供給各種應(yīng)用(jira, zabbix, svn ...)調(diào)用
配置過程相當(dāng)坎坷。
生產(chǎn)環(huán)境中,ldap server都部署2臺(tái),做主從配置,這樣可以提供目錄服務(wù)的高可用性,兩臺(tái)ldap服務(wù)器之間自動(dòng)同步數(shù)據(jù)。配置openldap主從結(jié)構(gòu),或許網(wǎng)上會(huì)有很多的文章或者博客介紹,但是絕大部分都是基于2.3的版本,注意2.3的主從配置是不適用于2.4的,所以如果要使用openldap2.4配置主從結(jié)構(gòu),在搜索的時(shí)候要注意。然而,即使百度了也會(huì)發(fā)現(xiàn),網(wǎng)上只有寥寥幾篇關(guān)于 openldap 2.4的主從配置文檔,而且還都是淺嘗輒止,當(dāng)然,文章的作者可能已經(jīng)對(duì)配置神而明之了,但是讀者看了之后絕對(duì)會(huì)“暈而乎之”的,大多數(shù)的高手就甩給你一個(gè)slapd.conf針對(duì)replication的配置,然后就沒有然后了。沒轍,為了能get這個(gè)技能,只有×××了,Google了一下,其實(shí)有用的也就是官方的administrator手冊(cè),看手冊(cè)是最能理解replication是怎么一回事兒的,但是前提是你有耐心,而且英語可以還不能較真(因?yàn)槔锩娴木渥诱嫘挠X得翻譯起來不是那么回事兒),好吧,原來Google上關(guān)于這方面的文檔也不是很多,最后也只能看官方手冊(cè),然后自己動(dòng)手了。
其實(shí)現(xiàn)原理如下圖,當(dāng)在主服務(wù)器上更新數(shù)據(jù)時(shí),該更新通過更新日志記錄,并將更新復(fù)制到從服務(wù)器上。當(dāng)在從服務(wù)器上更新數(shù)據(jù)時(shí),該更新請(qǐng)求將重定向給主服務(wù)器,然后主服務(wù)器將更新數(shù)據(jù)復(fù)制到從服務(wù)器。
注意:在進(jìn)行下面的操作前,請(qǐng)先確保你的OpenLDAP 已經(jīng)正常安裝。
4.1 OpenLDAP 前期配置準(zhǔn)備
同步數(shù)據(jù)初始化
在Master 與 Slave 上都執(zhí)行,清除LDAP數(shù)據(jù)庫的數(shù)據(jù):
# ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w ldap -r "dc=test,dc=com" # 準(zhǔn)備 ldif 數(shù)據(jù) # cat /tmp/base.ldif dn: dc=test,dc=com dc: test objectClass: top objectClass: domain dn: ou=People,dc=test,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=test,dc=com ou: Group objectClass: top objectClass: organizationalUnit # 分別在 Master, Slave 導(dǎo)入 # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/base.ldif
4.2 主服務(wù)器(Master)配置
1、首先停止 slapd 服務(wù)
# service slapd stop
2、編輯 /etc/openldap/slapd.conf配置文件
# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bak # vim /etc/openldap/slapd.conf modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la index entryCSN,entryUUID eq overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100
注:這里對(duì)slapd.conf文件所做的修改如下:
1)取消了modulepath /usr/lib/openldap, modulepath /usr/lib64/openldap 之前的注釋
2)取消了moduleload syncprov.la之前的注釋
3)在index nisMapName,nisMapEntry eq,pres,sub 這一行之后添加如下內(nèi)容:
# master replia server start
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
3、配置好,重點(diǎn)來了?。?!
你直接啟動(dòng)ldap(/etc/init.d/slapd start)是不讀新的配置的,以我暫且的測(cè)試結(jié)果來講是發(fā)現(xiàn)這么個(gè)情況的!
所以,要這樣
#刪除就得配置緩存(暫且這么理解吧), 如果生產(chǎn)環(huán)境,建議先備份 rm -rf /etc/openldap/slapd.d/* #測(cè)試 # slaptest -u #生成新的 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ chown -R ldap:ldap /etc/openldap/slapd.d/ #如果前面2條命令都是 succeeded, 就可以重啟slapd服務(wù)了 #最后一步,重啟slapd服務(wù),至此主節(jié)點(diǎn)的配置完成。 service slapd restart
4.3 從服務(wù)器(Slave)配置
1、首先停止 slapd 服務(wù)
# service slapd stop
2、編輯 /etc/openldap/slapd.conf配置文件
# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bak # vim /etc/openldap/slapd.conf modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la index entryCSN,entryUUID eq syncrepl rid=123 provider=ldap://192.168.1.35:389 type=refreshOnly retry="5 5 300 5" interval=00:00:01:00 searchbase="dc=test,dc=com" filter="(objectClass=*)" scope=sub attrs="*" schemachecking=off bindmethod=simple binddn="cn=Manager,dc=test,dc=com" credentials=ldap
注:這里對(duì)slapd.conf文件所做的修改如下:
1)取消了modulepath /usr/lib/openldap,modulepath /usr/lib64/openldap之前的注釋
2)取消了moduleload syncprov.la之前的注釋
3)在index nisMapName,nisMapEntry eq,pres,sub這一行之后添加如下內(nèi)容:
# slave replica statement start
syncrepl rid=123 provider=ldap://192.168.1.35:389
type=refreshOnly
interval=00:00:01:00
searchbase="dc=test,dc=com"
scope=sub
attrs="*"
schemachecking=off
bindmethod=simple
binddn="cn=Manager,dc=test,dc=com"
credentials=123456
3、配置好,重點(diǎn)來了?。。?br />
你直接啟動(dòng)ldap(/etc/init.d/slapd start)是不讀新的配置的,以我暫且的測(cè)試結(jié)果來講是發(fā)現(xiàn)這么個(gè)情況的!
所以,要這樣
#刪除就得配置緩存(暫且這么理解吧), 如果生產(chǎn)環(huán)境,建議先備份 rm -rf /etc/openldap/slapd.d/* #測(cè)試 # slaptest -u #生成新的 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ chown -R ldap:ldap /etc/openldap/slapd.d/ #如果前面2條命令都是 succeeded, 就可以重啟slapd服務(wù)了 #最后一步,重啟slapd服務(wù),至此主節(jié)點(diǎn)的配置完成。 service slapd restart
4.4 測(cè)試數(shù)據(jù)同步
1、在 Master 上準(zhǔn)備測(cè)試數(shù)據(jù),添加一個(gè)新用戶
# cat /tmp/passwd.ldif dn: uid=ldap,ou=People,dc=test,dc=com uid: ldap cn: LDAP User objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}!! shadowLastChange: 17334 loginShell: /sbin/nologin uidNumber: 55 gidNumber: 55 homeDirectory: /var/lib/ldap gecos: LDAP User
2、然后在 Master 導(dǎo)入
# ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/passwd.ldif
3、在Master和Slave上面分別查詢
# ldapsearch -x -H ldap://192.168.1.35 -b "dc=test,dc=com" |grep uid=ldap dn: uid=ldap,ou=People,dc=test,dc=com # ldapsearch -x -H ldap://192.168.1.36 -b "dc=test,dc=com" |grep uid=ldap dn: uid=ldap,ou=People,dc=test,dc=com
4、在Master 和 Slave 上查看同步日志記錄
# tail -f /var/log/ldap.log
要點(diǎn)1 在配置數(shù)據(jù)復(fù)制前 保證主備初始化數(shù)據(jù)的一致
2 停掉主服務(wù)器 更改主服務(wù)器的配置文件
3 停掉備服務(wù)器 更改備服務(wù)器的配置文件
4 重起 主備服務(wù)器進(jìn)程
5 驗(yàn)證同步