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

验证

略。

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