Снятие конфигурации узла
Перед обновлением или переустановкой узла снимите копию его конфигурации и
состояния. Это делает скрипт vstackos.config-backup.sh за один прогон, за
несколько секунд, и на узле он ничего не меняет.
Скрипт выдаёт техническая поддержка vStack по запросу. В поставку релиза он не входит.
Это не резервная копия данных. Данные пулов, диски ВМ и снапшоты ZFS в сбор не попадают. Скрипт собирает конфигурацию узла, то есть то, по чему узел собирается заново или возвращается к прежнему состоянию.
Зачем отдельный сбор, если обновление само делает копию
vStack.update.sh перед обновлением сохраняет /etc, /usr/local/etc,
vstack-env.conf и профиль загрузки: /boot/loader.conf,
/boot/loader.conf.local и /boot/device.hints. После обновления он
возвращает учётные записи, ssh, несколько системных файлов и эти три файла
загрузки. Подробно это описано в шаге 3 страницы
«Обновление узла до 3.2».
У этой копии две слабости. Она лежит в /var/backups на системном диске узла,
и при переустановке пропадает вместе с ним. И она не покрывает часть состояния
узла:
| Не покрыто копией обновления | Чем это грозит |
|---|---|
| конфигурация и база кластерного слоя | нечем восстановить членство узла в кластере и раскладку сервисов |
| разметка дисков, зеркало системного диска, EFI-разделы | нечем повторить загрузочный диск при переустановке |
| состав раздачи дисков (LUN, таргеты, инициаторы) | на части версий при остановке сервисов файл состава обнуляется, и состав пропадает вместе с ним |
| описания ВМ узла | нечем восстановить конфигурацию машин |
| список пакетов и приоритеты репозиториев | нечем воспроизвести ту же сборку при откате |
Когда запускать
До остановки кластерного слоя и экспорта пулов. После остановки пулы не смонтированы, и состав раздачи взять уже неоткуда. Скрипт это заметит и предупредит, но снять состав не сможет.
Нужны права root на узле и 256 МБ свободного места в каталоге вывода. Обычно
сбор занимает 5–8 МБ. Окно обслуживания не нужно: скрипт только читает и пишет
в свой каталог.
На каждом узле свой сбор. Не смешивайте сборы разных узлов. Идентификатор
узла, vstack-env.conf и база кластерного слоя у каждого узла свои, и если их
перепутать, сломается кластер.
Шаг 1. Прогон на узле
sh vstackos.config-backup.sh --tag "3.1.0 -> 3.2.0"
То же самое без копирования скрипта на узел:
ssh root@q100u001 sh -s -- --tag "3.1.0 -> 3.2.0" < vstackos.config-backup.sh
Сбор ложится в /root/vstackos-config-backup/<кластер>/<дата-UTC>/<узел>/,
каталог создаётся с правами 700. Внутри разделы по темам: идентичность узла,
пакеты, конфигурация, хранилище, диски, кластер, раздача, ВМ, сеть, рантайм.
Имя кластера скрипт определяет сам и печатает при старте. Сначала он берёт
префикс имени узла вида <кластер>u<NNN> (для q100u001 это q100), затем
cluster_id из vstack-env.conf, в крайнем случае имя узла целиком. Если имя
вышло не то, задайте каталог ключом --out.
| Ключ | Когда нужен |
|---|---|
--dry-run | показать план сбора и ничего не писать |
--tag TEXT | пометка в отчёте: целевая версия, номер заявки |
-o, --out DIR | другой каталог, например для повторного сбора «после» |
--copy-to DIR | сразу продублировать сбор на смонтированный носитель и сверить копию по контрольным суммам. Ключ можно указать несколько раз |
--tar | дополнительно упаковать сбор в vstackos-config-backup-<узел>-<дата>.tar.gz рядом с каталогом |
--verify DIR | проверить готовую копию по её манифесту и выйти |
--no-secrets | не класть в копию master.passwd, spwd.db и приватные ssh-ключи узла |
--with-logs | добавить хвосты /var/log |
Коды возврата: 0 — сбор чистый, 2 — собрано, но есть предупреждения,
1 — скрипт не стартовал.
Шаг 2. Прочитать отчёт сбора
cat <out>/00-summary/SUMMARY.txt # профиль узла, размер сбора, итог проверок
cat <out>/00-summary/checks.txt # PASS/FAIL по критичным артефактам
cat <out>/00-summary/warnings.txt # что не собралось
FAIL на базе кластерного слоя, vstack-env.conf, разметке дисков или
описаниях ВМ означает стоп. Не начинайте обновление, пока не выясните,
почему артефакт не снялся.
Отдельно смотрите предупреждение о том, что сохранённый состав раздачи пуст, а подсистемы в рантайме живы. Значит, файл состава уже обнулён, и единственная копия раздачи — дамп рантайма внутри сбора.
Шаг 3. Разложить сбор в три места
По умолчанию сбор лежит на системном диске, на том самом, который перезаписывает обновление и который теряется при переустановке. Одной этой копии мало.
| # | Куда | Как | Кто делает |
|---|---|---|---|
| 1 | на узле | каталог вывода | скрипт |
| 2 | второй носитель: загрузочная флэшка узла, другой пул, смонтированная сетевая шара | --copy-to <точка монтирования>, скрипт копирует и сверяет по контрольным суммам | скрипт |
| 3 | вне узла: рабочая машина администратора | поток tar, см. ниже | администратор |
В конце прогона скрипт печатает все три строки с отметкой [done] или
[NOT done]. Третья всегда NOT done, потому что вынести сбор с узла может
только администратор.
Флэшка
Запись установочного образа через dd затирает всё, что было на носителе.
Поэтому кладите сбор после записи образа.
gpart show da0 # найти раздел носителя
mount -t msdosfs /dev/da0s1 /mnt # или -t ufs /dev/da0p2 для memstick-образа
sh vstackos.config-backup.sh --copy-to /mnt
umount /mnt
Носитель должен различать регистр в именах файлов. На узле есть файлы,
имена которых отличаются только регистром. FAT-флэшка, диск Windows и штатный
том macOS считают такие имена одним файлом, и копия там молча теряет по
файлу на каждую пару. Скрипт проверяет носитель до копирования и на
регистронезависимый писать отказывается. На macOS и Windows храните сбор
архивом (--tar или поток tar ниже) и распаковывайте там, где регистр
различается.
Вынос с узла: поток tar, а не scp -r
В сборе около тысячи мелких файлов. scp -r передаёт их по одному, и на
канале с задержкой это растягивается на часы. Поток tar справляется за
секунды.
D=/root/vstackos-config-backup/<кластер>/<дата>
# приёмник различает регистр: сразу в каталог
ssh root@q100u001 "tar czf - -C $D q100u001" | tar xzf -
# macOS или Windows: хранить архивом, не распаковывая
ssh root@q100u001 "tar czf - -C $D q100u001" > vstackos-config-backup-q100u001-<дата>.tar.gz
Раскладка хранилища вне узла
Удобнее всего повторить раскладку узла, тогда сбор переносится простым копированием:
<хранилище>/<кластер>/<дата>/vstackos-config-backup-<узел>-<дата>.tar.gz
CHECKSUMS.sha256
Проверка копии
Любая копия сверяется своим же манифестом. Это единственный режим скрипта,
которому не нужен root: его запускают там, где лежит копия. Утилиту
хеширования (sha256, sha256sum или shasum) скрипт выбирает по тому, что
есть на машине.
sh vstackos.config-backup.sh --verify <каталог-копии>
# verified NNN files ... mismatched 0 -> копия целая (код 0)
# MISMATCH ./30-config/etc/rc.conf -> копия битая (код 2)
Манифест покрывает собранный материал. Отчётные файлы самого прогона в него намеренно не входят.
Шаг 4. Повторить на каждом узле
Кластер обновляется по одному узлу, и сбор тоже снимается поузлово. Имя узла стоит последним уровнем каталога, поэтому сборы разных узлов не сталкиваются ни на флэшке, ни в общем хранилище.
После обновления: сбор «после» и сравнение
ssh root@q100u001 sh -s -- \
--out /root/vstackos-config-backup/<кластер>/<дата>-after/q100u001 \
--tag after-3.2.0 < vstackos.config-backup.sh
diff -r <before>/30-config <after>/30-config | head -50
diff <before>/20-packages/pkg-versions.txt <after>/20-packages/pkg-versions.txt
В первую очередь смотрите файлы *.pkgnew и *.pkgsave в конфигурации,
пропавшие пакеты, разъехавшиеся параметры тюнинга и состав раздачи.
Тюнинг сверяйте по действующим значениям, а не по файлу:
sysctl -n <переменная>