Docker + Openldap 实现主从复制
文档目的:
网络上大部分都是在一台服务器上安装多个Docker Openldap
来实现主从复制,如果单台服务器出现故障呢?服务器硬盘出现故障?网络不可访问?那岂不是没有任何意义?所以本文档实现方式在多台服务器上安装 Docker Openldap
来实现跨服务器主从,并且可以加上高可用。
文档风格:
简单、粗暴,按照文档步骤即可实现部署完成并投入使用。
Docker Openldap 安装
-
安装 docker
此处不做过多说明,网络上很多文档随便搜一篇
-
部署 OpenLdap<简单说就是启动 openldap docker 进行,但是要做细微的配置>
此处对参数如果不是很了解的话,可以移步到本博客内有关 LDAP 的说明及独立部署文档查看
# 多节点使用同样的配置进行启动即可
docker run \
--env LDAP_ORGANISATION="Magic Inc." \ # 指定组织名称
--env LDAP_DOMAIN="${LDAP_DOMAIN}" \ # LDAP Domain
--env LDAP_BASE_DN="dc=magic,dc=com" \ # LDAP BASE DN
--env LDAP_ADMIN_PASSWORD="${MASTER_LDAP_PWD}" \ # 自定义 LDAP 管理员密码
--env LDAP_CONFIG_PASSWORD="conf1g" \ # 自定义配置文件密码
--env LDAP_READONLY_USER="false" \ # 是否添加只读用户
--env LDAP_RFC2307BIS_SCHEMA="false" \ # 使用RFC2307BIS架构而不是NIS架构
--env LDAP_BACKEND="mdb" \ # 数据库类型
--env LDAP_TLS="false" \ # 关闭 TLS 认证
-p 389:389 \
--name ${LDAP_CONTAINER_NAME} \
--detach ${LDAP_NAME}:${LDAP_VERSION}
Docker OpenLdap 主从配置
- 配置主从
-
- 主节点配置
在master上启用添加syncprov模块来实现主从复制功能点,通过ldif文件来增加syncprov模块,无需重启ldap server
cat mod_syncprov.ldif dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleload: syncprov.la $ 应用配置 docker cp mod_syncprov.ldif ${LDAP_CONTAINER_NAME}:/ docker exec ${LDAP_CONTAINER_NAME} ldapadd -Y EXTERNAL -H ldapi:/// -f /mod_syncprov.ldif
生成 syncprov 配置
cat syncprov.ldif # 此处注意如果你启动指定的数据库类型 dbd,此处要更改为 dbd dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpCheckpoint: 100 10 olcSpSessionLog: 100 $ docker cp syncprov.ldif ${LDAP_CONTAINER_NAME}:/ $ docker exec ${LDAP_CONTAINER_NAME} ldapadd -Y EXTERNAL -H ldapi:/// -f /syncprov.ldif
-
- 从节点配置
生成syncrepl配置
dn: olcDatabase={1}mdb,cn=config changetype: modify add: olcSyncRepl olcSyncRepl: rid=002 provider=ldap://192.168.1.153:389/ bindmethod=simple binddn="cn=admin,dc=magic,dc=com" credentials=123456 searchbase="dc=magic,dc=com" scope=sub schemachecking=on type=refreshAndPersist retry="5 5 300 +" attrs="*,+" $ docker cp syncrepl.ldif ${LDAP_CONTAINER_NAME}:/ $ docker exec ${LDAP_CONTAINER_NAME} ldapadd -Y EXTERNAL -H ldapi:/// -f /syncrepl.ldif
- provider:主服务器
- bindmethod:绑定协议
- binddn:管理员用户,登录dn
- credentials:管理用户密码,登录密码
- searchbase:选择要同步的独立域,根节点
- scope:设置所有的条目匹配
- schemachecking:设置同步更新时间检测
- type:同步模式为(refreshOnly:同步模式为拉,拒绝修改)
- retry:同步更新重试次数和时间刚开始的5秒重试5次,以后每300秒重试一次
- attrs:复制全部属性
-
Docker Openldap 主从验证
- 主节点添加用户
cat new_user.ldif
# test2, magic.com
dn: cn=test2,dc=magic,dc=com
sn: lab_user
uid: test2
mail: test2@qq.com
objectClass: inetOrgPerson
objectClass: mailAccount
objectClass: uidObject
cn: test2
userPassword:: e1NTSEF9RFA5YVZhTTE3U0tMZnpMd2JvT1EyZzZIRm90M0IrS0E=
$ docker cp new_user.ldif openldap_cluster_1:/new_user.ldif
$ docker exec openldap_cluster_1 ldapadd -Y EXTERNAL -H ldapi:/// -f/new_user.ldif
- 从节点验证用户是否同步
docker exec ${LDAP_CONTAINER_NAME} ldapsearch -x -H ldap://127.0.0.1 -b dc=magic,dc=com -D "cn=admin,dc=magic,dc=com" -w a876814e38f3d1e67879cad69c984317