Backup, Parte 1: Objetivo, Visão geral de técnicas e tecnologias

Backup? Eu não preciso de backup !!

Por que você precisa fazer backups? Afinal, o equipamento é muito, muito confiável, além disso, existem “nuvens” melhores do que os servidores físicos em termos de confiabilidade: se configurado corretamente, o servidor “nuvem” sobreviverá facilmente à falha do servidor físico da infraestrutura e, do ponto de vista dos usuários do serviço, haverá um pequeno salto quase imperceptível no tempo serviço. Além disso, a duplicação de informações geralmente exige pagamento por tempo "extra" do processador, carga de disco e tráfego de rede.

Um programa ideal roda rápido, não flui através da RAM, não possui furos e não existe.

Desconhecido
Como os programas ainda são escritos por desenvolvedores de proteínas e o processo de teste geralmente está ausente, a entrega de programas é extremamente rara com o uso de "melhores práticas" (que também são programas em si mesmas e, portanto, imperfeitas), os administradores de sistema geralmente precisam resolver problemas que soam breve, mas sucintamente: "retorne como estava", "traga a base de volta à operação normal", "funciona lentamente - nós retrocedemos" e também o meu favorito "não sei o que, mas conserte-o".

Além dos erros lógicos que surgem como resultado do trabalho descuidado dos desenvolvedores, ou de uma combinação de circunstâncias, bem como do conhecimento incompleto ou do mal-entendido dos pequenos recursos dos programas de construção - incluindo ligantes e sistemas, incluindo sistemas operacionais, drivers e firmware -, também existem outros erros. Por exemplo, a maioria dos desenvolvedores depende do tempo de execução, esquecendo completamente as leis físicas que ainda são impossíveis de contornar com a ajuda de programas. Isso inclui a confiabilidade infinita do subsistema de disco e de qualquer subsistema de armazenamento de dados em geral (incluindo RAM e cache do processador!), E zero tempo de processamento no processador, e a ausência de erros durante a transmissão pela rede e durante o processamento no processador e a latência da rede, que são 0. Não negligencie o prazo notório, pois se você não tiver tempo, haverá problemas mais limpos do que as nuances da rede e do disco.

Chef, tudo se foi! com base na mão de diamante k \ f

Mas e os problemas que surgem em pleno crescimento e ficam com dados valiosos? Não há nada para substituir os desenvolvedores ao vivo, e não o fato de que isso será possível no futuro próximo. Por outro lado, para provar totalmente que o programa funcionará conforme o planejado, até agora apenas alguns projetos foram bem-sucedidos e não é de todo possível obter e aplicar as evidências a outros projetos semelhantes. Além disso, essas evidências levam muito tempo e requerem habilidades e conhecimentos especiais, e isso praticamente minimiza a possibilidade de sua aplicação levar em consideração os prazos. Além disso, ainda não sabemos como tecnologia ultra rápida, barata e infinitamente confiável para armazenar, processar e transmitir informações. Tais tecnologias, se existirem, então na forma de conceitos, ou - na maioria das vezes - apenas em livros e filmes de ficção científica.
Bons artistas copiam, grandes artistas roubam.

Pablo Picasso.
As soluções mais bem-sucedidas e as coisas surpreendentemente simples geralmente acontecem onde há absolutamente incompatíveis, à primeira vista, conceitos, tecnologias, conhecimento, campos da ciência.

Por exemplo, pássaros e aviões têm asas, mas apesar da semelhança funcional - o princípio de operação em alguns modos é o mesmo, e os problemas técnicos são resolvidos de maneira semelhante: ossos ocos, uso de materiais fortes e leves etc. - os resultados são completamente diferentes, embora muito parecido As melhores amostras que observamos em nossa tecnologia também são principalmente emprestadas da natureza: compartimentos herméticos em navios e submarinos - uma analogia direta com os anélídeos; construção de matrizes de ataque e verificação da integridade dos dados - duplicação da cadeia de DNA; além de órgãos emparelhados, a independência do trabalho de vários órgãos em relação ao sistema nervoso central (função cardíaca automática) e reflexos são sistemas autônomos na Internet. Obviamente, tomar e aplicar soluções prontas "de frente" está cheio de problemas, mas quem sabe, talvez não haja outras soluções.
Se eu soubesse onde você cairia, eu colocaria canudos!

