openldap-v2.4最新版主從配置詳細介紹-純手打絕版
openldap-v2.4主從配置
前言:
新版最大的功能就是真正實現了雙向複製。可以是2個主master LDAP互備,也可以使多個MASTER LDAP服務器備份。無論哪一台宕機,只要有一台master正常,其他宕機的LDAP服務器重新啟動起來后,用戶數據同步更新。
Openldapv2.3版本以前的同步複製缺點
slurpd守護進程是以推模式操作:
主伺服器推變更到從伺服器
·
它是不可靠的
o
它對replog中的記錄的次序極為敏感
o
它可能很容易失去同步, 這時需要手工干預來從主目錄重新同步從伺服器資料庫
o
它對不可用的伺服器不是非常寬容. 如果一個從伺服器長時間停機,replog可能變得太大以至於slurpd無法處理
·
它只工作在推模式。
(也可以設成拉模式,rpm安裝方式參數已詳細說明,只不過slave那台不保存任何用戶數據。全部數據都在master上面修改。類似在master主機只是建立了一個快捷方式到slave上。)
·
它需要停止和重新啟動主伺服器來增加從伺服器
·
它只支持單一主伺服器複製
(新版主從配置有五種方式,這裡只講述最基本也是最簡單的Syncrepl主從配置,MirrorMode鏡像模式主從配置,N-Way Multi-Master(多主)三種方式,以及官方網站未提供的一個比較複雜的改造方案。
(新版最基本的同步方式)
1.Syncrepl
該方式是slave服務器以拉的方式同步master的用戶數據
使用該方式,是有缺點的,當你修改一個條目當中的一個屬性值,尤其是批量修改上萬個條目當中的一個屬性值,那麼該方式是不只是簡單的同步這一個屬性值,而是將這上萬個條目一起同步更新過來。
(文字翻譯為增強行的syncrepl)
2.Delta-syncrepl
就是比上面syncrepl多了一個是基於日誌的同步功能哈。通俗的說就是你在master每更改一筆數據,那麼就會產生一個日誌文件,你具體修改到哪裡了,然後slave通過你master的日誌進行相應的修改。所以這個就克服了沒必要把一整個條目都複製過來。條目是什麽?趕緊去翻官方資料吧,英文就是entry。
以上2種方式類似舊版的單向同步功能。
3.N-Way Multi-Master
多主MASTER方式同步LDAP信息。
4.MirrorMode
該方式是服務器互相以推的方式同步用戶數據。
MirrorMode只支持2個主MASTER(並不是說鏡像模式只能做2台LDAP,而是只有2個MASTER起作用可以推送數據出去,其他的LDAP服務器也會同步更新,只要把提供者指定到這2個MASTER任意一台即可),當你設定超過2台的時候,該模式只有最開始設定的那2台是MASTER,能主動互相推送數據。後面超過的如第三台LDAP3或LDAP4時,這些自動全部變成單向同步,即只有那2個主MASTER修改用戶數據后可以同步到下面的第三台或第四台LDAP上, LDAP3,LDAP4做任何動作都無法將數據同步到主master上。也不會同不到其他LDAP服務器上,有點類似老版本slurp的效果。
如果你的企業有多家公司,而你又不希望太多人有修改同步數據權限,那麼可以使用此方式。
5.Syncrepl Proxy
代理同步。言外之意將保留用戶信息的MASTER主機隱藏起來,而代理機上面的LDAP通過Syncrepl從MASTER主機以拉的方式同步maser用戶數據,當代理主機發生改變時,代理主機的LDAP又以推的方式將數據更新到更下層的slave LDAP服務器上。而slave LDAP是沒有權限去更改代理服務為那台LDAP用戶信息,只有讀取權限,什麽,這種情況類似老版本的slurp單向同步功能,並且和老版本slurp一樣可以建立一個快捷方式(這個快捷方式不保留任何數據,數據全部保留在你去指定的那台LDAP服務器上,只是說你可以通過這個快捷方式在slave LDAP服務器上也可以修改數據。該快捷方式具體應用可以去查看RPM包方式當中安裝方法里有說明。)
6. N-Way Multi-Master自行改造版。官方無配置檔案和說明。
(推薦使用)
可以任意設定多個mastere和多個slave。一台LDAP服務器即可以推送數據出去,也可以從別的master主機拉數據過來,
N-Way Multi-Master變種
l
同步方式一:最基本的Syncrepl方式同步。
(Syncrepl是新版主從同步數據的方式,用來取代舊版slupd的同步方式。)
這種方式有點類似舊版的同步方式,只能在MASTER上更改數據。Slave沒有權限做任何操作。所以結合後面的mirror鏡像模式即mirror+syncrepl即可實現以下用戶數據多種同步方式:
1.jpg (74.42 KB)
2013-10-18 15:29
1.
從圖上可以看出MASTER1和MASTER2是做的mirror鏡像模式。那麼2個主MASTER是互備的,也就是說2台都可以更改數據。任意一台MASTER更改數據后,都會主動推送數據給對方的MASTER。
2.
圖中的四台slave,全部採用新版最基本的Syncrepl模式,採用該模式后,slave是沒有權限修改自身數據,只能主動從各自的master主機獲取數據來更新。
3.mirror模式不懂沒關係,後面可以看到,其實很簡單。
4.同時使用該2種模式的時候,請務必將主master和從slave之間用戶數據手動修改到一樣。
master 主機配置增加如下參數
overlaysyncprov
後端工作在overlay模式下
syncprov-checkpoint100 10
同步的滿足條件,當滿足修改100個條目或10分鐘主動進行推送一次。
syncprov-sessionlog100
會話日誌條目的最大數量
MASTER大致就是增加下面三行,其他的參數請參照RPM包參數設定即可。
overlaysyncprov
syncprov-checkpoint100 10
syncprov-sessionlog100
Slave 主機配置增加如下參數
syncrepl rid=123
設定主機id號(<rid>必須超過三位數字)
provider=ldap://172.16.9.132:389
設定提供者的IP(也就是MASTER主機IP)
type=refreshOnly
設定模式為拉
(拉的意思是主動從master上進行同步更新數據)
interval=01:00:00:00
設定更新時間,一天更新一次
(interval格式day:hour:minitus:
second)設定一天的話,slave就會每個一天主動從master拉數據。
searchbase="dc=kingbright,dc=com"
搜索後綴(搜索根目錄)
filter="(objectClass=*)"
同步搜索時,搜索 objectClass 是 organizationalPerson 的條目,如用星號*表示,則是搜索所有類型。
scope=sub
匹配根目錄下所有條目
(匹配範圍: base只與所給的DN相匹配,one只與父條目是所給DN的條目相匹配,sub只與根為所給DN的子樹下是所有條目相匹配
attrs="*,+"
複製所有屬性
#attrs="cn,sn,ou,telephoneNumber,title,l"
複製指定的屬性
schemachecking=off
同步更新時是否開啟檢查schema的一致性
bindmethod=simple
以下三項和舊版本內容一樣不做解釋。
binddn="cn=root,dc=kingbright,dc=com"
credentials=3Eg+gKegvZ73HYz5c2c5JA==
SLAVE綜所上述大致增加以下幾行
syncrepl rid=123
provider=ldap://172.16.9.132:389
type=refreshOnly
interval=01:00:00:00
searchbase="dc=kingbright,dc=com"
filter="(objectClass=*)"
scope=sub
attrs="*,+"
schemachecking=off
bindmethod=simple
binddn="cn=root,dc=kingbright,dc=com"
credentials=3Eg+gKegvZ73HYz5c2c5JA==
《解決方案》
你好,作為初學者,我想請問下mirror mode裡面 bindmethod用了simple,所以rootpw必須是明文吧?credentials指的不就是另一台伺服器的rootpw么?
我試驗這樣配置就不能成功的的同步,如果密碼都改成明文就可以。
可不可以指點下用加密過的密碼如何實現同步呢?
bindmethod=simple
credentials=3Eg+gKegvZ73HYz5c2c5JA==
《解決方案》
回復 2# tiangexuan
bindmethod=simple 機制不變。(openldap一共三種機制simple/sasl/kerberos認證),加密也是屬於simple機制。
這裡還有一個設定用戶賬號的地方。
credentials=3Eg+gKegvZ73HYz5c2c5JA== (此參數本來就暗文明文都支持,我不知道你的版本是多少)
bindmethod=simple 密碼機制
binddn="cn=root,dc=kingbright,dc=com" 使用同步的帳號
credentials=3Eg+gKegvZ73HYz5c2c5JA== 使用同步的密碼
credentials=a123456 也是可以。
請保持主從openldap服務器上述一致設定,另外,你把不要把這個同步的密碼理解為別人訪問你的,而是他訪問別人的時候要用到的密碼。
另外你真想提高同步安全性,靠這個md5密碼,純屬沒安全性。你應該使用ssl連接同步。不過這個配置比較複雜,給你提供一部份代碼
服務器A配置如下
syncrepl rid=001
provider=ldaps://172.16.9.158:636 B ip地址
type=refreshAndPersist 推模式
retry="5 5 300 +"
searchbase="dc=kingbright,dc=com"
attrs="*,+"
bindmethod=simple
binddn="cn=root,dc=kingbright,dc=com"
credentials=3Eg+gKegvZ73HYz5c2c5JA==
starttls=yes 開始tls連接
tls_cert=/usr/local/etc/openldap/cacerts/newcert.cert 服務器A的證書
tls_key=/usr/local/etc/openldap/cacerts/newreq.key 服務器A的私鑰
tls_cacert=/usr/local/etc/openldap/cacerts/cacert.pem 服務器A的CA證書
tls_reqcert=never 不要求對方提供證書和私鑰
《解決方案》
回復 3# woxizishen
你好~謝謝你的耐心解答。
1. 我用的版本是openldap-2.4.23-31.el6.x86_64 。
2. 我看到openldap的手冊里是這麼寫的,所以我理解為simple模式只能用明文做密碼。
A bindmethod of simple requires the options binddn and credentials and should only be used when adequate security services (e.g. TLS or IPSEC) are in place. REMEMBER: simple bind credentials must be in cleartext!
3. 還有這句話「你把不要把這個同步的密碼理解為別人訪問你的,而是他訪問別人的時候要用到的密碼。」我不是特別理解。指的是兩個伺服器之間的訪問密碼么?4. 我的伺服器是這麼配的。A和B的控制賬號和密碼完全相同,只是ip不同。當我密碼用明文的時候就可以同步,但是密碼如果用的是密文就不能同步。是不是我其他的配置有問題呢?5. 還有database monitor這個資料庫到底是起什麼作用的呢?一直不明白為什麼要配置這個資料庫。6. sasl加密沒有tls安全么?
伺服器Amoduleload syncprov.la
database bdbsuffix "dc=****,dc=****"checkpoint 1024 15
rootdn "cn=manager,dc=***,dc=***"
rootpw {SSHA}cXUVsI2kuKNK9kjCagWtvraossyAKuhX
directory /var/lib/ldap/tmsr
access to * by self write by * read
# Indices to maintain for this databaseindex objectClass,entryCSN,entryUUID eq,presindex ou,cn,mail,surname,givenname eq,pres,subindex uidNumber,gidNumber,loginShell eq,presindex uid,memberUid eq,pres,subindex nisMapName,nisMapEntry eq,pres,sub
serverID 1 (A和B伺服器這裡是不同的)
syncrepl rid=111 provider=ldap://***** (A和B伺服器這裡是對方的IP) bindmethod=simple binddn="cn=manager,dc=***,dc=***" credentials={SSHA}cXUVsI2kuKNK9kjCagWtvraossyAKuhX searchbase="dc=****,dc=***" schemachecking=on type=refreshAndPersist retry="60 +"mirrormode onoverlay syncprovsyncprov-checkpoint 100 10syncprov-sessionlog 100
#enable monitoringdatabase monitor# allow onlu rootdn to read the monitoraccess to attrs=userPassword,shadowLastChange by self write by users read by anonymous auth# by * noneaccess to * by dn.exact="cn=manager,dc=tmsr,dc=org" write# by * read by users read by anonymous read
《解決方案》
woxizishen 發表於 2013-11-01 11:49 static/image/common/back.gif
openldap-v2.4主從配置
前言:
這個裡面,好多圖片出不來呢