Форум проекта Pro-LDAP.ru
Общие вопросы по LDAP => Общий раздел => Тема начата: Обухов Дмитрий от 04 Январь 2015, 18:26:04
-
хочу для начала сделать следующую структуру
1. главный LDAP
2. 100500 реплик ридонли
3. в LDAP в виде объектного класса описана конфигурация хоста (сейчас она лежит на каждом хосте в виде конфиг-файла)
4. на каждом хосте запускаем приложение, которое при изменениях в каких-то секциях записи перегенеривает конфигфайл и шлет сигнал приложению его перечитать.
вопрос: как можно внешним приложением (скажем на Perl) подписаться на изменения в БД?
причем идеально бы подписаться так чтобы если подписавшийся какое-то время простаивает, то когда он будет снова запущен, то чтобы он не потерял бы никаких произошедших за его отсутствие изменений
-
Здравствуйте, Дмитрий! Извините, что не сразу ответил -- праздники =) .
Серверы каталогов, реализующие стандарт LDAPv3, должны поддерживать в каждой записи операционный атрибут modifyTimestamp (RFC4512 (http://pro-ldap.ru/tr/rfc/rfc4512.html#section-3.4.4)), в котором хранится дата последнего изменения записи (в OpenLDAP поддерживается). Кроме того, если у Вас есть репликация, то в корневой записи базы данных будет отметка о последнем изменении всей БД (операционный атрибут contextCSN), а в каждой записи -- отметка о последнем её изменении (атрибут entryCSN). Формат у них такой:
ldapsearch -x -LLL -b 'dc=mycompany,dc=ru' 'contextCSN=*' contextCSN entryCSN modifyTimestamp
dn: dc=mycompany,dc=ru
entryCSN: 20071018221420.000000Z#000000#000#000000
modifyTimestamp: 20071018221420Z
contextCSN: 20150107001148.454665Z#000000#000#000000
Делайте запрос, смотрите даты последних изменений и используйте их как Вам надо.
Егор
-
то есть Вы предлагаете приложению периодически опрашивать LDAP на предмет не изменилось ли чего?
а сервер настроить на то чтобы он скажем сам инициировал экшен при поступлении в него изменений можно?
наверно подошло бы следующее:
если бы на реплике (ну и на мастере) можно было складывать в некий log все поступающие изменения (прямо в виде ldif)
то есть чтобы реплика писала бы этакий длиинный ldif о том что меняется в ней. + разумеется ротейтинг этого ldif нужен.
тогда можно клиента по inotify бы подписать было.
-
Здравствуйте!
то есть Вы предлагаете приложению периодически опрашивать LDAP на предмет не изменилось ли чего?
Опрашивать проще, чем писать листенеры =) .
а сервер настроить на то чтобы он скажем сам инициировал экшен при поступлении в него изменений можно?
В данном случае единственная прямая возможность -- сделать ваше приложение клиентом репликации refreshAndPersist, тогда сервер будет рассылать ему произошедшие изменения online.
наверно подошло бы следующее:
если бы на реплике (ну и на мастере) можно было складывать в некий log все поступающие изменения (прямо в виде ldif)
то есть чтобы реплика писала бы этакий длиинный ldif о том что меняется в ней. + разумеется ротейтинг этого ldif нужен.
тогда можно клиента по inotify бы подписать было.
Старая технология репликации (slurpd) складывала изменения в ldif-файлы, но её сейчас Вы уже не настроите. Максимально близка к Вашему случаю технология delta-репликации, но она, опять же, складывает изменения в DIT а не в файл, так что придётся опрашивать каталог.
В двух словах об этом не расскажешь. Почитайте здесь (http://pro-ldap.ru/tr/zytrax/ch7/) и здесь (http://pro-ldap.ru/tr/admin24/replication.html).
Егор