Перейти к основному содержимому

Снятие конфигурации узла

Перед обновлением или переустановкой узла снимите копию его конфигурации и состояния. Это делает скрипт 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 <переменная>

Смежное​