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

一.openldap簡介php

    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數據庫主要以散列的數據庫類型進行數據存儲。java

二.  DAP中經常使用的名詞縮寫即含義linux

  1.dc(domain component):域名,如域名爲example.com變成dc=example,dc=com。數據庫

  2.uid(user id):指用戶的的登陸名稱,如uid=tom,與linux系統的UID不是一個概念。vim

  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。session

  6.sn(sur name):指一我的的姓氏。架構

  7.giveName:指一我的的名字。oracle

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

相關文章
相關標籤/搜索