一.openldap简介

    LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。属于开源集中账号管理架构的实现。LDAP具有两个国家标准,分别是X.500和LDAP。OpenLDAP支持TCP/IP协议,目前TCP/IP协议是Internet上访问互联网协议。OpenLDAP直接运行在更简单和通用的TCP/IP或其他可靠的传输协议层上,避免了在OSI会话层和表示层的开销,使连接的建立和包的处理更简单,更快;OpenLDAP默认是以Berkeley DB作为后端数据库,Berkeley DB数据库主要以散列的数据库类型进行数据存储。

二.  DAP中常用的名词缩写即含义

  1.dc(domain component):域名,如域名为example.com变成dc=example,dc=com。

  2.uid(user id):指用户的的登录名称,如uid=tom,与linux系统的UID不是一个概念。

  3.ou(organization unit):制定一个组织单元的名称,如ou=people,dc=example,dc=com。

  4.cn(common name):指一个对象的名称,如果是人,需要使用全名。

  5.dn(distinguished name):唯一标识名,类似linux文件系统的绝对路径,每个对象都有唯一的标识           名,如uid=tom,ou=people,dc=example,dc=com。

  6.sn(sur name):指一个人的姓氏。

  7.giveName:指一个人的名字。

三.LDIF解释

  LDIF(LDAP Data Interchanged Format)的轻量级目录访问协议数据交换格式的简称,是存储LDAP配置信息及目录内容的标准文本文件格式。

四.Openldap同步原理及配置

  1.OpenLdap同步条件

    a.OpenLDAP服务器之间需要保持时间同步。

    b.OpenLDAP软件包版本一致。

    c.OpenLDAP节点之间域名可以互相解析。

    d.配置OpenLDAP同步复制,需要提供完全一样的配置及目录树。

    e.数据的条目保持一致。

    f.额外的schema文件保持一致。

  2.OpenLDAP5种同步模式(大体提一下,相关知识可百度)

    a.Syncrepl复制

    b.Delta-syncrepl复制(基于变更日志同步)

    c.N-Way Multi-Master复制

    d.MirrorMode复制(很重要)

    e.Syncrepl Proxy代理模式

