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 Роль этого сервера: 'поставщик', 'потребитель' или 'оба' (мастер). Хаб не поддерживается. Нет
dirsrv_server_uri "ldap://localhost" URI сервера для настройки. Поскольку это запускается на целевом сервере Ansible, localhost должен подойти. Можно установить в ldaps://localhost, чтобы использовать TLS на порту 636. 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-сертификат получен от доверенного центра сертификации; ложно, если самоподписанный или из частного центра сертификации; не используется, если 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 Replication Manager Учетная запись пользователя, которая существует на потребителе. Поставщик будет подключаться с помощью этой учетной записи для выполнения репликации. "Replication Manager" означает, что учетная запись — это "cn=Replication Manager,cn=config". Да SB
dirsrv_replication_user_password_remote Пароль для учетной записи пользователя репликации (Replication Manager) Да 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 Replication Manager Учетная запись пользователя, которую нужно создать на потребителе. Эта учетная запись будет использоваться поставщиком для подключения к этому серверу (потребителю). "Replication Manager" означает, что учетная запись будет создана по адресу "cn=Replication Manager,cn=config". Да CB
dirsrv_replication_user_password Пароль для этой учетной записи. Да CB
dirsrv_begin_replication_immediately true Логическое значение, устанавливающее nsds5ReplicaEnabled в "включено" или "выключено" в соглашении о репликации. Это должно быть безопасно: если вы добавите новый сервер, он не начнет отправлять свою пустую базу данных на другие серверы, так как у них разные идентификаторы поколения, и репликация потерпит неудачу (см. примеры для получения дополнительных подробностей), но если вы хотите быть еще более осторожным или сделать некоторые настройки в соглашении о репликации, установите это в false. Нет CB
dirsrv_consumer_referral_to_supplier "ldap://supplier.example.com:389/" Полный LDAP URI, включая порт. Когда клиент пытается записать данные на потребителе, который является только для чтения, он будет перенаправлен к этому серверу (поставщику, который может принимать записи). Да C

Прежде всего, выберите, является ли сервер поставщиком, потребителем или обоими, и установите dirsv_role соответствующим образом. Затем установите переменные, связанные с этим: смотрите в колонку Роль, C = Потребитель, S = Поставщик, B = Оба.

Некоторые переменные нельзя изменить после их установки; изменение их приведет к непредсказуемым результатам, варьирующимся от «ничего не происходит» до «роль завершает работу с ошибкой». Некоторые другие (данные аутентификации, суффикс и т. д.) должны быть установлены на правильное значение для сервера и могут быть изменены, если это имеет смысл, т.е. можно изменить dirsrv_rootdn_password, если вы изменили пароль корневого DN, чтобы эта роль могла аутентифицироваться правильно, но менять dirsrv_suffix между запусками на одном и том же сервере бессмысленно, если только вы не каким-то образом изменили суффикс в 389DS.

Следующие переменные имеют одинаковые наименования и значения, как и в роли 389ds-server, поэтому, если вы используете обе роли в одном плейбуке, вы можете определить их только один раз:

  • dirsrv_rootdn
  • dirsrv_rootdn_password
  • dirsrv_tls_certificate_trusted
  • dirsrv_serverid
  • dirsrv_suffix

Зависимости

Нет.

Но имейте в виду, что эта роль ожидает, что 389DS уже будет работать, она только настраивает репликацию между существующими серверами.

Пример плейбука

Больше примеров, включая установку 389DS с нуля и необходимые настройки Vagrant для их тестирования, доступны в репозитории 389ds-examples.

Обратите внимание, что обычно репликация не начинается немедленно, потому что "поколение реплики" различное между серверами. Это можно исправить с помощью процедуры "обновления реплики", которая описана, например, в разделе 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
Загрузки
1835
Владелец