Skip to main content

Configurando vários discos de dados

Você pode configurar discos de dados adicionais e usá-los para hospedar dados do MySQL e repositórios.

Quem pode usar esse recurso?

GitHub Enterprise Server

Observação

A capacidade de configurar e usar vários discos de dados está em versão prévia pública e está sujeita a alterações. Adoraríamos ouvir seus comentários sobre a prévia. Você pode compartilhá-lo com sua equipe de sucesso do cliente ou deixar um comentário no post de discussão da comunidade. Nossa opção preferida é compartilhar seus comentários com sua equipe de sucesso do cliente.

Por que introduzir mais discos na instância do GHES?

  • Distribuição de recursos aprimorada:
    • Serviços diferentes têm requisitos de disco exclusivos.
    • MySQL é principalmente sensível à latência e a IOPS.
    • Alguns recursos (como repositórios) não se beneficiam tanto do armazenamento de blocos caro.
  • Limites maximizados da VM:
    • Um único disco geralmente não é capaz de maximizar as limitações de uma instância.
    • Do ponto de vista do custo, geralmente não é viável ou vale a pena executar tudo no armazenamento mais caro ou mais rápido.
  • Separação mais clara entre a alocação de recursos e os serviços:
    • Os recursos podem ser alocados de forma direcionada, impedindo que serviços críticos fiquem famintos.
  • Escala:
    • Os clientes em topologias autônomas e de alta disponibilidade podem escalar a infraestrutura segundo a necessidade.

Constraints

  • Os discos de vários dados só têm suporte em topologias autônomas e de alta disponibilidade (HA).
  • Depois que vários discos de dados são configurados em uma implantação, essa alteração não pode ser desfeita para essa implantação.
  • Configurar discos de dados múltiplos e migrar dados normalmente requer algum tempo de inatividade.
    • Você pode minimizar isso configurando uma réplica com discos de vários dados, replicando dados do primário e, em seguida, fazendo failover para a réplica.
    • Se você estiver adicionando discos de dados múltiplos diretamente no primário, espere uma indisponibilidade muito mais longa.
  • Durante a visualização pública, discos de dados múltiplos devem ser usados somente em ambientes não-produtivos.
  • Não é recomendável migrar MySQL e repositórios para o mesmo disco.
  • Atualmente, somente MySQL e repositórios podem ser migrados para discos adicionais.

Recomendações de recursos

Se você adicionar discos tão rápidos ou mais rápidos que os atuais, verá um desempenho aprimorado. Os dispositivos de armazenamento normalmente são medidos por IOPS (operações de entrada/saída por segundo), taxa de transferência e latência. Para MySQL, é recomendável usar um disco com latência menor e IOPS maior do que o disco de dados existente. Para repositórios, escolha um disco com IOPS e taxa de transferência maiores do que o disco de dados atual.

Em configurações de alta disponibilidade, é melhor usar discos multidados no servidor primário e em todas as réplicas. Misturar configurações, onde o principal possui discos de dados múltiplos, mas a réplica não, não é recomendado.

Configurando vários discos de dados e caminhos de dados

Pré-requisitos

  • Recomendamos fazer um backup recente de seus dados antes de começar.
  • Crie um ambiente de teste para experimentar o recurso.
    • Durante a visualização pública, recomendamos usar apenas o recurso em um ambiente de teste.
    • Depois que o recurso ficar disponível em geral, recomendamos testar o recurso em um ambiente de não produção antes de usá-lo em produção.

Instruções

  1. Você pode executar uma nova instalação do GHES ou usar uma instância de GHES existente. Ele deve ter o disco de dados configurado em /data/user.

  2. Depois de /data/user configurado, adicione dispositivos de armazenamento de blocos adicionais à instância.

    Atualmente, ghe-storage-find escolhe o primeiro armazenamento em bloco para configurar /data/user com base na ordem alfabética do caminho de armazenamento de blocos. Isso acontece na primeira inicialização do dispositivo GHES.

    Para ter mais controle sobre para qual disco é usado /data/user, é melhor concluir o processo de inicialização com apenas um disco anexado inicialmente.

  3. Inicialize a configuração de vários discos usando os novos dispositivos de armazenamento em bloco. Para inicializar o suporte a vários discos, execute ghe-storage-multi-disk init. Em cada reinicialização, o ghe-multi-disk.service remontará automaticamente os discos de dados existentes nos caminhos corretos.

    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
    
    Shell
    /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
    

Observe isso /dev/nvme2n1 e /dev/nvme3n1 são apenas caminhos de exemplo. Eles podem não corresponder aos caminhos em seu sistema. Da mesma forma, db e git são exemplos. Você pode escolher nomes diferentes.

  1. Alterne para o modo de manutenção.

    Shell
    gh es maintenance set --enabled true
    
  2. Migre os caminhos de dados desejados.

    Para migrar o MySQL:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-mysql db
    

    Para migrar repositórios:

    Shell
    /usr/local/share/enterprise/ghe-storage-migrate-repositories git
    
  3. Sair do modo de manutenção.

    Shell
    gh es maintenance set --enabled false
    
  4. Teste a instância por um período de tempo para garantir que tudo funcione conforme o esperado.

  5.        **Somente após testes suficientes**, remover `/data/user/mysql-backup` e `/data/user/repositories-backup`.
    

    Manter essas pastas durante os testes permite reverter em uma emergência. Após testes suficientes, você deve remover essas pastas de backup para liberar espaço.

