现有两台机器,分别是ldap-1.example.com和ldap-2.example.com,
已经分别按照http://yang8787jie-126-com.iteye.com/admin/blogs/671693安装了端口为389的sun-ldap实例。
现按照下面的步骤实现在两个实例间的主主复制,即修改任何一个实例中的数据,另一个实例中的数据同样会被修改。
以下命令在机器ldap-1.example.com上进行操作:
步骤一:
使用以下命令看是否已经配置了允许LDAP实例主主复制,
#./dsconf list-suffixes -p 389 -v
SUFFIX_DN entry-count repl-role repl-agmts repl-priorities indexes encr-attrs
------------------- ----------- -------------- ---------- --------------- ------- ----------
dc=zju,dc=edu,dc=cn 402 not-replicated N/A N/A 29 0
如果repl-role=not-replicated,则表示既没有启用主主复制也没有启用主从复制。
如果repl-role=consumer,表示已经启用主从复制,则需要先删除主从复制的设置,
使用命令./dsconf disable-repl -h ldap-1.example.com -p 389 dc=zju,dc=edu,dc=cn进行删除。
当然也可以使用升级命令或降级命令来实现,
详见dsconf的参数详见http://docs.sun.com/app/docs/doc/820-2767/dsconf-1m?l=zh_TW&a=view。
#./dsconf enable-repl -h ldap-1.example.com -p 389 -d 3891 master dc=zju,dc=edu,dc=cn
上面命令中-d后面跟的是REPL_ID的值,范围是1到65534,并且特别注意,绝对不能跟ldap-2.example.com上设置的REPL_ID相同。
否则,会出现如下情况:
[
[root@localhost bin]# ./dsconf init-repl-dest -h localhost -p 389 dc=zju,dc=edu,dc=cn ldap-2.example.com:389
Enter "cn=Directory Manager" password:
Initialization of "ldap-2.example.com:389" failed
Server exit code: "810"
Server exit message: "Replication error initializing replica: Total update failed - Cons and supp RUV match"
The "init-repl-dest" operation failed on "localhost:389".
]
#./dsconf list-suffixes -p 389 -v
步骤三:
为LDAP实例修改复制管理器的密码:
#echo replmanager > pwd.txt
#cat pwd.txt
#./dsconf set-server-prop -h ldap-1.example.com -p 389 def-repl-manager-pwd-file:pwd.txt
步骤五:
为每个LDAP实例创建复制协议:
#./dsconf list-repl-agmts -h localhost -p 389 -v dc=zju,dc=edu,dc=cn
#./dsconf create-repl-agmt -h ldap-1.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-2.example.com:389
#./dsconf list-repl-agmts -h localhost -p 389 -v dc=zju,dc=edu,dc=cn
步骤七:
初始化LDAP实例的复制协议:
#./dsconf show-repl-agmt-status -h ldap-1.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-2.example.com:389
#./dsconf init-repl-dest -h ldap-1.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-2.example.com:389
上面的命令运行后, 机器ldap-2.example.com上的389实例将被初始化跟 ldap-1.example.com上389实例一样
#./dsconf show-repl-agmt-status -h ldap-1.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-2.example.com:389
步骤九:
验证主主复制是否已经成功工作:
#cd /ldap/install/dsrk6/bin
#./ldapmodify -a -h ldap-1.example.com -p 389 -D cn=admin,cn=Administrators,cn=config -w admin123
dn: ou=test,dc=zju,dc=edu,dc=cn
objectclass: top
objectclass: organizationalUnit
ou: test
description: Container for user entries
每输入一行,按回车键进入下一行的输入,全部输入完毕后,按2次回车,再按ctrl+c确定并退出。
以下命令在机器ldap-2.example.com上进行操作
步骤二:
#./dsconf list-suffixes -p 389 -v
#./dsconf enable-repl -h ldap-2.example.com -p 389 -d 3892 master dc=zju,dc=edu,dc=cn
#./dsconf list-suffixes -p 389 -v
步骤四:
#echo replmanager > pwd.txt
#cat pwd.txt
#./dsconf set-server-prop -h ldap-2.example.com -p 389 def-repl-manager-pwd-file:pwd.txt
步骤六:
#./dsconf list-repl-agmts -h localhost -p 389 -v dc=zju,dc=edu,dc=cn
#./dsconf create-repl-agmt -h ldap-2.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-1.example.com:389
#./dsconf list-repl-agmts -h localhost -p 389 -v dc=zju,dc=edu,dc=cn
步骤八:
#./dsconf show-repl-agmt-status -h ldap-2.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-1.example.com:389
#./dsconf init-repl-dest -h ldap-2.example.com -p 389 dc=zju,dc=edu,dc=cn ldap-1.example.com:389
#./dsconf show-repl-agmt-status -h ldap-2.example.com -p 389 dc=zju,dc=edu,dc=cn
ldap-1.example.com:389
步骤十:
用以下命令查看新创建的实体是否已经复制过来:
#cd /ldap/install/dsrk6/bin
#./ldapsearch -b "dc=zju,dc=edu,dc=cn" -p 389 -D "cn=Directory Manager" -w admin123 "objectclass=organizationalUnit"