Pular para o conteúdo principal

Backup da configuração do nó

Antes de atualizar ou reinstalar um nó, faça uma cópia da sua configuração e do seu estado. O script vstackos.config-backup.sh faz isso em uma única execução, em poucos segundos, e não altera nada no nó.

O script é fornecido pelo suporte técnico da vStack mediante solicitação. Ele não está incluído na distribuição do release.

Isto não é um backup de dados. Os dados dos pools, os discos das VMs e os snapshots ZFS não entram na coleta. O script coleta a configuração do nó, ou seja, aquilo a partir do qual o nó é reconstruído ou devolvido ao estado anterior.

Por que uma coleta separada se a própria atualização faz uma cópia​

Antes de atualizar, o vStack.update.sh salva /etc, /usr/local/etc, vstack-env.conf e o perfil de inicialização: /boot/loader.conf, /boot/loader.conf.local e /boot/device.hints. Após a atualização, ele restaura as contas, o ssh, vários arquivos de sistema e esses três arquivos de inicialização. Isso está descrito em detalhes no passo 3 da página "Atualização do nó para a 3.2".

Essa cópia tem dois pontos fracos. Ela fica armazenada em /var/backups no disco de sistema do nó e se perde junto com ele em uma reinstalação. Além disso, ela não cobre parte do estado do nó:

Não coberto pela cópia da atualizaçãoO que isso arrisca
configuração e banco de dados da camada de clusternão há de onde restaurar a participação do nó no cluster e a distribuição dos serviços
particionamento dos discos, espelho do disco de sistema, partições EFInão há de onde reproduzir o disco de inicialização em uma reinstalação
composição da exportação de discos (LUNs, targets, iniciadores)em algumas versões, o arquivo de composição é zerado quando os serviços param, e a composição se perde com ele
descrições das VMs do nónão há de onde restaurar a configuração das máquinas
lista de pacotes e prioridades dos repositóriosnão há de onde reproduzir o mesmo build em uma reversão

Quando executar​

Antes de parar a camada de cluster e exportar os pools. Depois que eles param, os pools não ficam montados, e não há mais de onde obter a composição da exportação. O script percebe isso e avisa, mas não consegue capturar a composição.

Você precisa de privilégios de root no nó e de 256 MB de espaço livre no diretório de saída. Uma coleta geralmente ocupa 5–8 MB. Não é necessária janela de manutenção: o script apenas lê e grava no seu próprio diretório.

Cada nó tem a sua própria coleta. Não misture coletas de nós diferentes. O identificador do nó, o vstack-env.conf e o banco de dados da camada de cluster são específicos de cada nó e, se você os misturar, o cluster quebra.

Passo 1. Execução no nó​

sh vstackos.config-backup.sh --tag "3.1.0 -> 3.2.0"

O mesmo sem copiar o script para o nó:

ssh root@q100u001 sh -s -- --tag "3.1.0 -> 3.2.0" < vstackos.config-backup.sh

A coleta vai para /root/vstackos-config-backup/<cluster>/<date-UTC>/<node>/; o diretório é criado com permissões 700. Dentro, ela é dividida em seções por tema: identidade do nó, pacotes, configuração, armazenamento, discos, cluster, exportação, VMs, rede, runtime.

O script determina o nome do cluster sozinho e o imprime na inicialização. Primeiro ele pega o prefixo do nome do nó no formato <cluster>u<NNN> (para q100u001 é q100), depois o cluster_id do vstack-env.conf e, como último recurso, o nome completo do nó. Se o nome sair errado, defina o diretório com a opção --out.

OpçãoQuando você precisa dela
--dry-runmostrar o plano de coleta e não gravar nada
--tag TEXTum rótulo no relatório: versão de destino, número do chamado
-o, --out DIRum diretório diferente, por exemplo para uma coleta "depois" repetida
--copy-to DIRduplicar imediatamente a coleta em uma mídia montada e verificar a cópia pelas somas de verificação. A opção pode ser especificada várias vezes
--tarempacotar adicionalmente a coleta em vstackos-config-backup-<node>-<date>.tar.gz ao lado do diretório
--verify DIRverificar uma cópia pronta pelo seu manifesto e sair
--no-secretsnão colocar master.passwd, spwd.db e as chaves ssh privadas do nó na cópia
--with-logsadicionar o final dos arquivos de /var/log

Códigos de saída: 0 — a coleta está limpa, 2 — coletado, mas há avisos, 1 — o script não iniciou.

Passo 2. Leia o relatório da coleta​

