作者 主題: 02.LDAP Replication 筆記  (閱讀 3764 次)

0 會員 與 1 訪客 正在閱讀本文。

Niko

  • 活潑的大學生
  • ***
  • 文章數: 281
  • 性別: 男
    • 檢視個人資料
02.LDAP Replication 筆記
« 於: 2012-09-01 15:49 »
大家好,小弟已經把Replication的筆記整理好了,這部份的設定其實很簡單,但是有很多設定上的意思需要去理解它,為了這部份小弟在網路上爬了非常多的文獻,因此,還是老話一句,如有觀念或是解釋上有任何不對的地方,請各位大大們給予指教,謝謝!! :)


Replication

RFC 4533 概述了 LDAP Content Synchronization Operation,它是由 LDAP Sync 複製引擎在 OpenLDAP 中實現的,稱為 syncrepl。

syncrepl 構建為一個覆蓋(overlay),插入在 slapd 核心和後端資料庫之間。對樹的所有寫入由 syncrepl 引擎來跟蹤,不需要另一個單獨的服務。除了複製機制和角色之外,其概念與 slurpd 相似。

syncrepl 從伺服器中啟動,現在將其命名為消費者(consumer)。主要伺服器角色稱為提供者(provider)。在 syncrepl 中,消費者連接到提供者以更新樹。在最基本的 refreshOnly 模式中,消費者接收自上一次刷新以來的所有更改條目,請求 cookie 跟蹤上一次同步的更改,然後中斷連接。在下一次連接時,將 cookie 呈現給提供者,它僅發送自上一次同步之後更改的條目。值得注意的是,所有寫入的操作僅能在主伺服器(提供者)操作,無法在從伺服器(消費者)上直接操作。

另一個 syncrepl 模式為 refreshAndPersist,運作模式像 refreshOnly 一樣;但是不會中斷連接,消費者保持連接以接收任何更新。在最初刷新後發生的任何更改都會立即通過連接由提供者發送到消費者。也就是一台LDAP server同時是provider也是consumer(MirrorMode)。



Syncrepl :

1.設定provider  (ldap1 server)
代碼: [選擇]
[root@ldap1 ~]# vim /etc/openldap/slapd.conf
##新增紅字部份##

moduleload  syncprov.la                  ## 載入模組 ##
   
########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq

overlay  syncprov
syncprov-checkpoint  100  10
syncprov-sessionlog  100



overlay  syncprov : 啟用syncprov 覆蓋。必須針對資料庫配置覆蓋;因此,此設定必須位於 database 之後。

syncprov-checkpoint  100  10 : 告訴伺服器寫入次數達100次或每隔10分鐘將contextCSN的值儲存到硬碟中。contextCSN是cookie 的一部分,它可以幫助消費者找到自上一個複製週期之後的某個位置。(index   entryCSN     eq)

syncprov-sessionlog  100 : is the maximum number of session log entries the session log can record. When a session log is configured, it is automatically used for all LDAP Sync searches within the database.
Note that using the session log requires searching on the entryUUID attribute. Setting an eq index on this attribute will greatly benefit the performance of the session log on the provider. (index   entryUUID     eq)
(sorry~這部份小弟不知該如何解釋才恰當,所以直接PO上官方文件的說明)



2.設定ldap2
請參考http://phorum.study-area.org/index.php/topic,67535.0.html,基本的設定與ldap1相同即可

代碼: [選擇]
[root@ldap2 ~]# vim /etc/openldap/slapd.conf
##新增紅字部份##

moduleload  syncprov.la

database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin2,dc=split,dc=com,dc=tw" read
        by * none
   
########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin2,dc=split,dc=com,dc=tw"     ##為了區別兩台server,小弟把rootdn拆開,密碼則是相同(password:redhat)
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq


syncrepl        rid=123
                     provider=ldap://ldap1.split.com.tw
                     type=refreshOnly
                     interval=00:00:01:00
                     searchbase="dc=split,dc=com,dc=tw"
                     retry="60 +"
                     bindmethod=simple
                     binddn="cn=admin,dc=split,dc=com,dc=tw"
                     credentials=redhat



rid : 將此consumer標識給provider(介於1到999之間的唯一ID)

provider : provider的 LDAP URI

type : refreshOnly or refreshAndPersist

interval : 定期同步時間,格式為dd:hh:mm:ss

searchbase : 指向根節點的DN,以保持樹的完整性

retry : 如果在複製過程中發生錯誤,將會嘗試重新連結;
retry="60 10 300 3",意思是每60秒重試1次,重覆10次,如果還是無法連線,則每300秒重試1次,重覆3次後將停止重試。
retry="60 +",每60秒重試1次,"+"代表在成功之前不限定重試次數

