LDAP: резервное копирование с slapcat vs ldapsearch

11

Используемый: openldap-servers-2.4.23-34.el6_5.1.x86_64

Задача: создать скрипт для crontabсоздания полной резервной копии запланированной базы данных.

1) slapcat- создать файл в формате по умолчанию, Berkeley DB.

2) slapcatможет быть сделано во время slapdработы (если bdb/hdbбаза данных используется).

3) Для восстановления файла после slapcat- должен использоваться slapadd(не ldapadd).

4) slapcat/addне требует пароля.

5) slapaddможно сделать только при slapdостановке.

Пример:

 $ slapcat -f /etc/openldap/slapd.conf -b "dc=db_1" -l db_1_backup.ldif
 $ slapadd -l db_1_backup.ldif

Вместо slapcat/add- давайте взглянем на ldapsearch/add:

1) ldapsearch- создает файл с почти такой же информацией, как slapcat;

2) ldapadd- может использовать файл ldapsearch, не требует slapdостановки;

3) ldapadd/search- требует пароль.

Пример:

 $ ldapsearch -D "cn=root,dc=db_1" -W -b "dc=db_1" "dc=db_1" -LLL > db_1_backup2.ldif
 $ ldapadd -x -D "cn=root,dc=db_1" -W -f db_1_backup2.ldif

Итак - вопрос такой:

1) Я что-то упустил в этом описании инструментов?

2) В чем еще разница между ldapadd/slapaddа ladpsearch/slapcat?

setevoy
источник

Ответы:

12

Хорошее резюме, некоторые дополнительные моменты:

  • slapcatдампы из любого (локального) прямого хранилища данных, это не обязательно Berkeley (hdb или bdb), он также работает с OLC ( cn=config). Сбрасывает в формат LDIF . (Под прямым я имею в виду непосредственное управление OpenLDAP, а не, например, бэкэнд SQL, даже если он хранится локально.)
  • ldapaddтребует , чтобы Slapd это работает, slapaddтребует , чтобы он не работает
  • ldapsearchтребует, чтобы slapd он работал, slapcatне волнует, работает ли он с бэкэндом BDB, как вы заметили

Короче говоря:

  • slapcatэто способ получить хорошую резервную копию, которую можно быстро восстановить, хотя и с простоями на главном сервере (вы можете обойти это с различными типами репликации). Это то, что вы должны использовать для общего резервного копирования и резервного копирования перед обновлением.
  • ldapsearch(без +) даст вам портативную резервную копию, которую вы, вероятно, без труда загрузите на любой другой сервер каталогов, но это будет жизнеспособное восстановление только в простой конфигурации OpenLDAP (без репликации, без специальных оверлеев, без перезаписи), и если Вы не заботитесь о сохранении UUID / создании / изменении метаданных. Вам понадобятся любые дополнительные файлы схемы, которые также соответствуют вашим данным.
  • ldapadd(используя его другую идентичность ldapmodify) может использоваться для легкого применения модификаций LDAP (изменение, удаление и переименование объекта), которые неосуществимы или невозможны с slapadd/ slapcatодним

