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 | Роль этого сервера: 'поставщик', 'потребитель' или 'оба' (мастер). Хаб не поддерживается. | Нет | ||
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.
ansible-galaxy install lvps/389ds-replication