lvps.389ds_replication
389ds-复制
配置 389DS 服务器(LDAP 服务器)实例之间的复制。
ansible-galaxy install lvps.389ds_replication
需求
- Ansible 版本:2.7 或更高版本
- 操作系统:CentOS 7
如果 Ansible 不支持 ldap_attrs
模块,您正在使用旧版本的集合,但可以尝试此角色的 1.0.x 版本。
角色变量
变量 | 默认值 | 描述 | 可更改 | 角色 |
---|---|---|---|---|
dirsv_replication_role | 该服务器的角色:'supplier'(供应者),'consumer'(消费者)或 'both'(主)。不支持 Hub。 | 否 | ||
dirsrv_server_uri | "ldap://localhost" | 要配置的服务器的 URI。因为这在 Ansible 目标上运行,所以 localhost 应该可以。可以设置为 ldaps://localhost 以使用 636 端口的 TLS。 |
CSB | |
dirsrv_rootdn | "cn=Directory Manager" | 根 DN(“管理员”账户用户名) | CSB | |
dirsrv_rootdn_password | secret | 根 DN 账户的密码 | CSB | |
dirsrv_use_starttls | true | 使用 StartTLS 连接到服务器 | CSB | |
dirsrv_tls_certificate_trusted | true | 如果 TLS 证书来自受信任的 CA 则为真,若为自签名或来自私有 CA 则为假,如果不使用 TLS 则不使用 | CSB | |
dirsrv_serverid | default | 服务器 ID,也称为实例 ID,例如,如果服务器安装在 dirsrv/slapd-example 目录中,则“example”是服务器 ID | CSB | |
dirsrv_suffix | dc=example,dc=local | 根后缀 | CSB | |
dirsrv_supplier_replica_id | 1 | 选择 1 到 65534 之间的数字。不要将其分配给其他服务器,否则可能会发生错误。 | 否 | SB |
dirsrv_consumer_uri | "ldap://consumer.example.com:389/" | 供应者将连接并通过推送更改来执行复制的完整 URI,包括端口 | 否 | SB |
dirsrv_replication_user_remote | 复制管理员 | 在消费者上存在的用户账户。供应者将使用此账户进行绑定以执行复制。“复制管理员”表示该账户为“cn=Replication Manager,cn=config” | 是 | SB |
dirsrv_replication_user_password_remote | 复制用户(复制管理员)账户的密码 | 是 | SB | |
dirsrv_replica_bind_method | "PLAIN" | 供应者用于连接消费者的绑定方法(SIMPLE、PLAIN、SASL) | 是 | SB |
dirsrv_changelog_max_age | "10d" | 设置 nsslapd-changelogmaxage 的值 |
是 | SB |
dirsrv_replica_attributes_list | "(objectclass=*) $ EXCLUDE authorityRevocationList accountUnlockTime memberof" | 设置 nsds5ReplicatedAttributeList 的值,此变量的默认值在文档中的示例中使用 |
是 | SB |
dirsrv_replica_attributes_list_total | "(objectclass=*) $ EXCLUDE accountUnlockTime" | 设置 nsds5ReplicatedAttributeListTotal 的值,此变量的默认值在文档中的示例中使用 |
是 | SB |
dirsrv_replication_user | 复制管理员 | 要在消费者上创建的用户账户。该账户将用于供应者在此服务器(消费者)上的绑定。“复制管理员”表示该账户将在“cn=Replication Manager,cn=config”中创建 | 是 | CB |
dirsrv_replication_user_password | 该账户的密码。 | 是 | CB | |
dirsrv_begin_replication_immediately | true | 布尔值,在复制协议中将 nsds5ReplicaEnabled 设置为“开启”或“关闭”。这应该是安全的:如果您添加新服务器,它不会开始将其空数据库推送到其他服务器,因为它们具有不同的生成 ID,复制失败(有关详细信息,请参见示例),但如果您希望更加安全或对复制协议进行一些定制,请将其设置为 false |
否 | CB |
dirsrv_consumer_referral_to_supplier | "ldap://supplier.example.com:389/" | 完整的 LDAP URI,包括端口。当客户端尝试写入消费者时(读取模式),它将重定向客户端到此服务器(一个可以接受写入的供应者)。 | 是 | C |
首先选择服务器是供应者、消费者还是两者,并相应地设置 dirsv_role
。然后设置相关变量:查看角色列,C = 消费者,S = 供应者,B = 两者。
一旦某些变量被设置后,就不能更改它们,改变这些变量会导致意外结果,从“没有任何反应”到“角色失败”。其他一些变量(身份验证详细信息、后缀等)应设置为服务器的正确值,只要是合理的,就可以更改,例如,如果您更改了根 DN 密码,可以更改 dirsrv_rootdn_password
以便该角色能够正确进行身份验证,但如果在同一台服务器上两次运行之间更改 dirsrv_suffix
并没有意义,除非您不知何故在 389DS 中更改了后缀。
以下变量与 389ds-server 角色中的名称和含义完全相同,因此如果您在同一剧本中使用这两个角色,可以只定义一次:
- dirsrv_rootdn
- dirsrv_rootdn_password
- dirsrv_tls_certificate_trusted
- dirsrv_serverid
- dirsrv_suffix
依赖
无。
但请记住,此角色期望 389DS 已经运行,只配置现有服务器之间的复制。
示例剧本
更多示例,包括从头开始安装 389DS 和进行测试所需的 Vagrant 配置,请访问 389ds-examples 仓库。
请注意,通常情况下,复制不会立即启动,因为服务器之间的 "复制生成" 不同。这可以通过“副本刷新”过程修复,此过程在 Administration Guide 的第 15.2.5 节中进行了说明。您需要在供应者或角色为“两个”的服务器上执行此操作。
基本上,执行“副本刷新”将强制将数据库从一个供应者推送到一个消费者,替换先前的消费者数据库:从一个供应者开始,逐步移动到其他供应者,注意不要将生产数据库替换为刚安装的服务器的空数据库。当两个服务器的数据库完全相同时,复制将自动并立即启动。
该过程的详细说明也可以在 389ds-examples 仓库中找到。
消费者和供应者
首先配置消费者,该服务器将包含数据库的只读副本:
- hosts: consumer
become: true
roles:
-
role: lvps.389ds_replication
dirsrv_replica_role: consumer
dirsrv_suffix: "dc=example,dc=local"
dirsrv_server_uri: "ldap://localhost"
dirsrv_rootdn_password: secret
dirsrv_replication_user_password: foo # 将使用此密码创建 cn=Replication Manager,cn=config
dirsrv_consumer_referral_to_supplier: "ldap://supplier.example.local:389/"
然后配置供应者,该服务器将接受写入并将所有更改推送到消费者:
- hosts: supplier
become: true
roles:
-
role: lvps.389ds_replication
dirsrv_replica_role: supplier
dirsrv_suffix: "dc=example,dc=local"
dirsrv_server_uri: "ldap://localhost"
dirsrv_rootdn_password: verysecret
dirsrv_replication_user_password_remote: foo # 将与 cn=Replication Manager,cn=config 和此密码在其他服务器上绑定
dirsrv_consumer_uri: "ldap://consumer.example.local:389/" # 其他服务器(上面定义的消费者)
dirsrv_supplier_replica_id: 123
多主模式与两个主服务器
- hosts: mm1
become: true
roles:
-
role: lvps.389ds_replication
dirsrv_replica_role: 'both'
dirsrv_suffix: "dc=example,dc=local"
dirsrv_server_uri: "ldap://localhost"
dirsrv_rootdn_password: secret1
dirsrv_replication_user_password: "aaaaaa"
dirsrv_replication_user_password_remote: "bbbbbb" # 在另一服务器上
dirsrv_consumer_uri: "ldap://mm2.example.local:389/" # 另一台服务器
dirsrv_supplier_replica_id: 1
- hosts: mm2
become: true
roles:
-
role: lvps.389ds_replication
dirsrv_replica_role: 'both'
dirsrv_suffix: "dc=example,dc=local"
dirsrv_server_uri: "ldap://localhost"
dirsrv_rootdn_password: secret2
dirsrv_replication_user_password: "bbbbbb"
dirsrv_replication_user_password_remote: "aaaaaa" # 在另一台服务器上
dirsrv_consumer_uri: "ldap://mm1.example.local:389/" # 另一台服务器
dirsrv_supplier_replica_id: 2
已知错误
如果 dirsrv_replication_user_password
被更改,则不会报告任何更改:这是因为密码实际上在每次运行时都会更改(Ansible 无法判断上一个哈希密码是否与新密码相同,因此会被更改然后重新哈希),但有一个 changed_when: false
来隐藏此细节。
许可证
MIT。