在本篇中我们将在CentOS 7上配置OpenLDAP服务器的多主复制。这种多主复制设置是为了克服典型的主从
复制的限制,在主从模式中,只有主服务器可以在LDAP目录中进行更改操作。在多主复制中,两个或多个
服务器充当主服务器,所有这些服务器对于LDAP目录中的任何更改都是权威的。客户机的查询在复制的帮
助下分布在多个服务器上。
Host Name
IP Address
OS
Node
ldapsvr01.kclouder.local
192.168.137.11
CentOS 7
LDAP-Master1
ldapsvr01.kclouder.local
192.168.137.12
CentOS 7
LDAP-Master2
ldapclient01.kclouder.local
192.168.137.21
CentOS 7
LDAP-Client
**配置OpenLDAP多主复制: **
注意:这里假设我们已经按照前文中配置好了两台LDAP服务器,所以LDAP服务器配置的步骤在此省略,可以
参照前文进行配置。将示例数据库配置文件复制到/var/lib/ldap目录并更新文件权限。除非另有说明,否
则需要在所有OpenLDAP服务器上执行以下步骤。
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown ldap:ldap /var/lib/ldap/*
启用syncprov模块
vi syncprov_mod.ldif
创建完ldif文件之后,将配置发送到LDAP服务器
ldapadd -Y EXTERNAL -H ldapi:/// -f syncprov_mod.ldif
启用复制功能
更改所有服务器上的olcServerID。对于ldpsvr011,将olcServerID设置为1,对于ldpsvr02,将
olcServerID设置为2。
vi olcserverid.ldif
创建完ldif文件之后,将配置发送到LDAP服务器
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcserverid.ldif
生成LDAP配置复制的密码,需要在所有LDAP Master服务器上执行此操作
slappasswd
设置“配置数据库”的密码,加入上一步生成的密码
vi olcdatabase.ldif
将配置发送到LDAP服务器
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabase.ldif
在所有服务器上配置复制
vi configrep.ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f configrep.ldif
启用数据库复制
到这里,LDAP的复制就已经配置完成。现在我们还要启用实际数据的复制,即用户数据库数据的复制。在任
何一个节点上执行以下步骤即可,因为如果前面的配置正确,其他节点会对配置进行自动复制。
为hdb数据库启用syncprov
vi syncprov.ldif
将配置发送到LDAP服务器
ldapmodify -Y EXTERNAL -H ldapi:/// -f syncprov.ldif
设置hdb数据库的复制
vi olcdatabasehdb.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=kclouder,dc=local
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=kclouder,dc=local
replace: olcRootPW
olcRootPW: {SSHA}XaBGhLHZ9TgevkyOPlRev4zeN8DXWQOL
add: olcSyncRepl
olcSyncRepl: rid=004 provider=ldap://ldpsvr01.kclouder.local binddn=”cn=ldapadm,dc=kclouder,dc=local” bindmethod=simple
credentials=x searchbase=”dc=kclouder,dc=local” type=refreshOnly
interval=00:00:00:10 retry=”5 5 300 5” timeout=1
olcSyncRepl: rid=005 provider=ldap://ldpsvr02.kclouder.local binddn=”cn=ldapadm,dc=kclouder,dc=local” bindmethod=simple
credentials=x searchbase=”dc=kclouder,dc=local” type=refreshOnly
interval=00:00:00:10 retry=”5 5 300 5” timeout=1
add: olcDbIndex
olcDbIndex: entryUUID eq
add: olcDbIndex
olcDbIndex: entryCSN eq
add: olcMirrorMode
olcMirrorMode: TRUE
将配置发送到LDAP服务器
ldapmodify -Y EXTERNAL -H ldapi:/// -f olcdatabasehdb.ldif
更改olcDatabase={1}monitor.ldif文件,将Monitor访问限制为仅允许LDAP root (ldapadm) user
vi monitor.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base=”gidNumber=0+uidNumber=0,cn=peercred,cn=external, cn=auth” read by dn.base=”cn=ldapadm,dc=kclouder,dc=local” read by * none
将配置发送到LDAP服务器
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
添加 LDAP schemas
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
生成base.ldif配置文件
vi base.ldiff
dn: dc=kclouder,dc=local
dc: kclouder
objectClass: top
objectClass: domain
dn: cn=ldapadm ,dc=kclouder,dc=local
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou=People,dc=kclouder,dc=local
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=kclouder,dc=local
objectClass: organizationalUnit
ou: Group
构建目录结构
ldapadd -x -W -D “cn=ldapadm,dc=kclouder,dc=local” -f base.ldif
测试LDAP复制
在Master1上创建一个用户“ldaptest”
vi ldaptest.ldif
dn: uid=ldaptest,ou=People,dc=kclouder,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldaptest
uid: ldaptest
uidNumber: 9988
gidNumber: 100
homeDirectory: /home/ldaptest
loginShell: /bin/bash
gecos: LDAP Replication Test User
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
添加用户
ldapadd -x -W -D “cn=ldapadm,dc=kclouder,dc=local” -f ldaptest.ldif
在Master1上搜索用户“ldaptest”
ldapsearch -x cn=ldaptest -b dc=kclouder,dc=local
在Master2上为在Master1上创建的用户“ldaptest”设置密码。如果能够设置密码,说明LDAP多主复制已经
正常工作
ldappasswd -s ldaptest123 -W -D “cn=ldapadm,dc=kclouder,dc=local” -x “uid=ldaptest,ou=People,dc=kclouder,dc=local”
在客户端上绑定两台主服务器
authconfig –enableldap –enableldapauth –ldapserver=ldpsvr01.kclouder.local,ldpsvr02.kclouder.local –ldapbasedn=”dc=kclouder,dc=local” –enablemkhomedir –update
验证Client可以通过账号“ldaptest”