OpenLDAP Master-Slave同步复制
2017-06-18 16:16
281 查看
1、实验环境说明
用于做OpenLDAP同步的两台机器的IP分别为: 192.168.1.35(Master), 192.168.1.36(Slave)操作系统: CentOS 6.5 x64 , 并且已经安装好 OpenLDAP ,其管理员为 cn=Manager,dc=test,dc=com, 管理员密码: ldap
实验环境: VMware Workstation , 可以先安装好 Master, 然后直接克隆一个镜像作为 Slave
OpenLDAP 安装配置请参考: OpenLDAP安装与基本配置
2、实验目的
为了避免单点故障,通常都会采用双机环境。使用OpenLDAP复制同步功能,保持Master 与 Slave 的数据一致性。Ldap Master : 提供所有的更新、修改
Ldap Slave : 提供给各种应用(jira, zabbix, svn ...)调用
配置过程相当坎坷。
生产环境中,ldap server都部署2台,做主从配置,这样可以提供目录服务的高可用性,两台ldap服务器之间自动同步数据。配置openldap主从结构,或许网上会有很多的文章或者博客介绍,但是绝大部分都是基于2.3的版本,注意2.3的主从配置是不适用于2.4的,所以如果要使用openldap2.4配置主从结构,在搜索的时候要注意。然而,即使百度了也会发现,网上只有寥寥几篇关于 openldap 2.4的主从配置文档,而且还都是浅尝辄止,当然,文章的作者可能已经对配置神而明之了,但是读者看了之后绝对会“晕而乎之”的,大多数的高手就甩给你一个slapd.conf针对replication的配置,然后就没有然后了。没辙,为了能get这个技能,只有翻墙了,Google了一下,其实有用的也就是官方的administrator手册,看手册是最能理解replication是怎么一回事儿的,但是前提是你有耐心,而且英语可以还不能较真(因为里面的句子真心觉得翻译起来不是那么回事儿),好吧,原来Google上关于这方面的文档也不是很多,最后也只能看官方手册,然后自己动手了。
3、实现原理
其实现原理如下图,当在主服务器上更新数据时,该更新通过更新日志记录,并将更新复制到从服务器上。当在从服务器上更新数据时,该更新请求将重定向给主服务器,然后主服务器将更新数据复制到从服务器。4、配置过程(syncrepl 模式)
注意:在进行下面的操作前,请先确保你的OpenLDAP 已经正常安装。4.1 OpenLDAP 前期配置准备
同步数据初始化
在Master 与 Slave 上都执行,清除LDAP数据库的数据:
# ldapdelete -x -D "cn=Manager,dc=test,dc=com" -w ldap -r "dc=test,dc=com" # 准备 ldif 数据 # cat /tmp/base.ldif dn: dc=test,dc=com dc: test objectClass: top objectClass: domain dn: ou=People,dc=test,dc=com ou: People objectClass: top objectClass: organizationalUnit dn: ou=Group,dc=test,dc=com ou: Group objectClass: top objectClass: organizationalUnit # 分别在 Master, Slave 导入 # ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/base.ldif
4.2 主服务器(Master)配置
1、首先停止 slapd 服务
# service slapd stop2、编辑 /etc/openldap/slapd.conf配置文件
# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bak # vim /etc/openldap/slapd.conf modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la index entryCSN,entryUUID eq overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100注:这里对slapd.conf文件所做的修改如下: 1)取消了modulepath /usr/lib/openldap, modulepath /usr/lib64/openldap 之前的注释 2)取消了moduleload syncprov.la之前的注释 3)在index nisMapName,nisMapEntry eq,pres,sub 这一行之后添加如下内容: # master replia server start overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100
3、配置好,重点来了!!!
你直接启动ldap(/etc/init.d/slapd start)是不读新的配置的,以我暂且的测试结果来讲是发现这么个情况的!所以,要这样
#删除就得配置缓存(暂且这么理解吧), 如果生产环境,建议先备份 rm -rf /etc/openldap/slapd.d/* #测试 # slaptest -u #生成新的 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ chown -R ldap:ldap /etc/openldap/slapd.d/ #如果前面2条命令都是 succeeded, 就可以重启slapd服务了 #最后一步,重启slapd服务,至此主节点的配置完成。 service slapd restart
4.3 从服务器(Slave)配置
1、首先停止 slapd 服务
# service slapd stop2、编辑 /etc/openldap/slapd.conf配置文件
# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bak # vim /etc/openldap/slapd.conf modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload syncprov.la index entryCSN,entryUUID eq syncrepl rid=123 provider=ldap://192.168.1.35:389 type=refreshOnly retry="5 5 300 5" interval=00:00:01:00 searchbase="dc=test,dc=com" filter="(objectClass=*)" scope=sub attrs="*" schemachecking=off bindmethod=simple binddn="cn=Manager,dc=test,dc=com" credentials=ldap
注:这里对slapd.conf文件所做的修改如下: 1)取消了modulepath /usr/lib/openldap,modulepath /usr/lib64/openldap之前的注释 2)取消了moduleload syncprov.la之前的注释 3)在index nisMapName,nisMapEntry eq,pres,sub这一行之后添加如下内容: # slave replica statement start syncrepl rid=123 provider=ldap://192.168.1.35:389 type=refreshOnly interval=00:00:01:00
searchbase="dc=test,dc=com"
scope=sub attrs="*"
schemachecking=off
bindmethod=simple binddn="cn=Manager,dc=test,dc=com"
credentials=123456
3、配置好,重点来了!!!
你直接启动ldap(/etc/init.d/slapd start)是不读新的配置的,以我暂且的测试结果来讲是发现这么个情况的!所以,要这样
#删除就得配置缓存(暂且这么理解吧), 如果生产环境,建议先备份 rm -rf /etc/openldap/slapd.d/* #测试 # slaptest -u #生成新的 slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/ chown -R ldap:ldap /etc/openldap/slapd.d/ #如果前面2条命令都是 succeeded, 就可以重启slapd服务了 #最后一步,重启slapd服务,至此主节点的配置完成。 service slapd restart
4.4 测试数据同步
1、在 Master 上准备测试数据,添加一个新用户
# cat /tmp/passwd.ldif dn: uid=ldap,ou=People,dc=test,dc=com uid: ldap cn: LDAP User objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}!! shadowLastChange: 17334 loginShell: /sbin/nologin uidNumber: 55 gidNumber: 55 homeDirectory: /var/lib/ldap gecos: LDAP User2、然后在 Master 导入
# ldapadd -x -D "cn=Manager,dc=test,dc=com" -w ldap -f /tmp/passwd.ldif
3、在Master和Slave上面分别查询
# ldapsearch -x -H ldap://192.168.1.35 -b "dc=test,dc=com" |grep uid=ldap dn: uid=ldap,ou=People,dc=test,dc=com # ldapsearch -x -H ldap://192.168.1.36 -b "dc=test,dc=com" |grep uid=ldap dn: uid=ldap,ou=People,dc=test,dc=com4、在Master 和 Slave 上查看同步日志记录
# tail -f /var/log/ldap.log
要点1 在配置数据复制前 保证主备初始化数据的一致
2 停掉主服务器 更改主服务器的配置文件
3 停掉备服务器 更改备服务器的配置文件
4 重起 主备服务器进程
5 验证同步
相关文章推荐
- mysql 主从master-slave同步复制 配置,为读写分离准备
- mysql同步复制报Slave can not handle replication events with the checksum that master 错误
- mysql同步复制报Slave can not handle replication events with the checksum that master 错误
- MySQL半同步复制-答疑解惑-master dump线程等待slave的ACK是死等吗
- OpenLDAP Master/Slave部署
- MySQL主从复制(Master-Slave),半同步复制与读写分离(MySQL-Proxy)
- MySQL半同步复制--handle_slave_io等待master发送event
- 【MySQL】MySQL同步报错-> received end packet from server, apparent master shutdown: Slave I/O thread: Failed reading log event, reconnecting to retry报错解决和分析
- mysql (master/slave)复制原理及配置
- Redis主从复制(Master/Slave)
- MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)
- Solr 基于java的复制(Master-Slave配置)
- Redis的master/slave复制(主从复制)
- [转]MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
- Redis主从(Master-Slave)复制(Replication)设置
- 处理slave(低版本)复制master(高版本)产生的error 1236
- (精典教程)在MySql上实现Replication(Master 与 Slave 数据同步)
- MongoDB的Master-Slave主从模式配置及主从复制要点解析
- MySQL Master Slave同步配置
- Mysql---Master-slave复制方案