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

  

原文地址:https://www.cnblogs.com/zhongkai-27/p/9872433.html

时间: 2024-10-12 03:23:01

openldap中的Mirror mode模式中的主主同步的相关文章

从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备

关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧. 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Factory Method)最为熟悉和基础吧.当然,本文总结Singleton模式,对于其他设计模式不做叙说. Singleton模式,即单例模式.顾名思义,主要用于做应用程序的资源共享控制.用途很多?? 实质为,单例是在程序声明周期里 有且仅有 被实例化过一次的类.为确保实例化的唯一,利用类的 类(static)方法来生成和访问对象. 至此,你便可以在程序

ROW模式的SQL无法正常同步的问题总结

转自:http://blog.chinaunix.net/uid-20639775-id-4664792.html#_Toc29623 ROW模式的SQL无法正常同步的问题总结 一. 问题起因................................................................................................................. 2 二. 排查过程...............................

[工作中的设计模式]解释器模式模式Interpreter

一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我很少附上类图,但解释器模式确实比较抽象,为了便于理解还是放了上来,此模式的要点是: 1.客户端提供一个文本.表达式或者其他,约定解析格式 2.针对文本中可以分为终结符表达式和非终结符表达式, 3.终结符表达式无需进一步解析,但仍需要转化为抽象接口的实例 4.针对非终结表达式,没一种标示需要定义一种解

[工作中的设计模式]策略模式stategy

一.模式解析 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的关键点为: 1.多种算法存在 2.算法继承同样的接口,执行同样的行为,为可以替代的 3.算法调用者唯一,算法调用者可以灵活改变自己需要调用的算法,从而实现计算. 二.模式代码 算法接口: /** * 算法统一接口,所有算法继承此接口 * @author zjl * @time 2016-1-24 * */ public interface IStra

数据库设计中的Soft Delete模式

最近几天有点忙,所以我们今天来一篇短的,简单地介绍一下数据库设计中的一种模式——Soft Delete. 可以说,该模式毁誉参半,甚至有非常多的人认为该模式是一个Anti-Pattern.因此在本篇文章中,我们不仅仅会对该模式进行介绍,同时也会列出该模式可能导致的一系列问题,以帮助大家正确地决定是否使用该模式. Soft Delete简介 首先先来想一个需求,那就是对用户操作的回滚支持.例如我现在正在用Word编写这篇文章.当我执行了一个错误操作的时候,我仅仅需要键入Ctrl + Z就可以进行回

JavaScript基础函数体中的唯一var模式(002)

全局变量是不好的.所以在声名变量的时候,应该采用函数体中的唯一var模式(Single var Pattern).这个模式有不少好处: 提供了一个唯一的地方来查看函数体中声名的变量 在使用一个变量之前总是先声名,这样未初始化的变量都会被赋值为undefine. 让你记得要声名变量.:-) 代码更简洁(因为把多个var变成了一个) 说来也简单,这个模式就是在函数体的最初,用一个var声名所有本地变量(local variable). function func() { var a = 1, b =

在MVVM模式中,按钮Click事件的绑定方法

原文:在MVVM模式中,按钮Click事件的绑定方法 在MVVM模式中,我们将Button的方法写到ViewModel中,然后绑定到前端界面.通常的做法是写一个类,继承ICommand接口,然而如果按钮比较多的话,就需要写很多的类,对于后期维护造成很大的不变,微软提供了一个DelegateCommand类,可以简化开发. 使用方法如下: 首先生命ViewModel属性,GetMsg函数, public DelegateCommand GetMsg { get { return new Deleg

IOS 应用中从竖屏模式强制转换为横屏模式

在 iPhone 应用里,有时我们想强行把显示模式从纵屏改为横屏(反之亦然),CocoaChina 会员 "alienblue" 为我们提供了两种思路 第一种:通过人为的办法改变view.transform的属性. 具体办法: view.transform一般是View的旋转,拉伸移动等属性,类似view.layer.transform,区别在于View.transform是二维的,也就是使用仿射的办法通常就是带有前缀CGAffineTransform的类(可以到API文档里面搜索这个

《生活在Linux中》之:在Bash的Emacs模式中使用Vim

export EDITOR=vim ctrl-x ctrl-e <生活在Linux中>之:在Bash的Emacs模式中使用Vim,码迷,mamicode.com