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已經差不多倆周了,自己也算有點收獲吧,從剛開始的接觸到現在略知一二,自己也總結了自己學習新東西的過程:結合參照資料了解基本概念,在實踐中具體理解其含義是最有效的方法,其次可以給其他人講出來,這也是一種好的學習方法;還有就是在報錯的時候或者出問題的時候,要有自己解決問題的思路,思路真的很重要。感謝我的師兄,教會了我好多同時也學到了不少東西,再次感謝。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM