Репликация OpenLDAP методом syncprov
Метод syncprov является более предпочтительным и гибким по сравнению со старым slurp.
echo net-nds/openldap overlays >> /etc/portage/package.use/openldap
Настройка master
На главном сервере необходимо подключить модуль syncprov:
/etc/openldap/slapd.conf
... overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100
Строка syncprov-checkpoint 100 10 указывает серверу сохранять значения параметра contextCSN на жесткий диск каждые 100 операций записи или каждые 10 минут. Строка syncprov-sessionlog 100 регистрирует все операции записи в журнале, хранящемся на жестком диске, что также помогает поддерживать цикл синхронизации.
Настройка slave
Репликацию можно использовать в двух режимах:
- refreshOnly – периодическая репликация, с заданным интервалом;
- refreshAndPersist – постоянные режим, изменения на master почти мгновенно становятся доступны на slave серверах.
Важно помнить, что при попытке записи данных на slave (изменение, добавление, удаление), openldap сервер отдаст клиенту ссылку на мастер сервер указанный в updateref и такое поведение нужно обрабатывать на программном уровне.
Периодическая репликация (refreshOnly)
/etc/openldap/slapd.conf
... syncrepl rid=1 provider=ldap://10.0.1.15 type=refreshOnly interval=00:00:01:00 searchbase="dc=ldserv,dc=ru" filter="(objectClass=*)" scope=sub attrs="*" schemachecking=off bindmethod=simple binddn="cn=Manager,dc=ldserv,dc=ru" credentials=wUVmaspRffw9 updateref ldap://10.0.1.15
Постоянная репликация (refreshAndPersist)
/etc/openldap/slapd.conf
... syncrepl rid=1 provider=ldap://10.0.1.15 type=refreshAndPersist retry="60 10 300 +" searchbase="dc=ldserv,dc=ru" filter="(objectClass=*)" scope=sub attrs="*" schemachecking=off bindmethod=simple binddn="cn=Manager,dc=ldserv,dc=ru" credentials=wUVmaspRffw9 updateref ldap://10.0.1.15
Запуск
На master и slave перезапустить службу каталога:
/etc/init.d/slapd restart
При этом на slave текущая схема не обязательно совпадать с master и может быть вообще пустой.
Обсуждение
slapd[18268]: conn=123 fd=26 ACCEPT from IP=192.168.0.10:36109 (IP=0.0.0.0:389) slapd[18268]: conn=123 op=1 SRCH base="dc=unix,dc=domaincib,dc=ru" scope=2 deref=0 filter="(objectClass=*)" slapd[18268]: conn=123 op=1 SRCH attr=* + slapd[18268]: conn=123 op=1 SEARCH RESULT tag=101 err=0 nentries=0 text=
сделал по статье, но ничего на slave не реплицируется, в логах нашел, что подключение происходит, и не находит ни одной записи, делаю такой же запрос рукам ldapsearch, находит все записи. куда копать?
Хм… Проверьте еще раз всё.
Точно ли по тем данным авторизации, что настроены на репликацию ldapsearch выдает данные? Проверьте получение данных с помощью ldapsearch по данным авторизации как на slave так и на master.
так вот именно, что точно. может у меня проблема из-за того что я немного схему изменил? настроен N-Way multi master между двумя серверами, и я хочу третий сделать slave. такое возможно?
построил c нуля все заработало. Как же реализовать мою схему?
Я multi-master не настраивал. Вам придется изучить документацию на этот счет, вот например:
Моя ошибка была в том, что я начинал репликацию не на пустую базу, а на файловую копию master-а