bindmethod : 連接provider 時所用的認證方式(simple or sasl)

binddn : provider的rootdn

credentials : provider的rootpw (password)


其它額外設定 :
scope : sub、one 或 base 之一。它確定從 searchbase 開始,到樹下多深的資料將被複製。預設值為 sub,它涵蓋 searchbase 和所有子 searchbase。

filter : LDAP 搜索篩選器,例如 (objectClass=inetOrgPerson),用於控制複製哪些記錄。

attrs   : 將從所選條目中複製的屬性清單。

與 syncrepl 的其他選項一樣,這些選項以 key=value 的形式輸入

更詳細的設定和說明請參考官方文件(http://www.openldap.org/doc/admin24/slapdconfig.html#syncrepl)


設定完成後 (ldap1與ldap2) :
1.
代碼: [選擇]
rm -rf /etc/openldap/slapd.d/*

2.
代碼: [選擇]
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

3.
代碼: [選擇]
chown -R ldap:ldap /etc/openldap/slapd.d
4.
代碼: [選擇]
chown -R ldap:ldap /var/lib/ldap  ※第一次啟動slapd才要(ldap2)


完成之後我們可以在ldap2上看看有沒有ldap1的資料進來,也可在ldap1隨便新增個東西看看ldap2有沒有變更,這部份小弟就不在囉唆了,給新同學自己試試.... ;D




MirrorMode :
如果先照上面的方式設定好了,請先檢查雙方的資料是否一致,不然也可以先把ldap2的整個樹刪除

刪除整個樹
代碼: [選擇]
[root@ldap2 ~]# ldapdelete -D "cn=admin,dc=split,dc=com,dc=tw" -W -x -r -v "dc=split,dc=com,dc=tw"
先停止slapd
代碼: [選擇]
[root@ldap2 ~]# /etc/init.d/slapd stop



1.設定ldap1
代碼: [選擇]
[root@ldap1 ~]# vim /etc/openldap/slapd.conf

##新增紅字部份##

moduleload  syncprov.la
   

########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq


serverID 1

syncrepl         rid=123
                      provider=ldap://ldap2.split.com.tw
                      bindmethod=simple
                      binddn="cn=admin2,dc=split,dc=com,dc=tw"
                      credentials=redhat
                      searchbase="dc=split,dc=com,dc=tw"
                      schemachecking=on
                      type=refreshAndPersist
                      retry="60 +"

mirrormode on

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100




serverID : 每個mirror node的ID必須不同且是唯一的

rid : 雙方都必須相同

schemachecking : The schema checking can be enforced at the LDAP Sync consumer site by turning on the schemachecking parameter. If it is turned on, every replicated entry will be checked for its schema as the entry is stored into the replica content. Every entry in the replica should contain those attributes required by the schema definition. If it is turned off, entries will be stored without checking schema conformance. The default is off. (sorry~一樣不知該如何解釋才恰當 :P)

mirrormode on : 開起MirrorMode





2.設定ldap2
代碼: [選擇]
[root@ldap2 ~]# vim /etc/openldap/slapd.conf
##新增紅字部份##

moduleload  syncprov.la

database monitor
access to *
        by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
        by dn.exact="cn=admin2,dc=split,dc=com,dc=tw" read
        by * none
   
########################################################
# database definitions
########################################################


database      db
suffix      "dc=split,dc=com,dc=tw"
checkpoint   1024 15
rootdn      "cn=admin2,dc=split,dc=com,dc=tw"
rootpw      {CRYPT}u/vHUak3FqFek


index  objectClass,entryCSN,entryUUID     eq


serverID 2

syncrepl         rid=123
                      provider=ldap://ldap1.split.com.tw
                      bindmethod=simple
                      binddn="cn=admin,dc=split,dc=com,dc=tw"
                      credentials=redhat
                      searchbase="dc=split,dc=com,dc=tw"
                      schemachecking=on
                      type=refreshAndPersist
                      retry="60 +"

mirrormode on

overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100



設定完成後 (ldap1與ldap2) :
1.rm -rf /etc/openldap/slapd.d/*

2.slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d

3.chown -R ldap:ldap /etc/openldap/slapd.d


兩台server都啟動後,先檢查ldap2上的資料有沒有回來,之後我們就可以試試先在ldap2上新增一個資料,然後到ldap1上把資料刪除,看看兩台server的資料是否都有一致

以上,就是一個簡單的Replication...... ;D
« 上次編輯: 2012-09-29 22:16 由 Niko »