1、服务器说明
openldap的主从搭建还是比较简单的,这个和mysql的主从搭建类似,只需要修改相应的配置即可。
| 服务器 | 角色 |
| ————- | —— |
| 192.168.31.10 | Master |
| 192.168.31.11 | Slave |
2、Master安装Openldap
按照第一章进行安装,然后再导入组织、用户、用户组等信息。
此步骤省略。。。。
3、slave上安装openldap
而要在slave机器上配置openldap的主从,我们也要安装openldap并进行相关配置。
有关openldap的安装与配置,我们可以参考<<第一章>>》。
其中后续的章节,比如:导入基础数据库、导入用户、导入用户组和用户加入到用户组都不需要。
此步骤省略。。。。。。。。。。。。。。。
我们注意到ldapadmin连接后,是有报错信息的,这个是因为我们还没有配置主从,slave中现在还没有数据导致的。
4、Master的上主从配置
现在正式开始openldap的master-slave配置,在master机器,我们需要进行导入相关的属性。如下:
cat > /root/syncprov_mod.ldif << EOF
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib64/openldap
olcModuleLoad: syncprov.la
EOF
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/syncprov_mod.ldif
cat > /root/syncprov.ldif << EOF
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 1 1
olcSpSessionLog: 1024
EOF
ldapadd -Y EXTERNAL -H ldapi:/// -f /root/syncprov.ldif
以上就是master机器上的配置。
5、Slave的上主从配置
在slave机器上配置master-slave,如下:
[root@slave-ldap ~]# cat /root/slave.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl:
rid=001
provider=ldap://192.168.31.10:389/
bindmethod=simple
binddn="cn=admin,dc=hebye,dc=com"
credentials=wdm123
searchbase="dc=hebye,dc=com"
scope=sub
schemachecking=on
type=refreshAndPersist
retry=" 30 5 300 3"
attrs="*,+"
interval=00:00:00:02
-
add: olcDbIndex
olcDbIndex: uid eq,pres
olcDbIndex: uniqueMember eq,pres
olcDbIndex: uidNumber,gidNumber eq,pres
olcDbIndex: member,memberUid eq,pres
olcDbIndex: entryUUID eq
olcDbIndex: entryCSN eq
[root@slave-ldap ~]#
[root@slave-ldap ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/slave.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"
其中provider表示master的地址,其他的都是些基础信息。不过这里面需要注意的是认证用户一定要使用超级管理员,如果使用普通用户连接master的话,slave将不会同步用户的密码字段信息。
除此之外,为了优化openldap的查询速度,我们添加了相关字段属性的索引。
6、验证主从正确性
slave机器上配置完毕后,无需重启master机器和slave机器的slapd服务。
在slave机器上查看openldap日志,如下:
tail -f /var/log/slapd.log
Sep 13 15:59:36 slave-ldap slapd[12368]: conn=1002 op=2 UNBIND
Sep 13 15:59:36 slave-ldap slapd[12368]: conn=1002 fd=11 closed
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 fd=11 ACCEPT from IP=192.168.31.1:6277 (IP=0.0.0.0:389)
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=0 BIND dn="cn=admin,dc=hebye,dc=com" method=128
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=0 BIND dn="cn=admin,dc=hebye,dc=com" mech=SIMPLE ssf=0
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=0 RESULT tag=97 err=0 text=
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=1 SRCH base="dc=hebye,dc=com" scope=1 deref=0 filter="(objectClass=*)"
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=1 SRCH attr=objectclass
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=1 SEARCH RESULT tag=101 err=0 nentries=2 text=
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=2 SRCH base="dc=hebye,dc=com" scope=0 deref=0 filter="(objectClass=*)"
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=2 SEARCH RESULT tag=101 err=0 nentries=1 text=
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=3 SRCH base="" scope=0 deref=0 filter="(objectClass=*)"
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=3 SRCH attr=subschemaSubentry
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=3 SEARCH RESULT tag=101 err=0 nentries=1 text=
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=4 SRCH base="cn=Subschema" scope=0 deref=0 filter="(objectClass=*)"
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=4 SRCH attr=ldapSyntaxes attributeTypes objectclasses matchingRules matchingRuleUse
Sep 13 15:59:40 slave-ldap slapd[12368]: conn=1012 op=4 SEARCH RESULT tag=101 err=0 nentries=1 text=
Sep 13 15:59:42 slave-ldap slapd[12368]: conn=1012 op=5 SRCH base="ou=People,dc=hebye,dc=com" scope=1 deref=0 filter="(objectClass=*)"
Sep 13 15:59:42 slave-ldap slapd[12368]: conn=1012 op=5 SRCH attr=objectclass
Sep 13 15:59:42 slave-ldap slapd[12368]: conn=1012 op=5 SEARCH RESULT tag=101 err=0 nentries=4 text=
Sep 13 16:00:28 slave-ldap slapd[12368]: conn=1012 op=6 SRCH base="uid=ldapuser1,ou=People,dc=hebye,dc=com" scope=0 deref=0 filter="(objectClass=*)"
Sep 13 16:00:28 slave-ldap slapd[12368]: conn=1012 op=6 SEARCH RESULT tag=101 err=0 nentries=1 text=
通过上图我们也可以发现master没有报错,而且也看到slave机器已经在同步信息了。
现在我们再使用ldapadmin工具,连接slave查看相关信息,如下:
通过上图,我们可以看到slave机器上已经有master相关的信息。
这也就说明了openlap的master-slave已经在正常同步数据。
7、master上修改用户信息
master上修改用户信息,验证slave机器也已经同步了master机器的信息
8、master上添加用户和用户组
本来是打算再测试下,在master机器上添加用户和用户组,是不是会同步到slave上的功能。
但是根据前面的信息其实我们已经看到了,slave在没有用户和用户组的情况下,已经把master上的用户和用户组同步过来。
所以该项功能,在此我们就不在进行测试。
9、slave上修改用户组信息
因为我们在此做的是openldap的主从同步,所以我们现在再验证下,如果我们在slave机器上修改openldap相关的信息,是否是被允许的呢。
这个报错信息其实是对的,因为openldap的master-slave本来就是不允许slave修改openlap的相关信息。
openldap的master-slave很重要,在其他应用系统连接openldap时,我们只提供slave让其连接即可。这样可以增加openldap的安全性,防止有人意外修改openldap相关信息。