LDAP - Replication
好了,我不多說,現在我就來示範如何建立一個 (或兩個以上) 的 LDAP Replication Server。
建立 Replication Server
為什麼我要反其道而行先建立好 Replication Server,其實這是個人習慣,因為 Master LDAP Server 是已知的資訊,而 Slave 卻是待產生的,所以我想應該要先把這個東西先生出來才能繼續設定。
當然了你必要安裝套件才行,需要有的套件就如同 LDAP 入門 (new window) 一樣,請參考一下吧。
在下面的示範我會建立 ldap2 和 ldap3 這兩個 Replication Server,也就是有兩個次要 LDAP 的查尋伺服器。
ldap2.l-penguin.idv.tw
為了效能,我們需要把 DB_CONFIG 這個檔建 copy 一份到 LDAP 資料庫的目錄,以便參考。
0001 |
root # cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG |
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 |
root # vi /etc/openldap/slapd.conf ------------------------------------------------------- # 設定 suffix、rootdn 及 rootpw。 suffix "dc=l-penguin,dc=idv,dc=tw" rootdn "cn=ldap2,dc=l-penguin,dc=idv,dc=tw" rootpw password # 設定 updatedn, 一般和 rootdn 一樣, 不過也可以設定一 # 具有修改權利的帳號。 updatedn "cn=ldap2,dc=l-penguin,dc=idv,dc=tw" # 設定主要 Master Server 的主機名稱。 updateref ldap://ldap.l-penguin.idv.tw ------------------------------------------------------- root # |
ldap3.l-penguin.idv.tw
第二部 Replication Server 和第一部 Replication Server 是一樣的設定方法,我就一次做完。
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 |
root # cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG root # vi /etc/openldap/slapd.conf ------------------------------------------------------- # 設定 suffix、rootdn 及 rootpw。 suffix "dc=l-penguin,dc=idv,dc=tw" rootdn "cn=ldap3,dc=l-penguin,dc=idv,dc=tw" rootpw password # 設定 updatedn, 一般和 rootdn 一樣, 不過也可以設定一 # 具有修改權利的帳號。 updatedn "cn=ldap3,dc=l-penguin,dc=idv,dc=tw" # 設定主要 Master Server 的主機名稱。 updateref ldap://ldap.l-penguin.idv.tw ------------------------------------------------------- root # |
建立 Master Server
要讓主要伺服器可以順利同步到 Replication Server,Master Server 的設定很重要,如果設定不完全就會讓同步失效。現在我們就來編輯 slapd.conf。
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 |
root # vi /etc/openldap/slapd.conf ----------------------------------------------------------- # 設定資料修改的差異檔。 # 這個設定非常重要,請不要乎略。 replogfile /var/lib/ldap/openldap-master-replog # 1. 設定第一個 Replication Server,並以 tls 來做傳輸。 # 2. 使用簡易傳輸,使用 cn=ldap2,dc=l-penguin,dc=idv,dc=tw # 和 password 來做帳號密碼驗證。 replica host=ldap2.l-penguin.idv.tw:389 suffix="dc=l-penguin,dc=idv,dc=tw" binddn="cn=ldap2,dc=l-penguin,dc=idv,dc=tw" credentials=password bindmethod=simple tls=yes # 1. 設定第二個 Replication Server,並以 tls 來做傳輸。 # 2. 使用簡易傳輸,使用 cn=ldap3,dc=l-penguin,dc=idv,dc=tw # 和 password 來做帳號密碼驗證。 replica host=ldap3.l-penguin.idv.tw:389 suffix="dc=l-penguin,dc=idv,dc=tw" binddn="cn=ldap3,dc=l-penguin,dc=idv,dc=tw" credentials=password bindmethod=simple tls=yes ----------------------------------------------------------- root # |
請注意,你應該要先做好 DNS 的對應 (ldap2.l-penguin.idv.tw 及 ldap3.l-penguin.idv.tw),否則怎麼樣都會無法同步到。
你可以選擇是否要以 tls 來做資料傳輸,我建議最好使用,因為很難確定資料在同步的時候是否有人有意竊聽。
資料複製
Dump Master Server Data
在此我使用 slapcat 來做資料 dump,並使用 scp 傳送到兩台 Replication Server。
0001 0002 0003 0004 |
root # slapcat -b "dc=l-penguin,dc=idv,dc=tw" -l ldap.l-penguin.idv.tw.ldif root # scp ldap.l-penguin.idv.tw.ldif steven@ldap2.l-penguin.idv.tw:~/ root # scp ldap.l-penguin.idv.tw.ldif steven@ldap3.l-penguin.idv.tw:~/ |
現在兩台 Replication Server 都有了完整的資料,那麼馬上就來還原。
0001 |
root # slapadd -l ~steven/ldap.l-penguin.idv.tw.ldif |
啟動 LDAP 並做驗證
當設定好 LDAP 之後,記得要重新啟動,並且 Master 和 Slave 都要啟動才行。
重新啟動 ldap.l-penguin.idv.tw。
0001 0002 0003 0004 0005 0006 0007 0008 |
root # service ldap restart Stopping slapd: [ OK ] Stopping slurpd: [ OK ] Checking configuration files for slapd: config file testing succeeded [ OK ] Starting slapd: [ OK ] Starting slurpd: [ OK ] root # |
重新啟動 ldap2 及 ldap3。
0001 0002 0003 0004 0005 0006 |
root # service ldap restart Stopping slapd: [ OK ] Checking configuration files for slapd: config file testing succeeded [ OK ] Starting slapd: [ OK ] root # |
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 0040 0041 0042 0043 0044 0045 0046 0047 0048 0049 0050 0051 |
root # ldapsearch -x -b "ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw" # extended LDIF # # LDAPv3 # base <ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw> with scope subtree # filter: (objectclass=*) # requesting: ALL # # user, login, l-penguin.idv.tw dn: ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw ou: user objectClass: organizationalUnit # c293831287, user, login, l-penguin.idv.tw dn: cn=c293831287,ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw uid: c293831287 cn: c293831287 objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword:: aHJDMjkzODMxMjg3 shadowLastChange: 11108 shadowMax: 99999 shadowWarning: 7 shadowFlag: 0 loginShell: /bin/bash uidNumber: 600 gidNumber: 510 homeDirectory: /home/c293831287 gecos: Nicole Coon # d197700415, user, login, l-penguin.idv.tw dn: cn=d197700415,ou=user,ou=login,dc=l-penguin,dc=idv,dc=tw uid: d197700415 cn: d197700415 objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword:: aHJEMTk3NzAwNDE1 shadowLastChange: 11108 shadowMax: 99999 shadowWarning: 7 shadowFlag: 0 loginShell: /bin/bash uidNumber: 601 gidNumber: 510 homeDirectory: /home/d197700415 gecos: Sheri Hussey ~ 哇塞! 資料太多了, 以下略過 :D ~ root # |
修改 Master 資料並檢查是否同步
在此我使用在 LDAP 入門 (new window) 時所提的 ldapbrowser 這個工具來做示範。
現在這位 廖佑綺 小姐的 sn 值是 N/A,現在我來把她重新設定。
現在馬上來看看另外兩部的變化:
你可以在兩台 Replication Server 上看到是否以 TLS 方式傳輸。
0001 0002 0003 0004 0005 0006 0007 |
root # cat ldap.log | grep 'tls' Feb 24 03:32:31 ldap2 slapd[1772]: conn=6 fd=14 TLS established tls_ssf=256 ssf=256 Feb 24 03:34:31 ldap2 slapd[1843]: conn=0 fd=14 TLS established tls_ssf=256 ssf=256 Feb 26 23:30:09 ldap2 slapd[1696]: conn=1 fd=22 TLS established tls_ssf=256 ssf=256 Feb 26 23:33:36 ldap2 slapd[1776]: conn=1 fd=16 TLS established tls_ssf=256 ssf=256 root # |
當然以上在傳輸的時候已經使用 TLS 方式來修改資料,當然你也可以設定使用 SSL 來對整個過程都使用 SSL 的加密方式傳輸。
設定 Master Server:
0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 |
root # vi /etc/openldap/slapd.conf --------------------------------------------------------- # 使用 uri 項目來指定傳輸方式。或酗]不再使用 tls 了。 replica uri=ldaps://ldap2.l-penguin.idv.tw:636 suffix="dc=l-penguin,dc=idv,dc=tw" binddn="cn=ldap2,dc=l-penguin,dc=idv,dc=tw" credentials=password bindmethod=simple # 使用 uri 項目來指定傳輸方式。或酗]不再使用 tls 了。 replica uri=ldaps://ldap3.l-penguin.idv.tw:389 suffix="dc=l-penguin,dc=idv,dc=tw" binddn="cn=ldap3,dc=l-penguin,dc=idv,dc=tw" credentials=password bindmethod=simple --------------------------------------------------------- root # |
0001 0002 0003 0004 0005 0006 |
root # vi /etc/openldap/slapd.conf --------------------------------------------------------- # 使用 ssl 方式傳輸。 updateref ldaps://ldap.l-penguin.idv.tw --------------------------------------------------------- root # |
若要使用 ldaps 方式來做完全的加密傳輸,那麼你應該要設定伺服器的 CA 憑證才可以,要設定 CA 憑證可以參考 LDAP - LDAP with TLS/SSL (new window) 的文件。我在這裡就不再說明。
設定平衡負載當你有兩台以上的次要 LDAP 服務時,可能會想要分散流量到兩台主機,此時你可以使用 DNS 的循環調渡方式來解決流量問題。
若要使用 DNS 的方式,請參考 bind - DNS 設定 (new window)。
Last modified: 02/26/2007