Otimizando o RAID 5 para uso do BackupPC (pequenas leituras aleatórias)

3

Estou executando um servidor BackupPC com um hardware RAID 5 para o armazenamento principal dos backups. Como a máquina foi criada com um orçamento pequeno, o controlador é um 3Ware 9500S-4LP para a porta PCI e as unidades são de tipo SATA lento de 200 GB.

No entanto, mesmo com este hardware, vejo um desempenho muito pior do que o esperado. Os clientes e o servidor de backup usam o rsync como um transporte em uma rede Gigabit, que nunca está nem perto da saturação. Fazer backup de uma instalação normal do Linux de cerca de 5 GB leva mais de três horas.

Então, eu monitorei o servidor usando o monitor de processo atop . Ele mostrou que nem o uso do processador nem da memória são críticos, mas os acessos de leitura ao RAID são o gargalo.

Quando criei o servidor, escolhi o RAID 5 porque, de acordo com essa visão geral tabular das características do RAID , ele parecia ser o melhor compromisso entre o desempenho de leitura e a eficiência de espaço em um controlador de 4 portas.

A propósito, embora este seja um servidor de backup, usar o rsync significa que há muito mais leituras do que escritas aqui - cerca de 1.000 vezes mais, atualmente. Suponho que mover e vincular arquivos antigos na hierarquia de backups antigos do BackupPC também contribui muito para isso.

Então, como você otimizaria o desempenho nessa máquina? Eu tenho os seguintes ajustes:

  • Usando um transporte diferente com o BackupPC (o tar é uma alternativa)
  • Alterando o sistema de arquivos da matriz de ext4 (noatime) para outra coisa
  • Alterando o nível do RAID (de preferência não, devido à perda de dados)
  • Recrie a matriz com um tamanho de faixa diferente (de preferência não, devido à perda de dados)
  • adicionando mais memória para usar como um cache de buffer
  • adicionando um segundo controlador e mais drives (sim, eu tenho aqueles ao redor)
  • Altere o controlador (de preferência não, devido a restrições financeiras)
  • Alterar todas as unidades (de preferência não, devido a restrições financeiras)
por jstarek 29.04.2012 / 19:06

4 respostas

5

Aí vem um pequeno e aleatório primer IO: drives de disco de 7200 RPM fazem cerca de 100 IOPS. Unidades de 15k RPM dobram isso, cerca de 200 IOPS. Com uma matriz RAID-5, a melhor IOPS alcançável possível é o número de unidades de dados de dados que geram tempo de desempenho de uma única unidade; como você tem 3 unidades de dados, o melhor valor sustentado possível que você terá, sempre, é 300 IOPS.

Use iostat -mx 5 enquanto seu backup estiver em execução. Se você vir um número de operações de leitura ou gravação (terceira e quarta colunas) no intervalo de 300, você está basicamente excedendo o limite de sua configuração.

Nota: a maioria das unidades SSD modernas atinge 20.000 IOPS. Um par de SSDs no RAID-1 pode envergonhar um rack cheio de ferrugem. O SSD muda tudo. Ao enfrentar um problema de IOPS, 99% do tempo a solução é chamada de "SSD".

Se você não está maximizando a saída da matriz RAID, há algumas coisas que você pode fazer:

  • Melhore a profundidade da fila. A profundidade da fila do kernel padrão é boa para unidades antigas antigas com caches pequenos, mas não para unidades modernas ou arrays RAID:

    echo 512 > / sys / block / sda / fila / nr_requests

  • experimente agendadores de I / O diferentes. CFQ (agendador padrão para o kernel moderno) muitas vezes é péssimo com as operações do servidor:

    echo 'noop' > / sys / block / sda / queue / scheduler

  • experimente o RAID-10. O RAID-10 não precisa recolher as gravações juntas e é melhor do que o RAID-5 em operações de thread único.

  • Como alternativa, tente executar o máximo de threads que houver unidades de dados. Pode melhorar o desempenho geral.
por 30.04.2012 / 12:51
1

Primeiro, tente comparar o desempenho do ataque localmente, para ver se é realmente o problema do ataque. Você pode até usar:

dd if=/dev/zero of=/your/raid/zerofile bs=16M

e depois de ~ 10 segundos

killall -SIGUSR1 dd

em outro terminal para ver a velocidade de gravação local. Se a velocidade for boa o suficiente, tente algum outro método de rede (tente primeiro com o netcat (verifique a man page para o primeiro comando, alguns distos não precisam do sinalizador '-p')

pc 1: nc -l -p 12345 > /your/raid/file
pc 2: cat /some/big/file | nc ip.of.pc.1 12345

Eu tive problemas com velocidades baixas com o rsync sobre o ssh (12-15MBps no link gigabit, mas no pc relativamente lento).

Depois de saber se o problema está no disco ou na velocidade do rsync / ssh, você pode continuar a depuração.

    
por 29.04.2012 / 19:16
1

O BackupPC é um programa muito intensivo de E / S e pode levar a muitas e muitas pesquisas de disco. Com hardware de baixo custo, há muito o que você pode fazer, mas tente o seguinte:

Otimizando o próprio BackupPC

  • O número máximo de backups e operações administrativas simultâneas desempenha um grande fator no desempenho do BackupPC. Definir que muito alto e seu hardware low-end (ou até mesmo um caro ...) grita para parar. Defina isso muito baixo e você não está maximizando seus recursos de hardware. Com hardware de commodity, tente qualquer coisa entre 2 a 6 backups simultâneos, veja o que funciona para você.

  • Se não for necessário, desative a compactação do conjunto do BackupPC.

  • Mesmo que a biblioteca rsync do BackupPC Perl não utilize completamente o rsync v3.x, verifique se você está usando o rsync v3.x.

Otimizando o servidor

  • Certifique-se de escolher um elevador de E / S correto. Com o RAID e muita concorrência, o padrão cfq pode ser uma escolha ruim; a maior parte do tempo, o controlador RAID sabe as coisas melhor e noop pode ser bom. Com certas cargas de trabalho e controladores RAID baratos, deadline também pode ser bom.

  • Eu sei que você não quer mudar o sistema de arquivos, mas achei XFS excelente com o BackupPC. (Caveat emptor: o hardware no meu caso é muito bom)

  • O BackupPC o ama de volta se você der RAM suficiente. Quanta RAM seu servidor possui? Quanto mais melhor; se o servidor puder manter a maior parte da estrutura de diretório na memória, as operações de leitura que o BackupPC faz são muito, muito mais rápidas, se não precisarem atingir o disco físico.

Se eu fosse você, primeiro atualizaria a RAM do servidor e também verificaria as configurações do BackupPC. Se isso não ajudasse o suficiente, eu mexeria nas configurações do sistema de arquivos e do RAID.

    
por 30.04.2012 / 13:34
0

Então você suspeita que o desempenho de leitura aleatória é o problema. A solução para isso seria obter armazenamento com melhores IOPS (SSD ou HDD com maior velocidade de rotação ou RAID com mais eixos). Mais RAM (cache) também pode ajudar se o conjunto de trabalho (cache inode) couber na memória.

Uma coisa seria verificar se esse é o caso. Dê uma olhada na saída dstat e na saída iotop. Verifique também se o sistema de arquivos para backuppc está montado como relatime ou noatime, para que todo acesso a arquivos não se traduza em uma gravação.

    
por 30.04.2012 / 10:58