Для большинства администраторов основные соображения вытекают из слегка отличающегося содержимого LDIF в каждом случае, а также требования slapdк запуску (или нет). Более важные различия:

  1. slapcatбыстрее, потому что он просто сбрасывает базу данных, пропуская издержки протокола LDAP, аутентификацию, контроль доступа, ограничения по объектам и времени, оверлеи; и он не выполняет поиск в соответствии с иерархией LDAP.
  2. slapaddбыстрее (опять же, без издержек протокола LDAP), и в случае, если вы восстанавливаете заведомо исправную резервную копию, вы можете запустить ее в быстром режиме ( -q), чтобы ускорить большой импорт. Вы также можете отключить проверку схемы ( -s), хотя обратите внимание, что небольшие изменения в схеме или проверке данных между версиями OpenLDAP не являются неслыханными.
  3. slapcatограничен локальными базами данных, он не будет переходить в другие каталоги (например, с back-ldap, back-meta), как ldapsearchбудет. То же самое относится к slapadd/ ldapadd.
  4. ldapsearchвернет динамические атрибуты, которые не сохранены в бэкэнде, например, hasSubordinatesили те, которые поддерживаются оверлеями (например slapo-memberof). У вас будут проблемы с их загрузкой ldapadd(например, рабочие атрибуты без изменения пользователем). Перезапись (slapo-rwm) также может исказить ldapsearchпредставление о содержимом каталога.
  5. slapcatвключает внутренние (операционные) атрибуты, если вы используете репликацию, эти атрибуты являются критическими. С репликацией вы несколько менее зависимы от резервных копий, но если вы используете ldapaddдля перезагрузки своего мастера, каждый объект будет воссоздан репликацией (изменено entryUUID entryCSN). Хотя вы можете включить операционные атрибуты, используя специальный атрибут «+» с ldapsearch(или allopналожением), это не то же самоеslapcat , см. предыдущий пункт, почему это так. Эти атрибуты также включают создание / изменение DN и отметок времени, которые могут быть важны для некоторых приложений.
  6. поскольку slapcatне соблюдает иерархию LDAP (подразумеваемое упорядочение), нет никакой гарантии, что его упорядочение данных будет жизнеспособным, ldapaddт. е. даже если вы удалите операционные атрибуты, вы ldapaddможете жаловаться, потому что подчиненные могут появиться перед своими вышестоящими (родителями) , Спецификации LDAP требуют наличия родителя, но также оставляют порядок результатов поиска неопределенным в этом отношении. См. Комментарий Говарда ниже, OpenLDAP slapaddтихо поддерживает неупорядоченные данные для некоторых бэкэндов. В крайнем случае вы можете многократно использовать slapaddс опцией продолжить при ошибке ( -c), пока не будут созданы все «вышедшие из строя» родители, останавливаясь, когда вы больше не получаете код ошибки 32 (такого объекта нет,
  7. ldapadd подчиняется правилам и наложениям LDAP, например, ссылочная целостность, ppolicy (политика паролей)
  8. slapcatпредпочитает использовать значения атрибута в кодировке base-64 как минимум для userPassword (обозначается ::после имени атрибута)
  9. ldapsearchимеет больше возможностей для форматирования LDIF и записи больших атрибутов в отдельные файлы. Он также может обрабатывать рефералы и псевдонимы .
mr.spuratic
источник
Порядок результатов LDAP не определен. И slapcat, и ldapsearch могут возвращать записи в произвольном порядке, и ни один вывод не гарантированно будет в подходящем порядке для использования с ldapadd. Драйверы slapadd bdb / hdb / mdb имеют специальные обходные пути для обработки ввода в произвольном порядке, ldapadd - нет.
Hyc
slapcatвозвращает записи в порядке базы данных (бэкэнда), который может быть или не быть четко определенным. ldapsearchпо умолчанию возвращается в том порядке, в котором отвечает сервер, в OpenLDAP есть выбор сортировки на стороне клиента (например -S "") или управления сортировкой на стороне сервера (например -E sss, если поддерживается и зависит от незначительных ловушек, связанных с конфигурацией и схемой). Спецификация говорит, что результаты поиска могут быть в любом порядке. Реализация могла бы определить порядок по умолчанию, большинство людей предполагают, что по умолчанию «родительский элемент перед дочерним», это только в OpenDS, AFAIK.
mr.spuratic
2
Порядок результатов поиска в OpenLDAP намеренно не документирован. Поскольку в спецификации уже сказано, что результаты могут быть в любом порядке, клиентское программное обеспечение не должно полагаться на какой-либо конкретный порядок. Конечно, можно выполнить сортировку результатов, но это требует гораздо больше ресурсов и, как правило, не представляет интереса при выполнении полного резервного копирования. Порядок в базе данных является относительно бессмысленным, учитывая возможность переименования поддеревьев перемещать ветви в новые местоположения DIT.
Hyc
1

slapcatне работает, если у вас есть оверлеи, например memberOf. Так что если вы сделаете членство slapcat/ slapaddцикл, оверлеи больше не будут работать.

Роберт Мунтяну
источник