Otimizando o sistema de arquivos ext2 para uso em dispositivos LVM + RAID? Stride, largura da listra, considerações de tamanho IO LVM

3

Estou criando um novo servidor de banco de dados e estou tentando garantir que a configuração seja a mais correta possível. O armazenamento do banco de dados é de 22 x 15,7 mil unidades Western Digital SAS em RAID10, em um gabinete SAS externo com dois controladores RAID. Inicialmente, criei apenas um único volume no array SAS, formatado com ext2. Calculei o Stride e Stripe-Width da seguinte forma:

  • chunk_size = 128 Kb
  • block_size = 4 Kb
  • total_disks = 22
  • data_disks = 11
  • stride = chunk_size / block_size = 128 Kb / 4 Kb = 32 Kb
  • stripe-width = stride * data_disks = 32 Kb * 11 = 352 Kb

Eu dei os valores Stride-Stripe-Width para mkfs.ext2 quando criei o sistema de arquivos.

Eu então tentei outra configuração, que é onde minha pergunta começa. Eu criei dois volumes no array SAS, cada um com um controlador "primário" diferente. Quando exportado para o host, usei o LVM2 para inicializá-los como Volumes Físicos, criei um Grupo de Volume e, em seguida, passei '--stripes 2' para lvcreate para distribuir os volumes. O objetivo disso era espalhar a carga de IO pelos dois controladores, para obter um desempenho mais alto.

Há uma seção na documentação de "melhores práticas" para o array SAS que declara, em referência ao tamanho do segmento (pedaço) do LUN:

When using a volume manager to collect multiple storage system LUNs into a Logical
Volume Manager (LVM) volume group (VG), the I/O stripe width is allocated across all of > the segments of all of the data drives in all of the LUNs. The adjusted formula becomes: LUN segment size = LVM I/O stripe width / (# of data drives/LUN * # of LUNs/VG)

Agora, o Grupo de volumes no array SAS tem 22 unidades, 11 das quais são unidades de dados e duas LUNs. O Grupo de Volumes no host tem dois volumes físicos (os LUNs) e ambos os LUNs acessam as mesmas unidades de dados. Então, dado um tamanho de segmento de LUN de 128 Kb, eu calcularia LVM I / O Stripe Width como

  • 128 = LVM_Stripe_Width / (11 * 2)
  • 128 * 22 = LVM_Stripe_Width
  • 2816 = LVM_Stripe_Width

ou

  • 128 = LVM_Stripe_Width / (11 * 1)
  • 128 * 11 = LVM_Stripe_Width
  • 1408 = LVM_Stripe_Width

Então isso me leva para a questão Stride-Stripe-width para mkfs.ext2: É calculado da mesma forma que na configuração inicial, ou é diferente agora por causa da camada LVM? Se tornaria

  • chunk_size = 128 Kb
  • block_size = 4 Kb
  • total_disks = 2
  • data_disks = 2
  • stride = chunk_size / block_size = 128 Kb / 4 Kb = 32 Kb
  • stripe-width = stride * data_disks = 32 Kb * 2 = 64 Kb

onde

  • total_disks = 2

vem do '--stripes 2' para lvcreate?

Obrigado,

Kendall

    
por Kendall 27.07.2011 / 19:14

1 resposta

1

Eu poderia sugerir a verificação esta resposta para idéias. Eu forneci alguns comentários sobre o alinhamento do xfs e alguém comentou sobre o ext3. Pode dar algumas pistas.

Além disso, antes de alinhar o sistema de arquivos, verifique se o volume também está alinhado ao tamanho da faixa. Isso pode ser feito dimensionando adequadamente os metadados e otimizando um tamanho de extensão. Aqui está um exemplo:

pvcreate -M2 --metadatasize 2048K --metadatacopies 2 <raw_device>
vgcreate --physicalextentsize 256M --autobackup y vg10 <pv_device>
    
por 02.12.2011 / 05:44