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