简单介绍如何快速通过docker启动openldap服务,并通过syncrepl机制实现目录数据的镜像复制。本文只涉及关键步骤,相关技术的入门请移步入门教程。所有本文的配置和脚本只针对bitnami/openldap镜像,并不一定具备通用性,请根据实际项目的openldap版本做对应的修改。在开始配置同步之前请确保各个节点的时间和外部导入的schema是同步并一致的。
本文使用的镜像:
https://hub.docker.com/r/bitnami/openldap
本文使用的ldap管理工具:
https://directory.apache.org/studio/
很强大的ldap管理工具,本地安装即可,很方便地操作ldap的数据和导入或导出ldif文件。
启动openldap服务
先拉取最新版本的openldap镜像并推送到本地集群中。然后通过docker stack deploy命令或其他UI工具(Portainer)启动openldap服务。
version: '3.6' services: openldap-01: image: cluster2:5000/bitnami/openldap:2.6.1 volumes: - /data/docker/website/mes/openldap/data:/bitnami/openldap ports: - target: 1389 published: 1389 protocol: tcp mode: host environment: - LDAP_ADMIN_USERNAME=admin - LDAP_ADMIN_PASSWORD=admin - LDAP_CONFIG_ADMIN_ENABLED=yes - LDAP_CONFIG_ADMIN_USERNAME=admin - LDAP_CONFIG_ADMIN_PASSWORD=admin - LDAP_ROOT=dc=demo,dc=com - LDAP_ALLOW_ANON_BINDING=no - LDAP_USER_DC=people deploy: replicas: 1 placement: constraints: [node.labels.openldap == 01] openldap-02: image: cluster2:5000/bitnami/openldap:2.6.1 volumes: - /data/docker/website/mes/openldap/data:/bitnami/openldap ports: - target: 1389 published: 1389 protocol: tcp mode: host environment: - LDAP_ADMIN_USERNAME=admin - LDAP_ADMIN_PASSWORD=admin - LDAP_CONFIG_ADMIN_ENABLED=yes - LDAP_CONFIG_ADMIN_USERNAME=admin - LDAP_CONFIG_ADMIN_PASSWORD=admin - LDAP_ROOT=dc=demo,dc=com - LDAP_ALLOW_ANON_BINDING=no - LDAP_USER_DC=people deploy: replicas: 1 placement: constraints: [node.labels.openldap == 02]
以上配置启动了两个openldap实例,openldap-01和openldap-02。
根dc:dc=demo,dc=com
管理员dn:cn=admin,dc=demo,dc=com
管理员密码:admin
配置管理员:cn=admin,cn=config
配置管理员密码:admin
服务启动成功后就可以用通过以上凭证访问ldap服务。其中管理员用于管理目录服务,配置管理用于管理config和schema等配置相关的内容。
启用syncrepl镜像同步
为每一个openldap服务添加同步用的用户
需要使用管理账号登录,分别在01和02节点导入以下配置。
syncrepl_user.ldif
version: 1 dn: uid=rpuser,ou=people,dc=demo,dc=com objectClass: top objectClass: person objectClass: organizationalPerson objectClass: simpleSecurityObject objectClass: shadowAccount objectClass: inetOrgPerson cn: rpuser sn: rpuser uid: rpuser userPassword: {SSHA}oBWZtlM7e3CbUagQeUPqkVeFUmg2+4liXvRfVQ==
用户dn:rpuser,ou=people,dc=demo,dc=com"
密码:rpuser
节点openldap-01的配置
需要使用配置管理账号登录,在01节点导入以下配置。
syncrepl_01.ldif
#enable syncprov module dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /opt/bitnami/openldap/lib/openldap olcModuleLoad: syncprov.so #enable syncprov for every folder dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpSessionlog: 100 #unlimit fetch size dn: cn=config changetype: modify replace: olcSizeLimit olcSizeLimit: 10000 #set server id dn: cn=config changetype: modify replace: olcServerID olcServerID: 1 #syncrepl directive dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://openldap-02:1389/ bindmethod=simple binddn="uid=rpuser,ou=people,dc=demo,dc=com" credentials=rpuser searchbase="dc=demo,dc=com" scope=sub schemachecking=on type=refreshAndPersist retry="5 +" interval=00:00:30:00 - add: olcMirrorMode olcMirrorMode: TRUE
节点openldap-02的配置
需要使用配置管理账号登录,在01节点导入以下配置。
syncrepl_02.ldif
#enable syncprov module dn: cn=module,cn=config objectClass: olcModuleList cn: module olcModulePath: /opt/bitnami/openldap/lib/openldap olcModuleLoad: syncprov.so #enable syncprov for every folder dn: olcOverlay=syncprov,olcDatabase={2}mdb,cn=config changetype: add objectClass: olcOverlayConfig objectClass: olcSyncProvConfig olcOverlay: syncprov olcSpSessionlog: 100 #unlimit fetch size dn: cn=config changetype: modify replace: olcSizeLimit olcSizeLimit: 10000 #set server id dn: cn=config changetype: modify replace: olcServerID olcServerID: 2 #syncrepl directive dn: olcDatabase={2}mdb,cn=config changetype: modify replace: olcSyncRepl olcSyncRepl: rid=001 provider=ldap://openldap-01:1389/ bindmethod=simple binddn="uid=rpuser,ou=people,dc=demo,dc=com" credentials=rpuser searchbase="dc=demo,dc=com" scope=sub schemachecking=on type=refreshAndPersist retry="5 +" interval=00:00:30:00 - add: olcMirrorMode olcMirrorMode: TRUE
节点1和节点2的配置区别在Server ID和同步的提供者不一样。该脚本设置了搜索的大小限制为10000,从dc=demo,dc=com搜索并同步数据,每30秒同步一次,失败会在5秒后重试。请根据实际的环境和项目要求进行修改。
遇到的问题
错误1:
rid=001 LDAP_RES_SEARCH_RESULT (4) Size limit exceeded rid=001 (4) Size limit exceeded
错误描述:同步过程中发生的错误,同步了部分数据后达到了最大的大小限制而停止,一般默认是500。
解决办法:把以下指令保存成.ldif文件导入或执行。
dn: cn=config changetype: modify replace: olcSizeLimit olcSizeLimit: 10000
参考
- https://www.cnblogs.com/cishi/p/9222601.html
- https://www.openldap.org/doc/admin24/replication.html
- http://m.blog.chinaunix.net/uid-261298-id-3345292.html
- https://blog.csdn.net/zheyuan_xing/article/details/91965586
- https://blog.csdn.net/kunyus/article/details/109517079
转载请注明出处: https://www.cnblogs.com/keitsi/p/16618565.html
标签:dn,cn,com,dc,openldap,LDAP,Docker,Open From: https://www.cnblogs.com/keitsi/p/16618565.html