Olá pessoal!
Neste artigo, falaremos sobre como automatizamos a tarefa de expandir o espaço em disco em um de nossos servidores. E o que é difícil em uma tarefa tão simples que eu tive que automatizar - você pergunta? Nada se você não usar montagens em cascata mescladas. Eu sinto que há mais perguntas!? Bem, então, vamos embaixo do gato.
Primeiro, vou explicar por que usamos a montagem integrada em cascata.
Temos um sistema que precisa de armazenamento para arquivos pequenos (digitalizações de documentos, etc.). O tamanho médio do arquivo é de 200kb a 1 megabyte, os dados são estáticos, não mudam. Existem bilhões de arquivos e o número está crescendo todos os dias. Uma vez, quando o volume já era superior a 6 TB, percebemos que os problemas começariam em breve, um dos quais era o tempo de backup e recuperação. Decidimos dividir os dados em discos, e o UnionFS foi chamado para nos ajudar com isso.
O algoritmo foi determinado da seguinte forma: os dados são gravados no disco com mais de 2 TB, quando termina adicionamos um novo disco à máquina virtual, marcamos, adicionamos ao UnionFS, transferimos o antigo para o ReadOnly, removemos uma cópia dele, escrevemos em fita, removemos do backup online.
Como você já entendeu, esse algoritmo é bastante exigente à atenção do administrador - qualquer movimento e armazenamento desajeitados não estão disponíveis. Portanto, decidimos excluir completamente o fator humano e lembramos que possuímos o ZABBIX, que pode lidar muito bem com isso se adicionarmos um pouco de mágica do PowerShell e Bash ao algoritmo.
Agora, sobre como isso é feito.
No Zabbix, um gatilho para espaço livre é configurado e um botão para o modo manual é feito:

Quando o gatilho é acionado, uma tarefa é formada no servidor-robô sheduler no qual todos os nossos scripts de automação estão localizados:
Powershell.exe "Enable-ScheduledTask \PROD_TASKS\Add_HDD_OS0226”
No horário marcado, um script é iniciado no servidor que:
Adiciona o disco à VM desejada:
(ele escolhe o volume mais livre) $vm = Get-VM -Name $vmName New-HardDisk -VM $vm -CapacityGB $newHDDCapacity -Datastore $datastoreName –ThinProvisioned
Procura detalhes de acesso ao servidor:
OFFTopUtilizamos um repositório personalizado de detalhes de acesso baseado no TeamPass, para que o script encontre o servidor desejado no sistema e receba seus detalhes automaticamente. Isso é feito porque todos os meses alteramos automaticamente todas as senhas, mas este é o tópico de um artigo separado
#Generate TeamPass API request string $vmTPReq = " TeamPass" #Send request to TeamPass $vmCreds = Invoke-WebRequest($vmTPReq) -UseBasicParsing | ConvertFrom-Json #Convert credentials $credential = New-Object System.Management.Automation.PSCredential($vmCreds.login,(ConvertTo-SecureString $vmCreds.pw -asPlainText -Force))
Vem em SSH:
#Create partition & FS, mount disk to directory, edit fstab...etc. New-SSHSession -ComputerName $vmCreds.url -Credential $credential -Verbose -AcceptKey:$true $results = Invoke-SSHCommand -SessionId 0 -Command "/mnt/autodoit.sh" Remove-SSHSession -Index 0 -Verbose
Marca e adiciona ao suporte do UnionFS:
Infelizmente, no momento da gravação, não resolvemos vários problemas relacionados à criação automática de tarefas no VEEAM para arquivar o disco antigo e gravá-lo em fita, portanto, isso ainda é feito manualmente. Definitivamente, atualizaremos o script assim que resolvermos alguns problemas.
Postado por Vitaliy
Rosman (
PBCVIT ).
Um pedaço de código para colar matrizes foi honestamente emprestado, os links para o autor foram salvos no código.
Não há queixas contra o UnionFS, ele trabalha de forma estável há mais de dois anos.
A questão de por que o armazenamento é organizado em geral é geralmente retórica, apenas aceite-a como é.
Observe que diferentes tipos de mapeamento de unidades devem ser usados para diferentes sistemas. portanto, tenha cuidado e a força virá com você.