openldap中的Mirror mode模式中的主主同步

Posted zhongkai-27

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openldap中的Mirror mode模式中的主主同步相关的知识,希望对你有一定的参考价值。

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

  

 




































以上是关于openldap中的Mirror mode模式中的主主同步的主要内容,如果未能解决你的问题,请参考以下文章

openldap slapd.conf参数

openldap导入数据

Alwayson 与 mirror

OpenLDAP 中的动态组问题

HART中的Burst-Mode(突发模式)

openldap mirrormode 配置