Форум проекта Pro-LDAP.ru
Общие вопросы по LDAP => Общий раздел => Тема начата: hop от 04 Сентябрь 2013, 18:41:21
-
Привет.
Возникли сложности с настройкой репликации в openldap 2.4, посредтсвом syncrepl.
Есть 2 идентичных сервера
provider
[root@server3 openldap]#uname -srm
Linux 2.6.32-220.el6.x86_64 x86_64
[root@server3 openldap]#cat /etc/issue
CentOS release 6.2 (Final)
Kernel \r on an \m
[root@server3 openldap]#slapd -V
@(#) $OpenLDAP: slapd 2.4.23 (Apr 29 2013 07:47:08) $
consumer
[root@server5 ~]# uname -srm
Linux 2.6.32-279.el6.x86_64 x86_64
[root@server5 ~]# cat /etc/issue
CentOS release 6.3 (Final)
Kernel \r on an \m
[root@server5 ~]# slapd -V
@(#) $OpenLDAP: slapd 2.4.23 (Apr 29 2013 07:47:08) $
Время синхронизированно.
Конфиги: (пароли, IP dn и т.д. изменил)
provider
[root@server3 openldap]#egrep -v '^(#|$)' /etc/openldap/slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
loglevel -1
modulepath /usr/lib64/openldap
moduleload back_db.la
moduleload syncprov.la
moduleload back_hdb.la
database bdb
suffix "dc=provider,dc=com"
rootdn "cn=manager,dc=provider,dc=com"
rootpw pass
directory /usr/local/openldap/openldap-data
index objectclass,entryCSN,entryUUID eq
moduleload syncprov
database monitor
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
syncprov-nopresent TRUE
syncprov-reloadhint TRUE
consumer
[root@server5 openldap]# egrep -v '^(#|$)' /etc/openldap/slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database monitor
modulepath /usr/lib64/openldap
moduleload syncprov.la
moduleload back_hdb.la
loglevel 256
database bdb
suffix "dc=provider,dc=com"
rootdn "cn=manager,dc=provider,dc=com"
rootpw pass_slave
directory /var/lib/ldap
index objectclass,entryCSN,entryUUID eq
syncrepl rid=123
provider=ldap://provider.com:389
interval=00:00:01:00
type=refreshOnly
retry="60 30 300 +"
searchbase="dc=provider,dc=com"
filter="(objectClass=*)"
attrs="*"
scope=sub
schemachecking=off
bindmethod=simple
binddn="cn=manager,dc=provider,dc=com"
credentials=pass
updateref ldap://provider.com:389
При запуске в debug mode
slapd -d 256 -h ldap://provider.com:389
получаю
do_syncrep2: rid=123 got search entry without Sync State control
do_syncrepl: rid=123 rc -1 retrying (29 retries left)
У себя, на боевых все еще вертится на openldap 2.3 с репликацией slurpd, проблем нет.
Документацию читал, гуглил, выбился из сил в поисках.
Подскажите, направьте.
-
Здравствуйте! Вам нужно определить наложение syncprov для базы данных bdb, то есть перенесите определения для syncprov ДО database monitor:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
loglevel 256
modulepath /usr/lib64/openldap
moduleload back_bdb.la
moduleload syncprov.la
moduleload back_hdb.la
database bdb
suffix "dc=provider,dc=com"
rootdn "cn=manager,dc=provider,dc=com"
rootpw pass
directory /usr/local/openldap/openldap-data
index objectclass,entryCSN,entryUUID eq
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
syncprov-nopresent TRUE
syncprov-reloadhint TRUE
database monitor
В файле slapd.conf строки, начинающиеся с пробелов, считаются продолжением предыдущей строки. НЕ ставьте пробел перед директивами moduleload!
При loglevel -1 в логи будет сыпаться очень много информации. Лучше в файле поставить loglevel 256 (или даже loglevel 0), а при запуске в debug-режиме указывать уровень побольше:
slapd -d -1 -h ldap://provider.com:389
Егор
-
Огромное спасибо!
Поправил конфиг, репликация заработала, но не до конца :)
Реплицируется только одна запись:
cn=employee,ou=groups,dc=provider,dc=com
Я так понимаю, что все основывается на фильтре
searchbase="dc=provider,dc=com"
filter="objectClass=*"
scope=sub
attrs="*,+"
schemachecking=off
и должны матчится все записи.
Для проверил выполнил
ldapsearch -h provider.com -p 389 -D 'cn=Manager3914,dc=provider,dc=com' -w pass -b 'dc=provider,dc=com' -s sub 'objectclass=*'
и получил все записи.
Права тоже есть, добавил на всякий случай
access to *
by dn="cn=Manager3914,dc=provider,dc=com" write
by self write
by * read
В дебаге при этом ошибок нет, ну кроме
consumer
<= bdb_dn2id: get failed: DB_NOTFOUND: No matching key/data pair found (-30988)
=> access_allowed: disclose access to "" "entry" requested
provider
ldap_write: want=100 error=Resource temporarily unavailable
ber_flush2 failed errno=11 reason="Resource temporarily unavailable"
daemon: activity on 1 descriptor
daemon: activity on:
Ничего вразумительного не нагуглилось.
Есть идеи ?
-
нашел ответ тут
http://pro-ldap.ru/forum/index.php?topic=61.0
выполнил последовательность действий
provider
slapcat | tee -a /tmp/ldap_dump.ldif
consumer
echo "" | slapadd -f /etc/openldap/slapd.conf
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
slapadd -f /etc/openldap/slapd.conf -l /root/ldap_dump.ldif -F /var/lib/ldap
и репликация заработала! :)
Большое спасибо за помощь!