OpenLDAP 容器主從 架構選擇 構建 配置 驗證

架構選擇

本次配置是基於最基礎的 Syncrepl 架構

OpenLdap 集羣複製模式

v2.3 以前模式缺點

  • slurpd守護進程是以推模式操作 : 主服務器推送變更的數據到從服務器 (不可靠)
  • 對replog中的記錄的次序極爲敏感
  • 很容易失去同步, 這時需要手工干預來從主目錄重新同步從服務器數據庫
  • 如果一個從服務器長時間停機,replog可能變得太大以至於slurpd無法處理
  • 只工作在推模式(也可以設置爲拉模式,但是這種感覺類似於將master上的數據做了一個快捷連接到slave上)
    需要停止和重新啓動主服務器來增加從服務器
  • 只支持單一主服務器複製(1臺主對多從)

v2.4 後的同步功能

  • 新版最大的功能就是實現了雙向複製,即雙主、多主模式,無論哪一臺master宕機,都不會影響使用。可通過docker參數直接實現,但不符合公司所需要的同步架構,僅限於同一機房裏使用。
  • 新版主從配置有五種方式,這裏只講述最基本也是最簡單的Syncrepl主從配置。

五種方式說明:

方式 說明
Syncrepl 該方式是 slave 服務器以拉的方式同步 master 的用戶數據。
該方式缺點:當你修改一個條目中的一個屬性值(或大批量的萬級別的某一屬性值),它不是簡單的同步過來這些屬性,而是把修改的條目一起同步更新來。
Delta-syncrepl(優化建議*) 比上一條多了個功能:基於日誌同步
你在 master 每更改一條記錄,肯定會產生一條日誌,那麼 slave 會通過你的 master 日誌進行相應的修改,這就克服了上一條的缺點。
N-Way Multi-Master 多主方式同步 LDAP 信息,Docker 可通過配置參數直接實現。
MirrorMode 該方式是服務器互相推送信息的方式同步用戶數據<br data-tomark-pass> MirrorMode 只支持 2 個主 master2 個主 master 可以 +Nslave ),但是你如果非得加了 34master 後,那麼其餘的都只能從前 2master 上獲取數據,而不能將本身的數據推送過去。<br data-tomark-pass>如果你有類似需求,也可以使用這個方式。(比如,你企業分散點多,然後不希望都具有修改功能,可以使用它)
Syncrepl Proxy(優化建議) 代理同步<br data-tomark-pass>意思是將主 master 隱藏起來,而代理機上邊通過 Syncreplmaster 主機以拉的方式同步 master 用戶數據,當代理主機發生改變時,代理主機的 LDAP 又以推的方式將數據更新到下屬的 slave LDAP服務器上。slave LDAP 只有對代理 LDAP 服務器的讀權限。

構建

跨域使用公網 ip

構建 Docker下基礎 OpenLdap 容器

# OpenLdap容器生成腳本
vim openldap.sh
--------------------------------------------------------------
#!/bin/bash
NAME=openldap
PASS=adm1n
if [ `docker ps -a|grep $NAME|wc -l` -gt 0 ];then
    docker rm -f $NAME
fi
docker run \
 --env LDAP_ORGANISATION="Aorise Inc." \
 --env LDAP_DOMAIN="aorisetest.com" \
 --env LDAP_BASE_DN="dc=aorisetest,dc=com" \
 --env LDAP_ADMIN_PASSWORD="$PASS" \
 --env LDAP_CONFIG_PASSWORD="conf1g" \
 --env LDAP_READONLY_USER="false" \
 --env LDAP_RFC2307BIS_SCHEMA="false" \
 --env LDAP_BACKEND="mdb" \
 --env LDAP_TLS="false" \
 --volume /var/lib/ldap:/var/lib/ldap \
 --volume /etc/ldap/slapd.d:/etc/ldap/slapd.d \
 -v /mnt/sdb/ldap/conffile/:/home/ldap/conffile \
 -p 389:389 \
 --name $NAME --detach osixia/openldap:1.3.0
--------------------------------------------------------------
/var/lib/ldap:數據文件存放路徑
/etc/ldap/slapd.d:配置文件存放路徑
/home/ldap/conffile:自定義配置文件存放路徑

sh openldap.sh

構建 Docker 下基礎 PHPLdapAdmin 容器

# PHPLdapAdmin容器生成腳本
vim phpldapadmin.sh
--------------------------------------------------------------
#!/bin/bash
LDAPHOST=192.168.1.21  
NAME=phpldapadmin
if [ `docker ps -a|grep $NAME|wc -l` -gt 0 ];then
    docker rm -f $NAME
fi
docker run -p 443:443 \
        --env PHPLDAPADMIN_LDAP_HOSTS=$LDAPHOST \
        --name $NAME \
 --detach osixia/phpldapadmin:latest
--------------------------------------------------------------
443:本機映射端口
PHPLDAPADMIN_LDAP_HOSTS:LDAP對應主機

sh phpldapadmin.sh

配置

配置主節點

cd /mnt/sdb/ldap/conffile
# 生成syncprov模塊
vim mod_syncprov模塊.ldif
---------------------------------------------------------------
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleload: syncprov.la
---------------------------------------------------------------
docker exec openldap ldapadd -Y EXTERNAL -H ldapi:/// -f /home/ldap/conffile/mod_syncprov.ldif
# 生成syncprov配置
vim syncprov.ldif
---------------------------------------------------------------    
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpSessionLog: 100
---------------------------------------------------------------
docker exec openldap ldapadd -Y EXTERNAL -H ldapi:/// -f /home/ldap/conffile/syncprov.ldif

配置從節點

cd /mnt/sdb/ldap/conffile
# 生成syncrepl配置
# 由於Syncrepl爲拉取模式。當要複製一個大規模的數據條錄時,建議從主LDAP備份數據,複製到從LDAP上。當從備份數據初始化的時候,不必擔心數據老,因爲syncrepl會自動進行校驗,然後進行相應的修改、同步。
vim syncrepl.ldif
---------------------------------------------------------------
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=002    
  provider=ldap://192.168.1.21:389/
  bindmethod=simple
  binddn="cn=admin,dc=aorisetest,dc=com"
  credentials=adm1n
  searchbase="cn=pm,dc=aorisetest,dc=com"
  scope=sub
  schemachecking=on
  type=refreshAndPersist
  retry="5 5 300 +"
  attrs="*,+"
  ---------------------------------------------------------------
provider:主服務器
bindmethod:綁定協議
binddn:管理員用戶,登錄dn
credentials:管理用戶密碼,登錄密碼
searchbase:選擇要同步的獨立域,根節點
scope:設置所有的條目匹配
schemachecking:設置同步更新時間檢測
type:同步模式爲(refreshOnly:同步模式爲拉,拒絕修改)
retry:同步更新重試次數和時間剛開始的5秒重試5次,以後每300秒重試一次
attrs:複製全部屬性

docker exec openldap ldapadd -Y EXTERNAL -H ldapi:/// -f /home/ldap/conffile/syncrepl.ldif

驗證

略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章