Всем доброго времени суток!
Просматривал лог ldap'a и обнаружил вот такого типа сообщения:
Mar 14 11:39:28 ldapserv slapd[12674]: <=bdb_equality_candidates: (uidNumber) not indexed
Mar 14 11:39:31 ldapserv slapd[12674]: <=bdb_substringing_candidates: (uid) not indexed
В из документации вычитал что, если такие сообщения появляются довольно часто, то нужно нужно провести индексацию этих атрибутов. Проверил как часто данные сообщения появляются:
# grep indexed /var/log/ldap.log | cut -d " " -t 7,8 | sort | uniq -c
6 <=bdb_equality_candidates: (gidNumber)
191647 <=bdb_equality_candidates: (uidNumber)
537 <=bdb_equality_candidates: (uniqueMember)
11 <=bdb_substringing_candidates: (uid)
Для того чтобы проиндексировать эти атрибуты сделал вот что:
0) Остановил slapd;
1) Сделал экспорт каталога в ldif (это меня и спасло) командой slapcat, а также скопировал директорию где хранится сама БД bdb - /var/log/ldap/;
2) В файл /etc/openldap/slapd.d/cn=config/olcDatabase={1}bdb.ldif добавил следующие строки:
olcDbIndex: uidNumber eq
olcDbIndex: uniqueMember eq
3) Запустил slapd;
Запуск прошел успешно, в логах ошибок не было, в директории где хранится bdb появились файлы uidNumber.bdb и uniqueMember, НО только после индексации пользователи не могли удаленно подключаться к серверам(ldap-применяется для аутентификации пользователей) - серверы разрывали соединения.
Началась паника
Начал восстанавливать каталог - сначала просто удалил всю директорию с текущей БД /var/log/ldap/ и скопировал туда резервную копию БД (см. выше пункт №2) - запустил slapd - в БД оказался каталог 2х месячной давности, из этого сделал вывод что все изменения в записях каталога slapd не скидывал в БД.
Удалил /var/log/ldap/ - и импортировал ldif каталога - все вернулось на место!
Хотелось бы разобраться в следующий вопросах:
1) Правильно ли провел индексацию?
2) Почему после индексации пользователи не смогли аутенифицироваться через ldap, может у кого было такое же?
3) Индексацию нужно проводить только на мастер-ldap-сервере или нужно делать тоже самое на slave (настроена репликация refreshOnly)?
4) Как сделать чтобы при изменении/добавлении записи в каталог slapd скидывал всю инфу в bdb сразу ну или через заданный промежуток времени?
5) Можно ли делать slapcat при работающем slapd (openldap 2.4.23)?