Verificação de desempenho ao configurar o raid0 no Amazon EBS
Quero verificar se o EBS é formado o mais rápido possível.
Parece que há uma teoria de que isso é bem verdade se for multi ou grande no teste.
Também consideraremos como migrar para o existente (começando pela separação de diretórios como logs binários). )
Guia Oficial do Usuário (EBSPerformance)
O próprio EBS tem uma configuração redundante, então parece que o RAID 0 é bom.
O uso de discos de instância (discos locais, discos efêmeros) para construir RAID0 com RAID0 EBS melhorou significativamente o desempenho de I/O de disco com dois discos do que um para instâncias grandes ou superiores, o que equivale ao RAID10 (faixas espelhadas)
Exemplo de comando de boot quando você quer fazer raid0 em um disco efêmero (o disco que desaparece quando parado)
[shell] EC2-run-instances ami-e965ba80 --region us-East-1 --key id_rsa --group SG-a4866fcc --placement-group test --type de instância cc2.8xlarge -b "/dev/sdb=ephemeral0" - b "/dev/sdc=ephemeral1" -b "/dev/sdd=ephemeral2" "/dev/sdf=ephemeral3" [/shell] - Adicione dois discos EBS em Grande, inicie e faça login
[shell] # df -h Tamanho do Sistema de Arquivos Usado Disponibilidade Use% Montado em /dev/xvde1 9.9G 867M 8.5G 10% /nenhum 3.7G 0 3.7G 0% /dev/shm # ls -l /dev/xv* brw-rw---- 1 disco raiz 202, 65 Mar 21 02:15 /dev/xvde1 brw-rw---- 1 disco raiz 202, 80 Mar 21 02:15 /dev/xvdf brw-rw---- 1 disco raiz 202, 96 Mar 21 02:15 /dev/xvdg find /dev -type b -print [/shell] Eu tentei, mas o acima é o único com nome que soa assim.
・Formando um RAID com MDADM
Como usar o MDADM
[shell] # yum install mdadm Instalado: mdadm.x86_64 0:3.2.5-4.el6 # /sbin/mdadm --create /dev/md0 --level=0 -c256 --raid-devices=2 /dev/xvdf /dev/xvdg mdadm: Padrão para a versão 1.2 metadados mdadm: array /dev/md0 iniciado. # echo 'DEVICE /dev/xvdf /dev/xvdg' > /etc/mdadm.conf # mdadm --detail --scan >> /etc/mdadm.conf # cat /etc/mdadm.conf DEVICE /dev/xvdf /dev/xvdg ARRAY /dev/md0 metadados=1.2 name=aws-cent63-template:0 UUID=f1d24aee:f788f00e:66d66f4d:ac63fa92 # ls -l /dev/md0 brw-rw---- 1 root disk 9, 0 Mar 21 02:39 /dev/md0 [/shell]
Vi que o XFS parece ser rápido, mas olhando os resultados desse bancário, pode não mudar tanto assim.
Também havia informações de que o XFS é realmente lento ao usar ACL.
(Ouvi dizer que SSD e iodrive são formatados rapidamente a 4kb com xfs.)
Decidi tentar normalmente/com o mesmo sistema de arquivos.
[shell] # montar /dev/xvde1 ligado / tipo ext4 (rw) nenhum em /proc tipo proc (rw) nenhum em /sys tipo sysfs (rw) nenhum em /dev/pts tipo devpts (rw,gid=5,mode=620) nenhum em /dev/shm tipo tmpfs (rw) nenhum em /proc/sys/fs/binfmt_misc tipo binfmt_misc (rw) # mkfs.ext4 /dev/md0 # mkdir /data # montar /dev/md0 /data # df -h Tamanho do sistema de arquivos usado disponível Uso de % montado em /dev/xvde1 9. 9G 859M 8.000 6G 9% / nenhum 3.7G 0 3.7G 0% /dev/shm /dev/md0 20G 172M 19G 1% /data # montar /dev/xvde1 ligado / tipo ext4 (rw) nenhum em /proc tipo proc (rw) nenhum em /sys tipo sysfs (rw) nenhum em /dev/pts tipo devpts (rw,gid=5,mode=620) nenhum em /dev/shm tipo tmpfs (rw) nenhum em /proc/sys/fs/binfmt_misc tipo binfmt_misc (rw) /dev/md0 em /data type ext4 (rw) [/shell] ・Benchmark
Referência do Banco FIO
Baixar no FIO
[shell] # WGET http://pkgs.repoforge.org/fio/fio-2.0.9-1.el6.rf.x86\_64.rpm # yum install libaio # rpm -ivh fio-2.0.9-1.el6.rf.x86_64.rpm [/shell] Leituras aleatórias 4K são medidas 5 vezes com 16 multiplexes.
[shell] # vi randread4k16.fio # cat randread4k16.fio [randread4k] readwrite=randread blocksize=4k size=100m directory=/data direct=1 loops=5 numjobs=16 # fio -group_reporting randread4k16.fio omitido leitura : io=512000KB, bw=3200.6KB/s, iops=800 , runt=159974msec omitido
Run status group 0 (todos os jobs): READ: io=8000.0MB, aggrb=51001KB/s, minb=3187KB/s, maxb=3209KB/s, mint=159540mseg, maxt=160623mseg Estatísticas do disco (leitura/gravação): md0: ios=2047724/11, merge=0/0, ticks=0/0, in_queue=0, util=0. 00%, aggrios=1024000/4, aggrmerge=0/1, aggrticks=1203285/363, aggrin_queue=1202916, aggrutil=87.91% xvdf: ios=1024000/9, merge=0/2, ticks=1177359/726, in_queue=1177346, util=82,95% xvdg: ios=1024000/0, merge=0/0, ticks=1229211/0, in_queue=1228486, util=87,91% [/shell] Luz aleatória 4K é medida 5 vezes com 16 multiplexes.
[shell] # vi randwrite4k16.fio [randwrite4k] readwrite=randwrite blocksize=4k size=100m directory=/data direct=1 loops=5 numjobs=16 # fio -group_reporting randwrite4k16.fio omitido write: io=512000KB, bw=1997.4KB/s, iops=499 , runt=256336msec omitido
Run status group 0 (todos os jobs): WRITE: io=8000.0MB, aggrb=31902KB/s, minb=1993KB/s, maxb=1998KB/s, mint=256247mseg, maxt=256786mseg Estatísticas do disco (leitura/escrita): md0: ios=0/2061004, merge=0/0, ticks=0/0, in_queue=0, util=0. 00%, aggrios=0/1024965, aggrmerge=0/5568, aggrticks=0/2042634, aggrin_queue=2042035, aggrutil=99..00%, aggrutil=99.00%, aggrutil=99.0 58% xvdf: ios=0/1025035, merge=0/5770, ticks=0/1733675, in_queue=1733059, util=97,23% xvdg: ios=0/1024895, merge=0/5366, ticks=0/2351593, in_queue=2351011, util=99,58% [/shell] Tente medir a sequência
[shell] # vi seqread4k16.fio [seqread4k] readwrite=read blocksize=4k size=diretório 100m=/data direct=1 loops=5 numjobs=16 # fio -group_reporting seqread4k16.fio omitido leitura : io=512000KB, bw=3215.9KB/s, iops=803 , runt=159213msec omitido
Run status group 0 (todos os jobs): READ: io=8000.0MB, aggrb=51306KB/s, minb=3206KB/s, maxb=3216KB/s, mint=159165mseg, maxt=159669mseg Estatísticas do disco (leitura/escrita): md0: ios=2046486/24, merge=0/0, ticks=0/0, in_queue=0, util=0. 00%, aggrios=1024000/5, aggrmerge=0/6, aggrticks=1202445/327, aggrin_queue=1202016, aggrutil=87.41% xvdf: ios=1024000/11, merge=0/13, ticks=1183413/655, in_queue=1183332, util=84,11% xvdg: ios=1024000/0, merge=0/0, ticks=1221478/0, in_queue=1220701, util=87,41% # vi seqwrite4k16.fio [seqwrite4k] readwrite=write blocksize=4k size=diretório 100m=/data direct=1 loops=5 numjobs=16 # fio -group_reporting seqwrite4k16. fio omitido write: io=512000KB, bw=1795.7KB/s, iops=448, runt=285131msec omitido Executar grupo de status 0 (todos os jobs): WRITE: io=8000.0MB, aggrb=28708KB/s, minb=1794KB/s, maxb=1797KB/s, mint=284902mseg, maxt=285354mseg Estatísticas do disco (leitura/escrita): md0: ios=0/2048172, merge=0/0, ticks=0/0, in_queue=0, util=0/0 .00%, aggrios=0/, ticks=0/0 .00%, aggrios=0/, ticks=0 1024126/0 , aggrmerge=0/5, aggrticks=0/2263010, aggrin_queue=2262748, aggrutil=96,45% xvdf: ios=0/1024125, merge=0/11, ticks=0/2035946, in_queue=2035696, util=91,73% xvdg: ios=0/1024128, merge=0/0, ticks=0/2490074, in_queue=2489800, util=96,45% [/shell] Meça a diferença mesmo quando não é raid0
[shell] # vi randread4k16_noraid.fio [randread4k] readwrite=randread blocksize=4k size=100m directory=/ direct=1 loops=5 numjobs=16 # fio -group_reporting randread4k16_noraid.fio ~略~ read : io=512000KB, bw=3194.4KB/s, iops=798 , runt=160281msec ~略~ Run status group 0 (all jobs): READ: io=8000.0MB, aggrb=50913KB/s, minb=3182KB/s, maxb=3200KB/s, mint=159959msec, maxt=160899msec Disk stats (read/write): xvde1: ios=2047511/20, merge=0/5, ticks=2427396/202, in_queue=2426053, util=100.00% # vi randwrite4k16_noraid.fio [randwrite4k] readwrite=randwrite blocksize=4k size=100m directory=/ direct=1 loops=5 numjobs=16 # fio -group_reporting randwrite4k16_noraid.fio ~略~ write: io=512000KB, bw=1374.4KB/s, iops=343 , runt=372625msec ~略~ Run status group 0 (all jobs): WRITE: io=8000.0MB, aggrb=21969KB/s, minb=1373KB/s, maxb=1375KB/s, mint=372306msec, maxt=372874msec Disk stats (read/write): xvde1: ios=1/2049664, merge=0/14975, ticks=7/5995555, in_queue=5995341, util=100.00% # vi seqread4k16_noraid.fio [seqread4k] readwrite=read blocksize=4k size=100m directory=/ direct=1 loops=5 numjobs=16 # fio -group_reporting seqread4k16_noraid.fio ~略~ read : io=512000KB, bw=3124.3KB/s, iops=781 , runt=163882msec ~略~ Run status group 0 (all jobs): READ: io=8000.0MB, aggrb=49945KB/s, minb=3121KB/s, maxb=3129KB/s, mint=163601msec, maxt=164020msec Disk stats (read/write): xvde1: ios=2046743/23, merge=0/3, ticks=2503841/252, in_queue=2502405, util=100.00% # vi seqwrite4k16_noraid.fio [seqwrite4k] readwrite=write blocksize=4k size=100m directory=/ direct=1 loops=5 numjobs=16 # fio -group_reporting seqwrite4k16_noraid.fio ~略~ write: io=512000KB, bw=1438.6KB/s, iops=359 , runt=355910msec ~略~ Run status group 0 (all jobs): WRITE: io=8000.0MB, aggrb=23015KB/s, minb=1438KB/s, maxb=1439KB/s, mint=355585msec, maxt=355936msec Disk stats (read/write): xvde1: ios=15/2047985, merge=0/21, ticks=65/5674427, in_queue=5674447, util=100.00% [/shell] ★比較結果
| tipo de leitura/escrita, | singledisk(IOPS), | Raid0disk(IOPS), | singledisk (largura de banda), | Raid0disk (largura de banda) |
| Leads aleatórios | 798 | 800 | 3194,4KB/s | 3200,6KB/s |
| Luz Aleatória | 343 | 499 | 1374,4KB/s | 1997,4KB/s |
| Derivações Sequenciais | 781 | 803 | 3124,3KB/s | 3215,9KB/s |
| Luz Sequencial | 359 | 448 | 1438,6KB/s | 1795,7KB/s |
*Este é o resultado nesse ambiente, então recomendamos que você experimente no ambiente que você está realmente usando.
・Método de migração proposto
O banco de dados na porta 3307 do servidor, que está sincronizado para backup, não o banco de dados de produção, é o alvo de migração por enquanto.
Como o ambiente de teste também é misto, parece que, se a IO for distribuída, será bastante eficaz contra a latência.
- Adicionar um disco ao servidor de destino, defini-lo em raid0 e formatá-lo.
- Parar o escravo (pule para my.cnf se needed_slave
- Parar o mysql2 (3307)
- Cópia do diretório de dados
- Ligações Simbólicas
- Iniciar o mysql2
- Iniciar o escravo (se necessário)
- Espere a sincronização
- Verifique o grau de atraso
Acho que a forma de despejar e restaurar com imagens foi especial, então acho que seria bom não precisar de frio.