Ограничить использование дискового пространства журнала транзакций Openldap

Вопрос или проблема

Openldap (в частности, версия 2.4) по умолчанию хранит историю транзакций в лог-файлах в директории данных ldap (то есть /var/lib/ldap/log.###########). В настоящее время эти лог-файлы занимают много места, никогда не удаляются автоматически и растут бесконечно. Ручное удаление старых логов работает нормально, но я хотел бы ограничить количество логов, которые slapd хранит автоматически.

МОЙ СЦЕНАРИЙ

Я знаю, что эти журналы транзакций используются для восстановления ldap в случае катастрофического сбоя. В моем сценарии ldap регулярно очищается и заполняется с помощью скрипта (это не используется для системных учетных записей). Из-за этого мне не нужно беспокоиться о восстановлении, в случае сбоя вполне приемлемо запустить скрипт снова. С другой стороны, регулярное очищение/заполнение ldap включает в себя множество транзакций, поэтому эти журналы транзакций накапливаются довольно быстро.

LOGROTATE

logrotate имеет потенциал здесь, но если самый недавний журнал транзакций будет удален, то slapd не сможет запуститься (он будет жаловаться на необходимость выполнить восстановление). Поскольку я не могу полагаться на имена логов (потому что slapd хранит много маленьких логов, увеличивая номер файла лога по мере необходимости), я хотел бы использовать настройки Berkeley DB, которые создают эти логи. Я могу полагаться на даты доступа/создания (самая последняя дата изменения – это самый последний журнал транзакций), но я все равно предпочел бы использовать Berkeley, если это возможно.

DB_CONFIG

Настройки для журналов транзакций, как говорят, контролируются настройками Berkeley DB в /var/lib/ldap/DB_CONFIG. Пример DB_CONFIG, который идет с openldap, задает некоторые настройки журнала транзакций:

set_lg_regionmax 262144
set_lg_bsize 2097152

Согласно документации Oracle по Berkeley:

set_lg_regionmax: Установить размер базовой области журналирования 
в окружении Berkeley DB, в байтах. Журнал области используется для хранения 
имен файлов, и, возможно, его нужно увеличить, если будет открыто и зарегистрировано 
большое количество файлов в менеджере журнала указанного окружения 
Berkeley DB.

Таким образом, это, похоже, просто устанавливает размер файла, который отслеживает файлы журнала транзакций.

set_lg_bsize: Установить размер буфера журнала в памяти, в байтах. 

Это, похоже, контролирует, сколько ОЗУ выделяется под буфер транзакций.

Файлы log.########### в директории данных ldap все имеют размер 10485760 байт, что, похоже, близко соответствует set_lg_bsize (10485760 / 5 = 2097152 = set_lg_bsize), хотя я не уверен, является ли это совпадением.

Моя интерпретация заключается в том, что $lg_bsize объем истории транзакций хранится в памяти одновременно. Когда этот лимит превышен, он перемещает часть истории транзакций в самый последний файл журнала и создает новый журнал, если текущий журнал достигает определенного размера.

DB_LOG_AUTOREMOVE

Согласно документации Berkeley, журналы транзакций могут быть удалены путем установки флага DB_LOG_AUTOREMOVE в DB_CONFIG.

DB_LOG_AUTOREMOVE: Если установлен, Berkeley DB будет автоматически 
удалять лог-файлы, которые больше не нужны. 

Однако, когда я добавил это в DB_CONFIG:

set_flags DB_LOG_AUTOREMOVE

и перезагрузил slapd, я не заметил разницы. Я удалил старые журналы транзакций и запустил скрипт заполнения ldap, который у меня есть, и смог накопить 290MB в журналах транзакций. Похоже, что это все еще не ограничивает логи вообще. Причина этого может быть связана с фразой: которые больше не нужны

Актуальный вопрос

Как настроить автоматическое удаление журналов транзакций slapd с помощью файла DB_CONFIG Berkeley DB?

Я нашел ответ на Stackoverflow – вам нужно запустить slapindex после изменений в DB_CONFIG.

Ответ или решение

Как ограничить использование дискового пространства журналов транзакций OpenLDAP

OpenLDAP версии 2.4 хранит историю транзакций в виде журналов по умолчанию в каталоге данных LDAP, что может со временем привести к значительному превышению объемов занимаемого дискового пространства. Этот процесс происходит автоматическим образом, и журналы не удаляются до тех пор, пока не будут очищены вручную. В условиях, когда LDAP регулярно очищается и заполняется с помощью сценария, важно управлять этими журналами, избегая их бесконечного накопления.

1. Понимание проблемы

Ваша конфигурация подразумевает, что вы не нуждаетесь в восстановлении LDAP после аварии, поэтому контроль за журналами становится важной задачей. При частом пополнении LDAP количество транзакций возрастает, и как следствие, журналы могут расти до значительных размеров. Учтите, что, если вы удалите самый последний журнал, служба slapd не сможет запуститься, так как будет требовать выполнить восстановление.

2. Использование DB_CONFIG

Для управления журналами транзакций используется файл конфигурации Berkeley DB, находящийся по пути /var/lib/ldap/DB_CONFIG. Прежде чем вносить изменения, убедитесь, что вы имеете резервную копию этого файла.

Примеры настроек

Ниже приведены настройки, которые могут быть включены в DB_CONFIG:

set_lg_regionmax 262144
set_lg_bsize 2097152
set_flags DB_LOG_AUTOREMOVE
  • set_lg_regionmax — указывает размер логической области ведения, необходимой для хранения имен файлов журналов. Увеличивайте этот параметр, если открываете множество файлов.

  • set_lg_bsize — задает размер буфера для транзакционных записей в памяти. Убедитесь, что это значение соответствует фактическому размеру ваших журналов.

  • set_flags DB_LOG_AUTOREMOVE — включает автоматическое удаление журналов, которые больше не нужны.

3. Что делать после изменения DB_CONFIG

После внесения изменений в DB_CONFIG важно перезапустить процесс slapd. Однако, на этом этапе многие пользователи сталкиваются с проблемой, когда журналы все еще продолжают расти.

Ключевой момент: необходимо запустить команду slapindex после внесения изменений в DB_CONFIG. Эта команда обновит индекс и позволит системе правильно обработать новые настройки.

sudo slapindex

После этого перезапустите службу slapd:

sudo systemctl restart slapd

4. Возможные результаты

После успешного выполнения вышеуказанных шагов, старые журналы транзакций должны автоматически удаляться, если они больше не нужны. Однако стоит отметить, что в зависимости от интенсивности записей в ваших LDAP, количество журналов может продолжать расти временно, так как система будет обрабатывать входящие данные.

Заключение

Управление дисковым пространством, используемым журналами транзакций OpenLDAP, является важной задачей для поддержания эффективности работы вашей системы. Следуя описанным шагам, вы сможете минимизировать занимаемое дисковое пространство и освободить ресурсы для других задач. Помните о выполнении команды slapindex после внесения изменений в конфигурацию, чтобы ваши настройки вступили в силу. Контроль за файлами журналов с помощью утилиты logrotate также может быть хорошим дополнением к этому процессу, но требует внимательного подхода.

Оцените материал
Добавить комментарий

Капча загружается...