среда, 30 ноября 2011 г.

LDAP, настройка репликация Delta-syncrepl

Репликация Delta-syncrepl

Для понимания вопроса читаем здесь
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:///
и сравниваем результат измнененного поля.

1 комментарий: