Для понимания вопроса читаем здесь
http://www.openldap.org/doc/admin24/replication.html#Delta-syncrepl
Везде приведен домен для примера dc=example,dc=com - необходимо подставить свои значения
На мастере
** проверяем файла /etc/ldap/slapd.d/cn=config/olcDatabase={1}hdb.ldif
на наличие следующих строк
olcDbIndex: entryCSN eq
olcDbIndex: entryUUID eq
если их нет, то создадим
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
** создаем нужные подкаталоги
sudo -u openldap mkdir /var/lib/ldap/accesslog
sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog/
** добавим загрузку необходимых модулей syncprov и accesslog
ldapmodify -Y EXTERNAL -H ldapi:///
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog
** создадим дополнительную базу для accesslog
ldapadd -Y EXTERNAL -H ldapi:///
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap/accesslog
olcSuffix: cn=accesslog
olcRootDN: cn=admin,dc=example,dc=com
olcDbIndex: default eq
olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart
** добавим syncprov в БД Accesslog.
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE
** добавим syncprov в основную БД
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
** добавим определения accesslog для основной БД
ldapadd -Y EXTERNAL -H ldapi:///
dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcAccessLogConfig
olcOverlay: accesslog
olcAccessLogDB: cn=accesslog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
# Сканировать БД accesslog каждый день, и удалять записи старше 7 дней
olcAccessLogPurge: 07+00:00 01+00:00
** создаем нового юзера "replicator" для репликации
ldapadd -W -x -D 'cn=admin,dc=example,dc=com' -H ldap://127.0.0.1
dn: cn=replicator, dc=example, dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: replicator
description: sync replication user
userPassword: SECRET
где значение userPassword можно получить с помощью команды slappasswd -h {MD5}
** задаем права на чтение replicator
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to * by dn="cn=replicator,dc=example,dc=com" read
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: to * by dn="cn=replicator,dc=example,dc=com" read
На слэйве
** добавим нужный индекс
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryUUID eq
** настроим репликацию
_master_server_ = url или ip мастер-сервера LDAP
ldapmodify -Y EXTERNAL -H ldapi:///
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncRepl: rid=0 provider=ldaps://_master_server_:636 bindmethod=simple binddn="cn=replicator,dc=example,dc=com" credentials=SECRET searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog tls_reqcert=never
-
add: olcUpdateRef
olcUpdateRef: ldap://_master_server_
Проверка
В простейшем случае делаем изменение на мастере и следом просматриваем на слэйве
ldapsearch -Y EXTERNAL -H ldapi:///
и сравниваем результат измнененного поля.
спасибо. и мне пригодилось!
ОтветитьУдалить