- provérbio bielorrusso
Portanto, os backups são vitais para quem deseja:

  • Ser capaz de restaurar a operação de seus sistemas com tempo de inatividade mínimo ou mesmo sem eles
  • Sinta-se livre para agir, porque em caso de erro, há sempre a possibilidade de uma reversão
  • Minimize os efeitos da corrupção intencional de dados

Aqui está um pouco de teoria
Qualquer classificação é arbitrária. A natureza não classifica. Nós classificamos, porque é mais conveniente para nós. E nós classificamos de acordo com os dados, que também usamos arbitrariamente.

- Jan Bruler
Independentemente do método de armazenamento físico, o armazenamento lógico de dados pode ser dividido em 2 maneiras de acessar esses dados: bloco e arquivo. Essa divisão foi recentemente muito embaçada, porque não existem armazenamentos lógicos puramente bloqueados, bem como puramente arquivados. No entanto, para simplificar, assumimos que são.

O armazenamento em bloco de dados implica que existe um dispositivo físico em que os dados são registrados em algumas partes fixas, blocos. O acesso aos blocos vai para um determinado endereço, cada bloco tem seu próprio endereço dentro do dispositivo.

Um backup geralmente é feito copiando blocos de dados. Para garantir a integridade dos dados no momento da cópia, a gravação de novos blocos, bem como a modificação dos existentes, é suspensa. Se fizermos uma analogia do mundo comum, o armário mais próximo é com as mesmas células numeradas.

Bloquear armazenamento de dados

O armazenamento de arquivos de dados pelo princípio de um dispositivo lógico está próximo do armazenamento em bloco e geralmente é organizado no topo. Diferenças importantes são a existência de uma hierarquia de armazenamento e nomes legíveis por humanos. A abstração é destacada na forma de um arquivo - uma área de dados nomeada, bem como um diretório - um arquivo especial no qual são armazenadas descrições e acessos a outros arquivos. Os arquivos podem ser fornecidos com metadados adicionais: hora da criação, sinalizadores de acesso etc. Eles geralmente fazem o backup dessa maneira: procuram os arquivos alterados e os copiam para outro armazenamento de arquivo com a mesma estrutura. A integridade dos dados geralmente é implementada pela ausência dos arquivos que estão sendo gravados. O backup dos metadados do arquivo é feito da mesma forma. A analogia mais próxima é a biblioteca, que possui seções com livros diferentes, além de um catálogo com nomes de livros legíveis por humanos.

Armazenamento de dados de arquivo

Recentemente, às vezes é descrita outra opção, com a qual, em princípio, o armazenamento de dados de arquivos começou e que possui os mesmos recursos arcaicos: armazenamento de dados de objetos.

Difere do armazenamento de arquivos, pois não possui mais de um aninhamento (layout plano), e os nomes dos arquivos, embora legíveis por humanos, são, no entanto, mais adequados para processamento por máquinas. Ao fazer backup, os armazenamentos de objetos costumam ser tratados como armazenamento de arquivos, mas ocasionalmente existem outras opções.
- Existem dois tipos de administradores de sistema, aqueles que não fazem backups e aqueles que já fazem.
- Na verdade, existem três tipos: há também quem verifica se os backups podem ser restaurados.

Desconhecido
Também vale a pena entender que o processo de backup de dados é realizado por programas, portanto, apresenta as mesmas desvantagens de outro programa. Para remover (não excluir!) A dependência do fator humano, bem como dos recursos - que individualmente não influenciam fortemente, mas juntos podem dar um efeito tangível - aplique o chamado regra 3-2-1. Existem muitas opções para descriptografá-lo, mas eu prefiro a seguinte interpretação: você precisa armazenar 3 conjuntos dos mesmos dados, 2 conjuntos devem ser armazenados em diferentes formatos e 1 conjunto deve ser armazenado em um armazenamento geograficamente remoto.

O formato de armazenamento deve ser entendido da seguinte maneira:

  • Se houver uma dependência do método de armazenamento físico, alteramos o método físico.
  • Se houver uma dependência do método de armazenamento lógico, alteramos o método lógico.

