热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

OpenLDAPMaster-Slave同步复制

1、实验环境说明用于做OpenLDAP同步的两台机器的IP分别为:192.168.1.35(Master), 192.168.1.36(Slave)操作系统:CentOS6.5x64

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、实现原理

其实现原理如下图,当在主服务器上更新数据时,该更新通过更新日志记录,并将更新复制到从服务器上。当在从服务器上更新数据时,该更新请求将重定向给主服务器,然后主服务器将更新数据复制到从服务器。

OpenLDAP Master-Slave同步复制


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 stop

2、编辑 /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 stop

2、编辑 /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 User

2、然后在 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=com

4、在Master 和 Slave 上查看同步日志记录

# tail -f /var/log/ldap.log



要点1 在配置数据复制前 保证主备初始化数据的一致

2 停掉主服务器  更改主服务器的配置文件

3 停掉备服务器  更改备服务器的配置文件

4 重起 主备服务器进程

5 验证同步




推荐阅读
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
author-avatar
tomphilip_399_140
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有