OpenLDAP Master-Slave同步複製

一、實驗環境說明

用於作OpenLDAP同步的兩臺機器的IP分別爲: 192.168.1.35(Master),  192.168.1.36(Slave)數據庫

操做系統: CentOS 6.5 x64 , 而且已經安裝好 OpenLDAP ,其管理員爲 cn=Manager,dc=test,dc=com, 管理員密碼: ldap
vim

實驗環境: VMware Workstation , 能夠先安裝好 Master, 而後直接克隆一個鏡像做爲 Slave
緩存

OpenLDAP 安裝配置請參考:  OpenLDAP安裝與基本配置
bash


二、實驗目的

爲了不單點故障,一般都會採用雙機環境。使用OpenLDAP複製同步功能,保持Master 與 Slave 的數據一致性。服務器

  • Ldap Master : 提供全部的更新、修改 session

  • Ldap Slave : 提供給各類應用(jira, zabbix, svn ...)調用
    dom


配置過程至關坎坷。ide

生產環境中,ldap server都部署2臺,作主從配置,這樣能夠提供目錄服務的高可用性,兩臺ldap服務器之間自動同步數據。配置openldap主從結構,或許網上會有不少的文章或者博客介紹,可是絕大部分都是基於2.3的版本,注意2.3的主從配置是不適用於2.4的,因此若是要使用openldap2.4配置主從結構,在搜索的時候要注意。然而,即便百度了也會發現,網上只有寥寥幾篇關於 openldap 2.4的主從配置文檔,並且還都是淺嘗輒止,固然,文章的做者可能已經對配置神而明之了,可是讀者看了以後絕對會「暈而乎之」的,大多數的高手就甩給你一個slapd.conf針對replication的配置,而後就沒有而後了。沒轍,爲了能get這個技能,只有×××了,Google了一下,其實有用的也就是官方的administrator手冊,看手冊是最能理解replication是怎麼一回事兒的,可是前提是你有耐心,並且英語能夠還不能較真(由於裏面的句子真心以爲翻譯起來不是那麼回事兒),好吧,原來Google上關於這方面的文檔也不是不少,最後也只能看官方手冊,而後本身動手了。svn


三、實現原理

其實現原理以下圖,當在主服務器上更新數據時,該更新經過更新日誌記錄,並將更新複製到從服務器上。當在從服務器上更新數據時,該更新請求將重定向給主服務器,而後主服務器將更新數據複製到從服務器。測試

wKioL1lGDi_TXriiAABpdNCwluQ027.jpg


四、配置過程(syncrepl 模式)

注意:在進行下面的操做前,請先確保你的OpenLDAP 已經正常安裝。


4.1 OpenLDAP 前期配置準備

同步數據初始化

在Master 與 Slave 上都執行,清除LDAP數據庫的數據:

# ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w ldap -r "dc=test,dc=com"

# 準備 ldif 數據
# 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 導入
# ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/base.ldif


4.2 主服務器(Master)配置

一、首先中止 slapd 服務

# service slapd stop

二、編輯 /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

注:這裏對slapd.conf文件所作的修改以下:

     1)取消了modulepath /usr/lib/openldap, modulepath /usr/lib64/openldap 以前的註釋

     2)取消了moduleload syncprov.la以前的註釋

     3)在index nisMapName,nisMapEntry            eq,pres,sub  這一行以後添加以下內容:      

            # master replia server start

            overlay syncprov

            syncprov-checkpoint 100 10

            syncprov-sessionlog 100


三、配置好,重點來了!!!

      你直接啓動ldap(/etc/init.d/slapd start)是不讀新的配置的,以我暫且的測試結果來說是發現這麼個狀況的!

因此,要這樣

#刪除就得配置緩存(暫且這麼理解吧), 若是生產環境,建議先備份
rm -rf /etc/openldap/slapd.d/*

#測試
# slaptest -u

#生成新的
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
chown -R ldap:ldap /etc/openldap/slapd.d/

#若是前面2條命令都是 succeeded, 就能夠重啓slapd服務了
#最後一步,重啓slapd服務,至此主節點的配置完成。
service slapd restart


4.3 從服務器(Slave)配置

一、首先中止 slapd 服務

# service slapd stop

二、編輯 /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


注:這裏對slapd.conf文件所作的修改以下:

         1)取消了modulepath /usr/lib/openldap,modulepath /usr/lib64/openldap以前的註釋

         2)取消了moduleload syncprov.la以前的註釋

         3)在index nisMapName,nisMapEntry            eq,pres,sub這一行以後添加以下內容:    

             # 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


三、配置好,重點來了!!!

      你直接啓動ldap(/etc/init.d/slapd start)是不讀新的配置的,以我暫且的測試結果來說是發現這麼個狀況的!

因此,要這樣

#刪除就得配置緩存(暫且這麼理解吧), 若是生產環境,建議先備份
rm -rf /etc/openldap/slapd.d/*

#測試
# slaptest -u

#生成新的
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
chown -R ldap:ldap /etc/openldap/slapd.d/

#若是前面2條命令都是 succeeded, 就能夠重啓slapd服務了
#最後一步,重啓slapd服務,至此主節點的配置完成。
service slapd restart


4.4 測試數據同步

一、在 Master 上準備測試數據,添加一個新用戶

# 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

二、而後在 Master 導入

# ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/passwd.ldif

三、在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

四、在Master 和 Slave 上查看同步日誌記錄

# tail -f /var/log/ldap.log



要點1 在配置數據複製前 保證主備初始化數據的一致

2 停掉主服務器  更改主服務器的配置文件

3 停掉備服務器  更改備服務器的配置文件

4 重起 主備服務器進程

5 驗證同步

相關文章
相關標籤/搜索