Para alcançar o efeito máximo da regra 3-2-1, é recomendável alterar o formato de armazenamento de ambos os modos.

Do ponto de vista da prontidão do backup para a finalidade a que se destina - restauração da operabilidade, existem backups "quentes" e "frios". Quente do frio diferem apenas em uma coisa: eles estão imediatamente prontos para o trabalho, enquanto o frio da recuperação exige algumas ações adicionais: descriptografia, extração do arquivo morto etc.

Não confunda cópias quentes e frias com cópias online e offline, o que implica isolamento físico dos dados e, de fato, são outro sinal da classificação dos métodos de backup. Portanto, uma cópia offline - não conectada diretamente ao sistema em que precisa ser restaurada - pode ser quente ou fria (em termos de prontidão para recuperação). Uma cópia on-line pode estar disponível diretamente onde precisa ser restaurada e, na maioria das vezes, é quente, mas também há cópias frias.

Além disso, não esqueça que o processo de criação de backups geralmente não termina com a criação de um único backup, e pode haver muitas cópias. Portanto, é necessário distinguir entre backups completos, ou seja, aqueles que são recuperáveis ​​independentemente de outros backups, bem como cópias diferenciais (incremental, diferencial, decremental etc.) - aqueles que não podem ser restaurados por si mesmos e exigem a restauração preliminar de um ou mais outros backups.

Backups incrementais diferenciais - uma tentativa de economizar a quantidade de espaço para armazenar backups. Portanto, apenas os dados modificados do backup anterior são gravados no backup.

Os decrementos de diferença são criados para o mesmo objetivo, mas de uma maneira um pouco diferente: é feito um backup completo, mas apenas a diferença entre a cópia nova e a cópia anterior é realmente armazenada.

Separadamente, vale a pena considerar o processo de backup sobre o armazenamento, que suporta a ausência de armazenamento duplicado. Portanto, se você escrever backups completos sobre ele, na realidade apenas a diferença entre os backups será registrada; no entanto, o processo de restauração de backups será semelhante ao de uma cópia completa e completamente transparente.

Quis custodiet ipsos custodes?

(Quem guardará os próprios vigias? - lat.)


É muito desagradável quando não há backups, mas é muito pior se o backup parece ter sido feito, mas durante a restauração acontece que não pode ser restaurado, porque:

  • A integridade dos dados de origem foi violada.
  • O armazenamento de backup está corrompido.
  • A recuperação funciona muito lentamente, você não pode usar dados parcialmente restaurados.


Um processo de backup criado corretamente deve levar em conta esses comentários, especialmente os dois primeiros.

A integridade dos dados de origem pode ser garantida de várias maneiras. Os mais usados ​​são: a) criação de instantâneos do sistema de arquivos no nível do bloco, b) congelamento do estado do sistema de arquivos, c) um dispositivo de bloco especial com armazenamento de versão, d) gravação seqüencial de arquivos ou blocos. As somas de verificação também são usadas para garantir a verificação dos dados durante a recuperação.

Os danos ao armazenamento também podem ser detectados usando somas de verificação. Um método adicional é o uso de dispositivos ou sistemas de arquivos especializados nos quais é impossível modificar dados já gravados, mas você pode adicionar novos.

Para acelerar a recuperação, a recuperação de dados é usada em vários processos de recuperação - desde que não haja "gargalo" na forma de uma rede lenta ou de um sistema de disco lento. Para contornar a situação com dados parcialmente restaurados, é possível dividir o processo de backup em subtarefas relativamente pequenas, cada uma das quais realizada separadamente. Assim, torna-se possível restaurar consistentemente o desempenho com previsão do tempo de recuperação. Esse problema geralmente está no plano organizacional (SLA); portanto, não vamos nos deter sobre isso em detalhes.

Sabe muito sobre especiarias, não quem as adiciona a cada prato, mas quem nunca acrescenta algo supérfluo.

-B. Sinyavsky


