给docker容器配置openssl docker openldap
转载
Docker下OpenLdap 主从复制说明
- Docker下OpenLdap 主从复制说明
- 一、概述
- 二、OpenLdap 简介
- 1.1.什么是OpenLdap
- 2.2.OpenLdap有什么用
- 4.1.构建Docker下基础OpenLdap容器
- 4.2.构建Docker下基础PHPLdapAdmin容器
一、概述
本次是以需要的OpenLdap主从模式架构,实现公司本地(主)与A区机房(从)的信息同步模式。其中,需要的是公司本地OpenLdap中特定的独立域同步到A机房,而非完全主从。
二、OpenLdap 简介
1.1.什么是OpenLdap
OpenLDAP 是一款轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP),跨平台的标准互联网协议。属于开源集中账号管理架构的实现,且支持众多系统版本,被广大互联网公司所采用。 LDAP 具有两个国家标准,分别是X.500 和LDAP。OpenLDAP 是基于X.500 标准的,而且去除了X.500 复杂的功能并且可以根据自我需求定制额外扩展功能。 OpenLDAP 默认以Berkeley DB 作为后端数据库,Berkeley DB 数据库主要以散列的数据类型进行数据存储,如以键值对的方式进行存储。Berkeley DB 是一类特殊的数据库,主要用于搜索、浏览、更新查询操作,一般对于一次写入数据、多次查询和搜索有很好的效果。Berkeley DB 数据库是面向查询进行优化,面向读取进行优化的数据库。Berkeley DB 不支持事务型数据库(MySQL、MariDB、Oracle 等)所支持的高并发的吞吐量以及复杂的事务操作。(/var/lib/ldap/*) OpenLDAP 目录中的信息是按照树形结构进行组织的,具体信息存储在条目(entry)中,条目可以看成关系数据库中的表记录,条目是具有区别名(Distinguished Name,DN)的属性(attribute),DN 是用来引用条目,DN 相当于关系数据库(Oracle/MySQL)中的主键(primary key),是唯一的。属性由类型(type)和一个或者多个值(value)组成,相当于关系数据库中字段的概念。
2.2.OpenLdap有什么用
具体就不说了,就是账号同一管理分配的工具。
三、架构选择
OpenLdap 集群复制模式
v2.3以前模式缺点
- slurpd守护进程是以推模式操作 : 主服务器推送变更的数据到从服务器 (不可靠)
- 对replog中的记录的次序极为敏感
- 很容易失去同步, 这时需要手工干预来从主目录重新同步从服务器数据库
- 如果一个从服务器长时间停机,replog可能变得太大以至于slurpd无法处理
- 只工作在推模式(也可以设置为拉模式,但是这种感觉类似于将master上的数据做了一个快捷连接到slave上)
- 需要停止和重新启动主服务器来增加从服务器
- 只支持单一主服务器复制(1台主对多从)
v2.4后的同步功能 新版最大的功能就是实现了双向复制,即双主、多主模式,无论哪一台master宕机,都不会影响使用。可通过docker参数直接实现,但不符合公司所需要的同步架构,仅限于同一机房里使用。 新版主从配置有五种方式,这里只讲述最基本也是最简单的Syncrepl主从配置。 五种方式说明:
Syncrepl
| 该方式是slave服务器以拉的方式同步master的用户数据
该方式缺点:当你修改一个条目中的一个属性值(or大批量的万级别的某1属性值),它不是简单的同步过来这些属性,而是把修改的条目一起同步更新来。
|
Delta-syncrepl
(优化建议*)
| 比上一条多了个功能:基于日志同步:
你在master每更改1条记录,肯定会产生1条日志,那么slave会通过你的master日志进行相应的修改,这就克服了上一条的缺点。
|
N-Way Multi-Master
| 多主方式同步LDAP信息,Docker可通过配置参数直接实现。
|
MirrorMode
| 该方式是服务器互相推送信息的方式同步用户数据
MirrorMode只支持2个主master(2个主master可以+N个slave),但是你如果非得加了3 、4 台master后,那么其余的都只能从前2台master上获取数据,而不能将本身的数据推送过去。
如果你有类似需求,也可以使用这个方式。(比如,你企业分散点多,然后不希望都具有修改功能,可以使用它)
|
Syncrepl Proxy
(优化建议)
| 代理同步。
意思是将主master隐藏起来,而代理机上边通过Syncrepl从master主机以拉的方式同步master用户数据,当代理主机发生改变时,代理主机的LDAP又以推的方式将数据更新到下属的slave LDAP服务器上。slave LDAP 只有对代理LDAP服务器的读权限。
|
四、构建
架构如图:
跨域使用公网ip
4.1.构建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
|
4.2.构建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
|
五、配置
5.1.配置主节点
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
|
5.2.配置从节点
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
|
六、同步模式检查参考
1:主节点pm域外创域不同步
无变化 2:主节点pm域内创用户同步
功能实现,独立域同步成功
七、总结
本次只是配置了最基础的Syncrepl架构,对于优秀的架构还需学习构建。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。