Вопрос или проблема
У меня есть несколько кластерных серверов, которые я хочу обновить с помощью автоматических обновлений, но в разные дни недели. Поскольку я могу потерять несколько узлов в кластере, я хочу убедиться, что один сервер выполняет автоматическое обновление в понедельник, один в среду и один в пятницу.
Смотрю на автоматические обновления и немного запутываюсь в плане расписания. Существует несколько systemd-timers
в связи с apt:
$ systemctl list-timers | head -1; systemctl list-timers | grep -e apt -e update; systemctl list-timers | tail -3
NEXT LEFT LAST PASSED UNIT ACTIVATES
Fri 2023-12-08 12:09:06 CET 2h 10min left Fri 2023-12-08 04:59:42 CET 4h 58min ago apt-daily.timer apt-daily.service
Fri 2023-12-08 14:49:29 CET 4h 51min left Thu 2023-12-07 14:49:29 CET 19h ago update-notifier-download.timer update-notifier-download.service
Sat 2023-12-09 06:08:14 CET 20h left Fri 2023-12-08 06:27:50 CET 3h 30min ago apt-daily-upgrade.timer apt-daily-upgrade.service
Mon 2023-12-11 00:28:08 CET 2 days left Fri 2023-12-08 04:10:29 CET 5h 47min ago update-notifier-motd.timer update-notifier-motd.service
12 таймеров в списке.
Используйте --all, чтобы увидеть загруженные, но неактивные таймеры, тоже.
Но ни один из них не кажется триггером для unattended-upgrades
.
Существует system.service
, но, похоже, у него не очень богатые возможности для планирования:
$ systemctl status unattended-upgrades
● unattended-upgrades.service - Автоматическое обновление отключено
Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2023-11-17 14:40:05 CET; 2 weeks 6 days ago
Docs: man:unattended-upgrade(8)
Main PID: 866 (unattended-upgr)
Tasks: 2 (limit: 9389)
Memory: 10.8M
CPU: 83ms
CGroup: /system.slice/unattended-upgrades.service
└─866 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
Nov 17 14:40:05 hostname systemd[1]: Started Unattended Upgrades Shutdown.
Я предполагаю, что я мог бы написать свой собственный timer
и заставить его триггерить другое выполнение unattended-upgrades
, но это кажется немного избыточным — кто-то, вероятно, уже решил эту задачу лучше.
Как мне распределить расписание unattended-upgrade
по неделе?
Для большинства администраторов кластеров настройки по умолчанию должны обеспечивать безопасную работу без необходимости специальной настройки.
Автоматические обновления планируют случайные интервалы для загрузки и выполнения. Это необходимо, чтобы избежать перегрузки зеркал миллионами запросов в одном темпе, но также означает, что машины в вашем кластере должны уже быть смещены на случайные интервалы.
Кроме того, автоматические обновления предназначены для работы незаметно, пока ваши серверы продолжают нормально функционировать.
Автоматические обновления не должны вызывать отключение серверов из вашего кластера, кроме редких случаев, когда требуется перезагрузка (обновление ядра) И вы включили apt для триггера перезагрузки (по умолчанию = отключено).
- Поскольку это настройка, которую вы изменили, вы можете вернуть ее обратно.
Вы также можете поэкспериментировать с таймером. apt-daily-upgrade.timer
является триггером для автоматических обновлений (.timer
, а не .service
)
Не редактируйте таймер по умолчанию (/lib/systemd/system/apt-daily-upgrade.timer
), так как ваши изменения будут перезаписаны во время следующего обновления пакетов.
Вместо этого создайте файл переопределения (/etc/systemd/system/apt-daily-upgrade.timer
) для внесения ваших изменений.
[Unit]
Description=Ежедневное обновление apt и очистка
After=apt-daily.timer
[Timer]
OnCalendar=*-*-* 6:00 <------ Измените эту настройку таймера
RandomizedDelaySec=60m <------ Или измените вашу рандомизацию
Persistent=true
[Install]
WantedBy=timers.target
Ссылка: Приемлемый формат OnCalendar
Если вы внесете изменения в таймер или службу, не забудьте вернуться через 24-48 часов, чтобы убедиться, что автоматические обновления действительно происходят и происходят по вашему желаемому расписанию. Вы только что разобрали и снова собрали ключевой элемент безопасности и защиты в вашей системе Ubuntu, так что проверка на ошибки или опечатки будет разумной.
Ответ или решение
Настройка автоматических обновлений на определённые дни недели для кластерных серверов
В условиях работы с кластерными серверами важно поддерживать высокую надежность и доступность, особенно когда дело касается обновления системного ПО. Вопрос о настройке автоматических обновлений (unattended upgrades) на разные дни недели имеет несколько аспектов, которые необходимо учитывать для успешной реализации данного процесса.
1. Понимание автоматических обновлений
Система автоматических обновлений позволяет установить важные обновления без вмешательства пользователя. Однако по умолчанию поведение этого процесса может быть недоступным для детальной настройки. Вам нужно понимать, что сервис, отвечающий за автоматические обновления, не запускается строго по расписанию, а использует случайные интервалы для загрузки и установки обновлений.
2. Описание существующих таймеров
Вы уже заметили несколько таймеров, связанных с apt, через команду systemctl list-timers
. Основной таймер, вызывающий автоматические обновления, это apt-daily-upgrade.timer
. Важно отметить, что изменять его напрямую не рекомендуется, так как изменения могут быть потеряны при следующем обновлении пакетов.
3. Создание переопределения таймера
Вместо изменения системного таймера, рекомендуется создать файл переопределения для apt-daily-upgrade.timer
в каталоге /etc/systemd/system/
. Это позволит вам задать собственное расписание для автоматических обновлений. Пример конфигурации может выглядеть следующим образом:
[Unit]
Description=Ежедневное обновление apt и очистка
After=apt-daily.timer
[Timer]
OnCalendar=Mon *-*-* 06:00:00 # Понедельник
OnCalendar=Wed *-*-* 06:00:00 # Среда
OnCalendar=Fri *-*-* 06:00:00 # Пятница
RandomizedDelaySec=60m # Случайная задержка на 60 минут
Persistent=true
[Install]
WantedBy=timers.target
4. Перезагрузка и активация таймеров
После создания или изменения файла переопределения, не забудьте перезагрузить конфигурацию systemd и активировать таймер:
sudo systemctl daemon-reload
sudo systemctl enable apt-daily-upgrade.timer
sudo systemctl start apt-daily-upgrade.timer
5. Мониторинг и проверка
Обязательно следите за тем, как проходит процесс автоматических обновлений, и убедитесь, что серверы обновляются в соответствии с заданным расписанием. Для этого можно использовать команды, такие как:
systemctl list-timers --all
journalctl -u apt-daily-upgrade.service
Это позволит вам проверить, что каждый из ваших серверов обновляется в установленный вами день.
Заключение
Настройка автоматических обновлений на разные дни недели для кластерных серверов — это эффективный способ минимизировать риск недоступности узлов из-за одновременно выполняемых обновлений. Следуя рекомендациям по созданию файлов переопределений таймеров, вы сможете достичь желаемого результата. Постоянный мониторинг и контроль сыграют ключевую роль в поддержании стабильной работы вашего кластера.