A prática em relação ao software usado pelos administradores de sistema pode variar, mas os princípios gerais ainda são os mesmos, de uma maneira ou de outra, em particular:

  • Soluções prontas são altamente recomendadas.
  • Os programas devem funcionar previsivelmente, ou seja, Não deve haver recursos ou gargalos não documentados.
  • A configuração de cada programa deve ser simples o suficiente para que você não precise ler o manual ou as dicas sempre.
  • A solução deve ser universal, se possível. servidores em suas especificações de hardware podem variar muito, muito.


Os seguintes programas comuns estão disponíveis para remover backups de dispositivos de bloco:

  • dd, familiar aos veteranos em administração de sistemas, programas similares também se aplicam aqui (o mesmo dd_rescue, por exemplo).
  • Utilitários (utilitários) integrados em alguns sistemas de arquivos que criam um dump do sistema de arquivos.
  • Utilidades onívoras; por exemplo, partclone.
  • Decisões próprias, geralmente proprietárias; por exemplo, NortonGhost e posterior.


Para sistemas de arquivos, a tarefa de backup é parcialmente resolvida usando os métodos aplicáveis ​​aos dispositivos de bloco; no entanto, o problema pode ser resolvido com mais eficiência, usando, por exemplo:

  • Rsync, um programa e protocolo universal para sincronizar o estado dos sistemas de arquivos.
  • Ferramentas de arquivamento incorporadas (ZFS).
  • Ferramentas de arquivamento de terceiros; o representante mais popular é o alcatrão. Há outros, por exemplo, que substituem o alcatrão pelo foco nos sistemas modernos.

Separadamente, vale a pena mencionar o software de consistência dos dados ao criar backups. As opções mais usadas são:

  • Montando o sistema de arquivos no modo somente leitura (somente leitura) ou congelando o sistema de arquivos (congelar) - o método é limitado.
  • Criando capturas instantâneas do estado de um sistema de arquivos ou dispositivo de bloco (LVM, ZFS).
  • O uso de ferramentas de terceiros para organizar conversões, mesmo nos casos em que os parágrafos anteriores não podem ser fornecidos por qualquer motivo (programas como hotcopy).
  • A técnica copy-on-change (CopyOnWrite), no entanto, é mais frequentemente associada ao FS usado (BTRFS, ZFS).


Portanto, para um servidor pequeno, você precisa fornecer um esquema de backup que atenda aos seguintes requisitos:

  • Fácil de usar - nenhuma etapa adicional especial é necessária ao trabalhar, etapas mínimas para criar e restaurar cópias.
  • Universal - funciona em servidores grandes e pequenos; isso é importante ao aumentar o número de servidores ou dimensionar.
  • Ele é instalado pelo gerenciador de pacotes ou em um ou dois comandos do tipo "baixar e descompactar".
  • Estável - usa um formato de armazenamento padrão ou estabelecido há muito tempo.
  • Rápido no trabalho.

Os candidatos daqueles que mais ou menos atendem aos requisitos:

  • rdiff-backup
  • rsnapshot
  • arrotar
  • duplicati
  • duplicidade
  • deja dup
  • dar
  • zbackup
  • restic
  • borgbackup

Cama procrusteana

Uma máquina virtual (baseada no XenServer) com as seguintes características será usada como uma bancada de teste:

  • 4 núcleos 2,5 GHz,
  • 16 GB de RAM
  • Armazenamento híbrido de 50 GB (armazenamento com armazenamento em cache em SSDs a 20% do tamanho do disco virtual) como um disco virtual separado sem particionamento,
  • Canal de Internet de 200 Mbps.

Quase a mesma máquina será usada como servidor de destino de backup, apenas com um disco rígido de 500 GB.

Sistema operacional - Centos 7 x64: o detalhamento é padrão; uma partição adicional será usada como fonte de dados.

Vamos usar um site wordpress como fonte de dados, com arquivos de mídia de 40 GB, um banco de dados mysql. Como os servidores virtuais variam muito em características, bem como para melhor reprodutibilidade, há

resultados de teste do servidor usando o sysbench.
sysbench --threads = 4 --time = 30 --cpu-max-prime = execução de 20.000 cpu
sysbench 1.1.0-18a9f86 (usando LuaJIT 2.1.0-beta3 incluído)
Executando o teste com as seguintes opções:
Número de threads: 4
Inicializando o gerador de números aleatórios a partir da hora atual