cat <out>/00-summary/SUMMARY.txt # node profile, collection size, check results
cat <out>/00-summary/checks.txt # PASS/FAIL for critical artifacts
cat <out>/00-summary/warnings.txt # what was not collected

FAIL no banco de dados da camada de cluster, no vstack-env.conf, no particionamento dos discos ou nas descrições das VMs significa pare. Não inicie a atualização até descobrir por que o artefato não foi capturado.

Preste atenção especial ao aviso de que a composição da exportação salva está vazia enquanto os subsistemas estão ativos em runtime. Ele significa que o arquivo de composição já foi zerado, e a única cópia da exportação é o dump de runtime dentro da coleta.

Passo 3. Coloque a coleta em três lugares​

Por padrão, a coleta fica armazenada no disco de sistema, justamente o disco que a atualização sobrescreve e que se perde em uma reinstalação. Essa única cópia não é suficiente.

#OndeComoQuem faz
1no nódiretório de saídascript
2segunda mídia: o pendrive de inicialização do nó, outro pool, um compartilhamento de rede montado--copy-to <mount point>; o script copia e verifica pelas somas de verificaçãoscript
3fora do nó: a estação de trabalho do administradorum fluxo tar, veja abaixoadministrador

Ao final da execução, o script imprime as três linhas marcadas com [done] ou [NOT done]. A terceira é sempre NOT done, porque somente o administrador pode levar a coleta para fora do nó.

Pendrive​

Gravar a imagem de instalação com dd apaga tudo o que havia na mídia. Por isso, coloque a coleta nela depois de gravar a imagem.

gpart show da0 # find the media partition
mount -t msdosfs /dev/da0s1 /mnt # or -t ufs /dev/da0p2 for the memstick image
sh vstackos.config-backup.sh --copy-to /mnt
umount /mnt

A mídia deve diferenciar maiúsculas de minúsculas nos nomes de arquivos. O nó tem arquivos cujos nomes diferem apenas em maiúsculas e minúsculas. Um pendrive FAT, um disco Windows e o volume padrão do macOS tratam esses nomes como um único arquivo, e uma cópia ali perde silenciosamente um arquivo de cada par. O script verifica a mídia antes de copiar e se recusa a gravar em uma que não diferencia maiúsculas de minúsculas. No macOS e no Windows, armazene a coleta como arquivo compactado (--tar ou o fluxo tar abaixo) e descompacte-a onde maiúsculas e minúsculas são diferenciadas.

Levar para fora do nó: um fluxo tar, não scp -r​

A coleta contém cerca de mil arquivos pequenos. O scp -r os transfere um a um e, em um link com latência, isso se estende por horas. Um fluxo tar resolve em segundos.

D=/root/vstackos-config-backup/<cluster>/<date>

# the receiver is case-sensitive: straight into a directory
ssh root@q100u001 "tar czf - -C $D q100u001" | tar xzf -

# macOS or Windows: store as an archive, without unpacking
ssh root@q100u001 "tar czf - -C $D q100u001" > vstackos-config-backup-q100u001-<date>.tar.gz

Layout do armazenamento fora do nó​

O mais conveniente é repetir o layout do nó; assim a coleta é transferida por simples cópia:

<storage>/<cluster>/<date>/vstackos-config-backup-<node>-<date>.tar.gz
CHECKSUMS.sha256

Verificar uma cópia​

Qualquer cópia é verificada pelo seu próprio manifesto. Este é o único modo do script que não precisa de root: execute-o onde a cópia está armazenada. O script escolhe o utilitário de hash (sha256, sha256sum ou shasum) conforme o que estiver disponível na máquina.

sh vstackos.config-backup.sh --verify <copy-dir>
# verified NNN files ... mismatched 0 -> the copy is intact (code 0)
# MISMATCH ./30-config/etc/rc.conf -> the copy is corrupted (code 2)

O manifesto cobre o material coletado. Os arquivos de relatório da própria execução intencionalmente não estão incluídos nele.

Passo 4. Repita em cada nó​

O cluster é atualizado um nó de cada vez, e a coleta também é feita nó a nó. O nome do nó é o último nível de diretório, então as coletas de nós diferentes não colidem nem no pendrive nem no armazenamento compartilhado.

Após a atualização: a coleta "depois" e a comparação​

ssh root@q100u001 sh -s -- \
--out /root/vstackos-config-backup/<cluster>/<date>-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

Antes de tudo, observe os arquivos *.pkgnew e *.pkgsave na configuração, pacotes ausentes, parâmetros de ajuste divergentes e a composição da exportação.

Compare o ajuste pelos valores efetivos, não pelo arquivo:

sysctl -n <variable>

Relacionado​