Diretrizes para configurações de alta disponibilidade

As diretrizes a seguir ajudam a reduzir o tempo de inatividade em topologias de alta disponibilidade (HA). Se você estiver usando uma topologia autônoma, não teremos diretrizes adicionais semelhantes no momento.

Para topologias de HA, a melhor abordagem é levantar uma nova réplica com vários discos de dados já configurados, replicar dados do servidor primário e, em seguida, promover a réplica a servidor primário. Não é recomendável migrar dados para discos adicionais no primário atual, pois esse processo pode levar a um tempo de inatividade significativo.

  1. Configure uma nova réplica de HA com discos melhores.

    Para planejar a migração de dados, use du -sh /data/user/mysql e du -sh /data/user/repositories no primário para calcular os requisitos de espaço em disco para a nova réplica.

  2. Configure vários discos na nova réplica de HA.

  3. Permitir que o primário de HA seja replicado para a réplica.

  4. Siga a sequência de failover conforme documentado em Iniciar failover do appliance réplica.

Embora o processo de replicação possa levar muito tempo, a vantagem é que ele é executado em segundo plano, portanto, a interrupção real do modo de manutenção é drasticamente reduzida.

Exemplo: configurando dois discos adicionais

Este exemplo demonstra os comandos e saídas necessários para inicialização de disco e migração de dados. Especificamente, /data/user/mysql é migrado para /data/multi-disk/db/mysql, e /data/user/repositories é migrado para /data/multi-disk/git/repositories.

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk status
Checking system status...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk info
Dumping disk status and information...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme2n1 db
Starting initialization sequence for /dev/nvme2n1 at /data/multi-disk/db...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk init /dev/nvme3n1 git
Starting initialization sequence for /dev/nvme3n1 at /data/multi-disk/git...

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-mysql db
Start mysql migration to /data/multi-disk/db...
Running checks..
Error: maintenance mode must be enabled before being able to proceed.
ERROR: Last Command: return 1 LINE: 36 ghe-storage-migrate-mysql
Script exited with exit code: 1

admin@ghe-test-primary:~$ ghe-maintenance -s

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-mysql db
Start repository migration to /data/multi-disk/db...
Success: /data/user/mysql moved to /data/multi-disk/db/mysql
Script exited with exit code: 0

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-migrate-repositories git
Start repository migration to /data/multi-disk/git...
Success: /data/user/repositories moved to /data/multi-disk/git
Script exited with exit code: 0

admin@ghe-test-primary:~$ ghe-maintenance -u

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk status
Checking system status...
/data/user/mysql -> /data/multi-disk/db/mysql is correctly symlinked.
Repositories migration was detected...
/data/user/repositories -> /data/multi-disk/git/repositories is correctly symlinked.

admin@ghe-test-primary:~$ /usr/local/share/enterprise/ghe-storage-multi-disk info
Dumping disk status and information...
# Multi disk configuration /data/user/multi-disk-config:
DISK_DB="lvm"
DISK_GIT="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"

admin@ghe-test-primary:~$ ls /var/log/multi-disk/
ghe-storage-init-db.log  ghe-storage-init-git.log  ghe-storage-migrate-mysql.log  ghe-storage-migrate-repositories.log

Verificações de higiene

Ambos /usr/local/share/enterprise/ghe-storage-multi-disk status e /usr/local/share/enterprise/ghe-storage-multi-disk info são úteis para verificar sua configuração.

Para exibir a configuração atual de vários discos, use:

$ cat /data/user/multi-disk-config
DISK_DB="lvm"
DISK_GIT="lvm"
MYSQL_MIGRATION_PATH="/data/multi-disk/db/mysql"
REPOSITORIES_MIGRATION_PATH="/data/multi-disk/git/repositories"

Para examinar logs de vários discos, incluindo eventos de inicialização e migração de disco, execute:

$ ls -l /var/log/multi-disk/
total 56
-rw-r--r-- 1 root root  2398 Mar  3 13:22 ghe-storage-init-db.log
-rw-r--r-- 1 root root  2497 Mar  3 13:23 ghe-storage-init-git.log
-rw-r--r-- 1 root root  2201 Mar  3 13:28 ghe-storage-migrate-mysql.log
-rw-r--r-- 1 root root 37296 Mar  3 13:30 ghe-storage-migrate-repositories.log

Comandos para gerenciar vários discos

Esses comandos possibilitam adicionar vários discos e migrar serviços ou caminhos de pasta específicos para esses discos. Os caminhos de pasta originais são mantidos e permanecem estáticos. Outros serviços não sabem que algo mudou. Os caminhos das pastas estáticas são vinculados simbolicamente aos caminhos recém-migrados.

Os comandos incluem:

  • ghe-armazenamento-multi-disco
    • status
    • init
    • info
    • mount
    •       `start-services` (recomendado apenas para debug)
      
    •       `stop-services` (recomendado apenas para depuração)
      
  • ghe-storage-migrate-repositories * /data/user/repositories Migra para qualquer caminho de disco criado usando ghe-storage-multi-disk init.
  • ghe-storage-migrate-mysql * /data/user/mysql Migra para qualquer caminho de disco criado usando ghe-storage-multi-disk init.