Limite de números primos: 20.000

Inicializando threads de trabalho ...

Tópicos iniciados!

Velocidade da CPU:
eventos por segundo: 836.69

Rendimento:
eventos / s (eps): 836.6908
tempo decorrido: 30.0039s
número total de eventos: 25104

Latência (ms):
min: 2,38
avg: 4.78
máx: 22,39
Percentil 95: 10,46
soma: 119923.64

Segura a justiça:
eventos (avg / stddev): 6276.0000 / 13.91
tempo de execução (avg / stddev): 29.9809 / 0.01

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = leitura da memória executada
sysbench 1.1.0-18a9f86 (usando LuaJIT 2.1.0-beta3 incluído)
Executando o teste com as seguintes opções:
Número de threads: 4
Inicializando o gerador de números aleatórios a partir da hora atual

Executando o teste de velocidade da memória com as seguintes opções:
tamanho do bloco: 1KiB
tamanho total: 102400MiB
operação: leitura
escopo: global

Inicializando threads de trabalho ...

Tópicos iniciados!

Total de operações: 50900446 (1696677,10 por segundo)

49707,47 MiB transferido (1656,91 MiB / s)

Rendimento:
eventos / s (eps): 1696677.1017
tempo decorrido: 30.0001s
número total de eventos: 50900446

Latência (ms):
min: 0.00
avg: 0.00
máx: 24,01
Percentil 95: 0,00
soma: 39106.74

Segura a justiça:
eventos (avg / stddev): 12725111.5000 / 137775.15
tempo de execução (avg / stddev): 9.7767 / 0.10

sysbench --threads = 4 --time = 30 --memory-block-size = 1K --memory-scope = global --memory-total-size = 100G --memory-oper = gravação de execução de memória
sysbench 1.1.0-18a9f86 (usando LuaJIT 2.1.0-beta3 incluído)
Executando o teste com as seguintes opções:
Número de threads: 4
Inicializando o gerador de números aleatórios a partir da hora atual

Executando o teste de velocidade da memória com as seguintes opções:
tamanho do bloco: 1KiB
tamanho total: 102400MiB
operação: gravação
escopo: global

Inicializando threads de trabalho ...

Tópicos iniciados!

Total de operações: 35910413 (1197008,62 por segundo)

35068,76 MiB transferido (1168,95 MiB / s)

Rendimento:
eventos / s (eps): 1197008.6179
tempo decorrido: 30.0001s
número total de eventos: 35910413

Latência (ms):
min: 0.00
avg: 0.00
máx: 16,90
Percentil 95: 0,00
soma: 43604.83

Segura a justiça:
eventos (avg / stddev): 8977603.2500 / 233905.84
tempo de execução (avg / stddev): 10.9012 / 0.41

sysbench --threads = 4 --file-test-mode = rndrw --time = 60 --file-size-block = 4K --file-total-size = 1G fileio run
sysbench 1.1.0-18a9f86 (usando LuaJIT 2.1.0-beta3 incluído)
Executando o teste com as seguintes opções:
Número de threads: 4
Inicializando o gerador de números aleatórios a partir da hora atual

Sinalizadores abertos de arquivo extra: (nenhum)
128 arquivos, 8MiB cada
Tamanho total do arquivo de 1GiB
Tamanho do bloco 4KiB
Número de pedidos de E / S: 0
Relação de leitura / gravação para teste IO aleatório combinado: 1,50
FSYNC periódico ativado, chamando fsync () a cada 100 solicitações.
Chamando fsync () no final do teste, Ativado.
Usando o modo de E / S síncrona
Fazendo teste r / w aleatório
Inicializando threads de trabalho ...

Tópicos iniciados!

Rendimento:
leitura: IOPS = 3868,21 15,11 MiB / s (15,84 MB / s)
gravação: IOPS = 2578,83 10,07 MiB / s (10,56 MB / s)
fsync: IOPS = 8226,98

Latência (ms):
min: 0.00
avg: 0,27
max: 18.01
Percentil 95: 1,08
soma: 238469.45

Esta nota começa grande



: Finnix

Source: https://habr.com/ru/post/pt449282/


All Articles