lvps.389ds_replication

389ds-复制

Ansible Galaxy

配置 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。

关于项目

Configure replication between 389DS server (LDAP server) instances.

安装
ansible-galaxy install lvps.389ds_replication
许可证
mit
下载
1.9k
拥有者