#作者:朱雷
文章目錄
- 一、Syncrepl 復制簡介
- 1.1. 什么是復制模式
- 1.2. 什么是 syncrepl同步復制
- 二、Ldap環境部署
- 三、配置復制類型
- 3.1. 提供者端配置
- 3.2. 消費者端配置
- 3.3.啟動服務
- 3.4.測試同步是否生效
- 四、總結
一、Syncrepl 復制簡介
1.1. 什么是復制模式
OpenLDAP有各種配置選項可用于創建復制目錄。在以前的版本中,復制是指主服務器和一定數量的從屬服務器。主服務器接受來自其他客戶端的目錄更新,而從屬服務器僅接受來自(單個)主服務器的更新。復制結構定義嚴格,任何特定數據庫只能充當一個角色,即主服務器或從屬服務器。OpenLDAP 2.4 引入的另一個術語是多主服務器。由于 OpenLDAP 現在支持多種復制拓撲,這些術語已被棄用,取而代之的是提供者/多提供者和消費者。
提供者可以接受外部寫入操作并使其可供消費者檢索,消費者向提供者請求復制更新。與嚴格定義的主/從關系不同,提供者/消費者角色非常靈活,消費者收到的復制更新可以由該消費者進一步傳播到其他服務器,因此消費者也可以同時充當提供者。此外,消費者不必是實際的LDAP服務器,它可能只是一個 LDAP客戶端。
1.2. 什么是 syncrepl同步復制
Syncrepl 使用 LDAP 內容同步協議(簡稱 LDAP Sync)作為消費者同步協議。LDAP Sync 提供狀態復制,支持基于拉取和基于推送的同步,并且不強制使用歷史記錄存儲。在基于拉取的復制中,消費者會定期輪詢提供者以獲取更新。在基于推送的復制中,消費者會實時監聽提供者發送的更新。由于該協議不需要歷史記錄存儲,因此提供者不需要維護它收到的任何更新日志。
Syncrepl 通過維護和交換同步 cookie 來跟蹤復制內容的狀態。由于 syncrepl 消費者和提供者維護其內容狀態,消費者可以輪詢提供者內容以執行增量同步,方法是請求使消費者與提供者內容保持最新狀態所需的條目。Syncrepl 還通過維護復制狀態實現了對消費者的方便管理。消費者數據庫可以從處于任何同步狀態的消費者端或提供者端備份構建。Syncrepl 可以自動重新同步消費者數據庫,使其與當前提供者內容保持最新狀態。
1.2.1 同步方式
? refreshOnly
基于拉取的同步,其中不需要跟蹤消費者服務器,也不維護任何歷史信息。提供程序處理定期輪詢請求所需的信息包含在請求本身的同步 cookie 中。為了優化基于拉取的同步,syncrepl 利用 LDAP 同步協議的當前階段及其刪除階段,而不是依靠頻繁的完全重新加載
在同步結束時,提供方會向消費者發送一個同步cookie,作為同步完成后消費者副本的狀態指示。消費者在向提供方請求下一次增量同步時,會出示收到的cookie。
? refreshAndPersist
基于推送的同步。提供程序跟蹤已請求持久搜索的消費者服務器,并在提供程序復制內容被修改時向它們發送必要的更新
當使用refreshAndPersist同步時,提供程序會在刷新階段結束時發送同步 cookie,方法是發送帶有 refreshDone=TRUE 的 Sync Info 消息。它還會將同步 cookie 附加到在同步搜索的持久階段生成的SearchResultEntry消息中。在持久階段,提供程序還可以在需要更新消費者端狀態指示器時隨時發送包含同步 cookie 的 Sync Info 消息。
二、Ldap環境部署
主機node | 版本 | IP | 備注 |
---|---|---|---|
ldap-0 | 2.4.44 | 192.168.1.129 | 主節點/提供者端 |
ldap-1 | 2.4.44 | 192.168.1.130 | 從節點/消費者端 |
三、配置復制類型
3.1. 提供者端配置
[root@localhost ~]# egrep -v '^$|#' /usr/local/etc/openldap/slapd.conf
include /usr/local/etc/openldap/schema/corba.schema
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/duaconf.schema
include /usr/local/etc/openldap/schema/dyngroup.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/java.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/pmi.schema
include /usr/local/etc/openldap/schema/ppolicy.schema
pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
logfile /usr/local/var/slapd.log
database mdb
maxsize 1073741824
suffix "dc=zltest,dc=com"
rootdn "cn=admin,dc=zltest,dc=com"
rootpw {SSHA}qKw4zhjOu7o+fpSCOUuMMnviWRavEdK0
directory /usr/local/var/openldap-data
# 添加索引
index objectclass,entryCSN,entryUUID eq
# 配置同步
overlay syncprov
# 自上次檢查點以來已過去<ops>次操作或超過<minutes>時間,則執行新的檢查點
syncprov-checkpoint 2 1
syncprov-sessionlog 100
# 非增量同步模式為FALSE
syncprov-reloadhint FALSE
syncprov-nopresent FALSE
3.2. 消費者端配置
[root@localhost ~]# egrep -v '^$|#' /usr/local/etc/openldap/slapd.conf
include /usr/local/etc/openldap/schema/corba.schema
include /usr/local/etc/openldap/schema/core.schema
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/duaconf.schema
include /usr/local/etc/openldap/schema/dyngroup.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/java.schema
include /usr/local/etc/openldap/schema/misc.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/openldap.schema
include /usr/local/etc/openldap/schema/pmi.schema
include /usr/local/etc/openldap/schema/ppolicy.schema
pidfile /usr/local/var/run/slapd.pid
argsfile /usr/local/var/run/slapd.args
logfile /usr/local/var/slapd.log
database mdb
maxsize 1073741824
suffix "dc=zltest,dc=com"
rootdn "cn=admin,dc=zltest,dc=com"
rootpw {SSHA}qKw4zhjOu7o+fpSCOUuMMnviWRavEdK0
directory /usr/local/var/openldap-data
index objectclass,entryCSN,entryUUID eq
syncrepl rid=123 #必須不超過 3 位十進制數字provider=ldap://192.168.1.129:389 # 提供者得地址type=refreshOnly #同步類型拉取retry="5 5 300 5" #重試時間和次數interval=00:00:02:00 # 每2分鐘一次執行輪詢 ( refreshOnly ) 同步模式searchbase="dc=zltest,dc=com"scope=subschemachecking=offbindmethod=simplebinddn="cn=admin,dc=zltest,dc=com"credentials={SSHA}qKw4zhjOu7o+fpSCOUuMMnviWRavEdK0
updateref ldap://192.168.1.129:389 #可寫轉發到提供者
使用slaptest 檢測提供者和消費者的配置文件:
[root@localhost ~]# slaptest -u -f /usr/local/etc/openldap/slapd.conf
config file testing succeeded
3.3.啟動服務
在提供者端服務器和消費者端服務器分別啟動服務
/usr/local/libexec/slapd
[root@localhost openldap]# netstat -luntp|grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 5895/slapd
tcp6 0 0 :::389 :::* LISTEN 5895/slapd
3.4.測試同步是否生效
3.4.1.創建新用戶文件
在提供者端創建一個新用戶test1文件
[root@ldap-0 openldap]# cat test_user.ldif
#dn: ou=oa,dc=zltest,dc=com
#ou: oa
#objectclass: organizationalUnit
dn: cn=test1,ou=oa,dc=zltest,dc=com
ou: oa
cn: test1
sn: test1
objectclass: inetOrgPerson
objectclass: organizationalPerson
userPassword:: e1NTSEF9eTZZVktFUmMraG0vcFZYTkVVbzBFcDJyZlQ0MWxUM1g=
3.4.2.添加新用戶:
[root@ldap-0 openldap]# ldapadd -x -D 'cn=admin,dc=zltest,dc=com' -W -f test_user.ldif
Enter LDAP Password:
adding new entry "cn=test1,ou=oa,dc=zltest,dc=com"
3.4.3.檢查新創建用戶
查看提供者端添加的新用戶:
[root@ldap-0 openldap]# ldapsearch -x -b 'dc=zltest,dc=com' '(cn=test1)'
# extended LDIF
#
# LDAPv3
# base <dc=zltest,dc=com> with scope subtree
# filter: (cn=test1)
# requesting: ALL
## test1, oa, zltest.com
dn: cn=test1,ou=oa,dc=zltest,dc=com
ou: oa
cn: test1
sn: test1
objectClass: inetOrgPerson
objectClass: organizationalPerson
userPassword:: e1NTSEF9eTZZVktFUmMraG0vcFZYTkVVbzBFcDJyZlQ0MWxUM1g=# search result
search: 2
result: 0 Success# numResponses: 2
# numEntries: 1
3.4.4.消費者端檢查新用戶
等幾分鐘在消費者端查詢新添加的用戶賬號:
[root@ldap-1 ~]# ldapsearch -x -b 'dc=zltest,dc=com' '(cn=test1)'
# extended LDIF
#
# LDAPv3
# base <dc=zltest,dc=com> with scope subtree
# filter: (cn=test1)
# requesting: ALL
## test1, oa, zltest.com
dn: cn=test1,ou=oa,dc=zltest,dc=com
ou: oa
cn: test1
sn: test1
objectClass: inetOrgPerson
objectClass: organizationalPerson
userPassword:: e1NTSEF9eTZZVktFUmMraG0vcFZYTkVVbzBFcDJyZlQ0MWxUM1g=# search result
search: 2
result: 0 Success# numResponses: 2
# numEntries: 1
可以看到已經同步成功。
四、總結
Syncrepl同步復制優缺點:
優點:
- Syncrepl 是自同步的,可以從任何狀態的消費者數據庫開始,從完全空到完全同步,它都會自動做正確的事情來實現和維持同步
- 它對變化發生的順序完全不敏感
- 它保證消費者和提供商內容之間的融合,無需人工干預
- 無論消費者與提供商失去聯系多久,它都可以重新同步
- Syncrepl 可以雙向操作
- 可以隨時添加消費者,而無需觸及提供者的任何內容
- 支持多提供商復制
缺點:
基于對象的復制機制,當提供端上復制對象中的任何屬性值發生更改時,每個消費者都會獲取并處理完整的更改對象,包括復制期間更改和未更改的屬性值。這種方法的一個優點是,當單個對象發生多項更改時,無需保留這些更改的精確順序;只有條目的最終狀態才是重要的。但是,當使用模式涉及對多個對象的單次更改時,這種方法可能會有缺點。