五.OpenLDAP主主同步实战案例(Mirror Mode)

  1.前期规划:

    A服务器:192.168.239.140

    B服务器:192.168.239.139

    时间同步ntpdate

    把时间同步放在计划任务(crontab)中,时间同步很重要

    修改主机名以及hosts文件
    关闭防火墙和selinux

  2.下载对应的软件包

    检查是否安装wget(yum install -y wget)

    mkdir /openldap

    wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.4.23.tgz

    wget http://download.oracle.com/berkeley-db/db-4.6.21.tar.gz

  3.安装对应的软件包

    yum -y install libtool-ltdl libtool-ltdl-devel gcc openssl openssl-devel

    安装一些加密的软件包(不然后期会报错):yum -y install cyrus-sasl-lib.x86_64 

             cyrus-sasl-devel.x86_64   cyrus-sasl-plain.x86_64  cyrus-sasl-md5.x86_64   

             cyrus-sasl-ldap.x86_64

  4.编译安装Berkeley DB源码包:

    tar -xf db-4.6.21.tar.gz -C /usr/local/src 

    cd /usr/local/src/db-4.6.21/build_unix/ && mkdir /usr/local/BDB 

    ../dist/configure --prefix=/usr/local/BDB   # ../dist/configure --help可以查看帮助

    make && make install 

    echo "/usr/local/BDB/lib/" > /etc/ld.so.conf.d/bdb.conf   #添加的库文件和头文件主要作为其 他程序编译安装所调用的库文件和头文件。

    ldconfig -v  #重新让内核读取库文件

    ln -sv /usr/local/BDB/include   /usr/include/bdb #添加Berkeley DB相关头文件

  5.编译安装OpenLDAP源码包

    tar -xf openldap-2.4.23.tgz -C /usr/local/src/

    cd /usr/local/src/openldap-2.4.23/

    ./configure --prefix=/usr/local/openldap --enable-syslog --enable-modules --enable-debug --with-tls CPPFLAGS=-I/usr/local/BDB/include/ LDFLAGS=-L/usr/local/BDB/lib/   --enable-ldap --enable-relay --enable-accesslog --enable-auditlog --enable-syncprov --with-cyrus-sasl --enable-spasswd

    make depend

    make && make install

    echo "/usr/local/openldap/lib/" > /etc/ld.so.conf.d/ldap.conf  #添加OpenLDAP库文件

    ldconfig -v

    ln -sv /usr/local/openldap/include/ /usr/include/ldap #添加OpenLDAP头文件

  6.设置可执行命令

    cd /usr/local/openldap

    ln -s /usr/local/openldap/bin/* /usr/local/bin/

    ln -s /usr/local/openldap/sbin/* /usr/local/sbin/

  7.配置rootdn密码

    slappasswd 生成密码,记录下密码,后期配置文件要用

    这是我生成的:{SSHA}K/DXlq/QVoNsC1LnLTxW5KossmkMlaRA

  8.创建一些相关目录以及用户(日志目录等等相关目录)

    mkdir /data/openldap/{data,log,var}

    cd /data/openldap/var/

    mkdir run

    useradd ldap

  9.复制数据库文件以及修改文件权限

    cp /usr/local/openldap/etc/openldap/DB_CONFIG.example /data/openldap/data/DB_CONFIG

    chown -R ldap:ldap /data/openldap/data

    chmod 700 -R /data/openldap/data

  10.编辑配置文件

    cd /usr/local/openldap/etc/openldap/

    vim slapd.conf

    配置文件如下:

    include /usr/local/openldap/etc/openldap/schema/core.schema

    include /usr/local/openldap/etc/openldap/schema/collective.schema

    include /usr/local/openldap/etc/openldap/schema/corba.schema
    include /usr/local/openldap/etc/openldap/schema/cosine.schema
    include /usr/local/openldap/etc/openldap/schema/duaconf.schema
    include /usr/local/openldap/etc/openldap/schema/dyngroup.schema
    include /usr/local/openldap/etc/openldap/schema/inetorgperson.schema
    include /usr/local/openldap/etc/openldap/schema/java.schema

    include /usr/local/openldap/etc/openldap/schema/misc.schema
    include /usr/local/openldap/etc/openldap/schema/nis.schema
    include /usr/local/openldap/etc/openldap/schema/openldap.schema
    include /usr/local/openldap/etc/openldap/schema/ppolicy.schema

       #include行代表当前OpenLDAP服务包含的schema文件
    pidfile /data/openldap/var/run/slapd.pid   #OpenLDAP进程启动时,pid文件存放路径
    argsfile /data/openldap/var/run/slapd.args  #OpenLDAP参数文件的路径
    loglevel 256   #日志级别
    logfile /data/openldap/log/slapd.log  #日志的路径
    moduleload syncprov.la   #OpenLDAP指定需要加载额外的模块
    database bdb  #指定OpenLDAP数据库类型
    suffix "dc=zhongkai,dc=com"  #指定OpenLDAP服务域名(DN)
    rootdn "cn=Manager,dc=zhongkai,dc=com"  #指定OpenLDAP服务管理员信息
    directory /data/openldap/data    #指定OpenLDAP数据库文件的存放目录
    rootpw {SSHA}zHRFSAehsnbfonWg4GRgNQsiQHxKppvs  #管理员密码
    index objectclass,entryCSN,entryUUID eq   #创建OpenLDAP索引,提高读写效率

    overlay syncprov  #复制引擎

    syncprov-checkpoint 100 10  
    syncprov-sessionlog 100
    serverID 2  节点ID,唯一(修改)
    syncrepl rid=123  
    provider=ldap://192.168.239.139 #对端IP地址(修改)
    bindmethod=simple     #绑定的方法简单模式
    b
inddn="cn=Manager,dc=zhongkai,dc=com"  #绑定的dn
    credentials=123456  #密码
    searchbase="dc=zhongkai,dc=com" #起始域
    schemachecking=off  
    type=refreshAndPersist
    retry="60 +"
    mirrormode on   #开启mirror mode模式

    另外一台机器要修改的地方我已经标记。

   11.安装和配置LDAP管理工具PHPldapadmin

    yum -y install httpd php php-ldap php-gd php-mbstring php-pear php-bcmath php-xml

    yum -y install epel-release

    yum --enablerepo=epel -y install phpldapadmin

    修改配置文件

    1.vim /etc/phpldapadmin/config.php +398

    注意:修改配置文件前先备份,这是我的常用方法:cp 文件名{,.bak}

    并且在修改配置文件时候,最好不要改动原来的文件,需要改啥就复制相应的行来改动,原来的文件注释掉即可,养成一个好的习惯,很重要哦!

    #397行取消注释,398行添加注释

    $servers->setValue('login','attr','dn')

    // $servers->setValue('login','attr','uid');

    2.vim /etc/httpd/conf.d/phpldapadmin.conf

    11行:<Directory /usr/share/phpldapadmin/htdocs>

    <IfModule mod_authz_core.c>

    # Apache 2.4

     Require all granted(修改为这个)

    </IfModule>

    启动httpd,并设置为开机自启

    systemctl start httpd

    systemctl enable httpd

  12.开启日志功能

    a.vim /root/loglevel.ldif(这四行)

    1.dn: cn=config

    2.changetype: modify

    3.replace: olcLogLevel

    4.olcLogLevel: stats

    b.vim /etc/rsyslog.d/slapd.conf

    1.local4.*    /data/openldap/log/openldap.log

  13.重新启动rsyslog和slapd服务

    systemctl restart rsyslog

    usr/local/openldap/libexec/slapd [restart|start|stop]

    有时slapd服务停止不了,那就必须使用kill

    方法:先用netstat -anlp  | grep slapd 查看相应的进程号,使用kill -9 PID号码干掉,重新启动。

  14.测试

    访问访问用http://ip地址(填自己的呀!别填我的。)/phpldapadmin

    点击登录:登录dn:cn=Manager,dc=zhongkai,dc=com

          密码:123456(还是填你自己设置的)

    

    

    先测试140可以向139同步吗?

    打开ou=peopel,发现只用一条记录,点击添加新条目,添加zhogkai完成后,看访问139people是否多了一个条目。

  

基本上需要刷新一下就可以出现。

在192.168.239.140的那台机器上创建对象,看在192.168.239.139上是否同步过去。

成功,然后在192.168.239.139机器上创建一个对象,看192.168.239.140的那台机器是否可以同步过去。这样才算成功。

之前我在实验过程中遇到的问题有:

  1.我用到openldap的版本是openldap-2.4.23,源码安装,建议还是源码安装,yum安装版本是openldap-2.4.44,导致没有slapd.conf这个文件,需要修改slapd.d这个目录下的cn=config下的数据库文件,比较复杂,问题比较多,坑比较多,建议源码安装,生产环境下一般都是源码安装,不要嫌弃麻烦。

  2.后期测试的是192.168.239.140向192.168.239.139时同步时,可以同步过去,但是192.168.239.139向192.168.239.140同步的时候同步不成,通过查看日志,报address  alrealdy in use。

在镜像同步的模式下,两台服务器均可以进行读写操作,任何一台信息发生变化,都会以推的方式进行通知。注意:是那台向那台服务器同步不成功,就去找那台的日志。

六.总结

  学习openldap已经差不多俩周了,自己也算有点收获吧,从刚开始的接触到现在略知一二,自己也总结了自己学习新东西的过程:结合参照资料了解基本概念,在实践中具体理解其含义是最有效的方法,其次可以给其他人讲出来,这也是一种好的学习方法;还有就是在报错的时候或者出问题的时候,要有自己解决问题的思路,思路真的很重要。感谢我的师兄,教会了我好多同时也学到了不少东西,再次感谢。

  

转载于:https://www.cnblogs.com/zhongkai-27/p/9872433.html

openldap中的Mirror mode模式中的主主同步相关推荐

  1. ADO.NET中在C/S模式中使用的连接池

    前几天同事问我一个问题,一种CS架构的程序,直接把SQL Server作为服务端,每个客户端直接连接数据库操作,如果客户端打开的数量过多时SQL Server的连接数将会特别高,数据库端形成性能瓶颈, ...

  2. mysql同步row模式_ROW模式的SQL无法正常同步的问题总结

    ROW模式的SQL无法正常同步的问题总结 最近处理数据库问题时遇到一起mysql从机ROW模式的SQL无法正常同步的问题,今天刚好有时间,将整个过程总结一下,方便后面的同学学习! 一.问题起因 最近有 ...

  3. [图形学] Mirror’s Edge中Hi-Z屏幕空间锥跟踪反射

    reference:<GPU Pro 5> 总览 本章将介绍一种计算动态3D场景反射的新方法,该方法适用于任意形状的表面.Mirror's Edge早期研究的算法和技术已经提出并共享. 我 ...

  4. Java中的简单工厂模式(转)

    Java中的简单工厂模式 举两个例子以快速明白Java中的简单工厂模式: 女娲抟土造人 话说:"天地开辟,未有人民,女娲抟土为人."女娲需要用土造出一个个的人,但在女娲造出人之前, ...

  5. R语言使用str_replace函数和str_replace_all函数替换字符串中匹配到的模式:str_replace函数替换第一个匹配到的字符串、str_replace_all函数替换所有匹配到的

    R语言使用str_replace函数和str_replace_all函数替换字符串中匹配到的模式:str_replace函数替换第一个匹配到的字符串.str_replace_all函数替换所有匹配到的 ...

  6. Wake-On-LAN待机或休眠模式中唤醒

    Wake-On-LAN简称WOL,是一种电源管理功能:如果存在网络活动,则允许设备将操作系统从待机或休眠模式中唤醒.许多主板厂商支持IBM提出的网络唤醒标准.该标准允许网络管理员远程打开PC机电源,以 ...

  7. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  8. 译-在Python正则模式中search()和match()的区别是什么?

    问:在Python正则模式中search()和match()的区别是什么? 我已经阅读了现有的相关文档,但是我总是记不住,碰到类似的问题,我还要不断地查找再学习,我希望某个大神能够给个清晰的案例,让我 ...

  9. 从脑电图(EEG)中提取稳定的模式进行识别

    本篇文章是论文<Identify Stable Patterns over Time for Emotion Recognition from EEG>(<从脑电图(EEG)中提取稳 ...

  10. .Net中的设计模式——Iterator模式

    在.Net中,我们很少有机会使用Iterator模式,因为.Net Framework已经运用Iterator模式为所有的集合对象实现了迭代器.我们在遍历集合对象时,喜欢使用C#提供的foreach语 ...

最新文章

  1. 奇葩错误 -- modelsim波形显示no data(全X)
  2. 如何解决ALV的负数符号前显的问题
  3. 知识表示与融入技术前沿进展及应用
  4. 我国是世界最大石油进口国,但是大家知道从哪些国家进口吗?
  5. sql drop 简单操作(Mysql)
  6. 使用物理硬盘_硬盘坏道的几种非专业修复方法介绍
  7. 使用jdk的xjc命令由schema文件生成相应的实体类
  8. Atitit 衡量项目的规模
  9. ACL访问控制 getfacl 、setfacl 命令
  10. 格拉布斯准则异常数据_异常处理准则和最佳实践
  11. 深度学习面试题之LSTM补充
  12. 题目72 好朋友的位置(ok)
  13. oracle优化器analyzed,Oracle Optimizer:迁移到使用基于成本的优化器—–系列1.2-数据库专栏,ORACLE...
  14. 如何使用计算机计算平方面积,尺平方米换算计算器(面积单位换算器)
  15. 个人微信公众号申请流程
  16. 速率法和终点法的区别_两点法终点法速率法
  17. 解决openwrt opkg内核版本不匹配问题
  18. Excel按倍率一键调整当前表格的行高
  19. 3.1 Vue实战--电商后台管理系统 的登录功能 补充了 加密功能
  20. 关于多项目的资源管理方法[范文学习]

热门文章

  1. 做uni-app时,遇到后台返回base64码,将base64码转为图片,但是图片没有显示出来的解决方法
  2. 使用Go清理数据:第1部分
  3. Ubuntu下多网卡配置RTNETLINK answers: File exists的解决方案
  4. 2019税改有哪些变化?什么是专项扣除?这些改动与你的工资息息相关!
  5. Java项目:教务管理系统(java+SpringBoot+Thymeleaf+LayUI+HTML+mysql)
  6. Js实战之方块跟随鼠标移动
  7. Mysql数据库入门 (基础知识点 由来 各种指令 如何运用)
  8. java floor(),Java floor()用法及代码示例
  9. 【云扩RPA】Excel-ReadingAndWriting
  10. 元宇宙:从现实到虚无祛魅的产物|广州华锐互动