架構選擇
本次配置是基於最基礎的 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 個主 master ( 2 個主 master 可以 +N 個 slave ),但是你如果非得加了 3 、4 臺 master 後,那麼其餘的都只能從前 2 臺 master 上獲取數據,而不能將本身的數據推送過去。<br data-tomark-pass>如果你有類似需求,也可以使用這個方式。(比如,你企業分散點多,然後不希望都具有修改功能,可以使用它) |
Syncrepl Proxy (優化建議) |
代理同步<br data-tomark-pass>意思是將主 master 隱藏起來,而代理機上邊通過 Syncrepl 從 master 主機以拉的方式同步 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
驗證
略。