Tengo un HP Microserver con Ubuntu 10.04 LTS. Es un servidor de baja potencia con 5 bahías de unidades internas. Lo uso para hacer una copia de seguridad de mis servidores remotos, VPS y computadoras portátiles locales a través de la red. Quiero obtener el mejor rendimiento de los discos, pero no sé si está configurado de manera óptima, así que estoy buscando algunos consejos.
Mi servidor ejecuta rsnapshot varias veces al día para respaldar hosts remotos. La parte de copia de seguridad incremental real lleva muy poco tiempo. El tiempo significativo se dedica a hacer cosas como: -
/bin/cp -al /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1
Que toma alrededor de 2 horas. Me doy cuenta de que hay un billón de pequeños archivos allí.
$ sudo du -hs hourly.1
659G hourly.1
Además, cuando rsnapshot elimina una copia de seguridad anterior, esto puede llevar mucho tiempo: -
/bin/rm -rf /srv/rsnapshot/daily.6/
Lo cual toma alrededor de media hora.
Mis preguntas son las siguientes, la configuración del servidor y algunas estadísticas de E / S se detallan a continuación. Por supuesto, puedo proporcionar más información de depuración si es necesario: -
¿Cómo puedo identificar dónde están los cuellos de botella?
¿Estoy llegando al límite de lo que es capaz (IO wise) con esta caja?
¿Hay algún ajuste de rendimiento que pueda hacer?
¿Debo usar un nivel RAID diferente?
¿Tendría sentido intercambiar dos de los discos RAID internos (la mitad de cada espejo) con dos 'otras mitades del otro espejo' en la matriz externa?
Nota: de alguna manera no estoy dispuesto a hacer cosas como compilar mi propio núcleo. Idealmente, me gustaría seguir con 10.04 LTS, a menos que haya algo de magia en versiones posteriores que haga que todo esto funcione mucho más rápido.
Internamente, el servidor tiene un disco de arranque SATA de 1x160GB y discos de 4x2TB: -
Disk /dev/sde: 160.0 GB, 160041885696 bytes
Disk /dev/sdf: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdh: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdi: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdg: 2000.4 GB, 2000398934016 bytes
Los cuatro discos internos de 2 TB están en una configuración de software MD RAID10: -
md0 : active raid10 sdg1[3] sdh1[0] sdi1[2] sdf1[1]
3907023872 blocks 64K chunks 2 near-copies [4/4] [UUUU]
Además, tengo una caja de unidad externa EDGE10 que está conectada a través de una tarjeta PCI-E eSATA y contiene cuatro unidades más de 500 GB:
Disk /dev/sda: 500.1 GB, 500107862016 bytes
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
Disk /dev/sdd: 500.1 GB, 500107862016 bytes
Esto también se configura como una matriz MD RAID10
md1 : active raid10 sdb1[1] sda1[0] sdd1[3] sdc1[2]
976767872 blocks 64K chunks 2 near-copies [4/4] [UUUU]
md0 y md1 se combinan para hacer un gran LVM. Nota: Hace poco agregué la matriz externa, por lo que está bastante en blanco, no creo que haya ningún bloque en este momento.
Esto se presenta como un volumen LVM: -
--- Logical volume ---
LV Name /dev/data/data
VG Name data
LV UUID amZCgU-sQLi-R363-dUFx-Bcdf-iwlt-ZNnDp8
LV Write Access read/write
LV Status available
# open 1
LV Size 4.54 TiB
Current LE 1190134
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 512
Block device 251:0
Formateado como EXT4 y montado como / srv: -
/dev/mapper/data-data on /srv type ext4 (rw)
Hay mucho espacio libre.
/dev/mapper/data-data
4.5T 2.2T 2.1T 51% /srv
Otra información que puede ser útil: -
$ uname -a
Linux ubuntuserver 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux
.
00:11.0 SATA controller: ATI Technologies Inc SB700/SB800 SATA Controller [AHCI mode] (rev 40)
02:00.0 RAID bus controller: Silicon Image, Inc. SiI 3132 Serial ATA Raid II Controller (rev 01)
Al hacer el comando cp durante rsnapshot, veo lo siguiente en iostat: -
avg-cpu: %user %nice %system %iowait %steal %idle
0.55 0.00 5.47 66.14 0.00 27.85
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.00 0.10 0.00 0.80 0.00 8.00 0.00 0.00 0.00 0.00
sdf 0.00 407.50 0.00 66.80 0.00 3790.40 56.74 124.86 1524.88 13.55 90.50
sdh 0.00 406.90 0.00 66.90 0.00 3790.40 56.66 92.89 1230.52 13.21 88.40
sdi 0.00 407.80 5.50 70.20 44.00 3824.00 51.10 113.83 1333.84 12.34 93.40
sdg 0.00 406.80 6.10 71.60 48.80 3827.20 49.88 64.32 787.68 11.69 90.80
md0 0.00 0.00 11.50 1484.60 92.00 11876.80 8.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 11.50 1484.70 92.00 11877.60 8.00 5331.18 471.91 0.63 94.70
md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Básicamente, muchas escrituras, muchas IO esperan
Así que ahora la caja está inactiva, he suspendido todos los trabajos.
avg-cpu: %user %nice %system %iowait %steal %idle
0.00 0.00 0.00 0.00 0.00 100.00
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdc 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdd 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sde 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdf 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdh 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdi 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
sdg 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
dm-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
¡Parece color de rosa!
$ sudo hdparm -T -t /dev/sd[a-i]
/dev/sda:
Timing cached reads: 2532 MB in 2.00 seconds = 1265.95 MB/sec
Timing buffered disk reads: 270 MB in 3.02 seconds = 89.53 MB/sec
/dev/sdb:
Timing cached reads: 2516 MB in 2.00 seconds = 1258.07 MB/sec
Timing buffered disk reads: 264 MB in 3.02 seconds = 87.37 MB/sec
/dev/sdc:
Timing cached reads: 2442 MB in 2.00 seconds = 1220.80 MB/sec
Timing buffered disk reads: 272 MB in 3.00 seconds = 90.60 MB/sec
/dev/sdd:
Timing cached reads: 2520 MB in 2.00 seconds = 1259.64 MB/sec
Timing buffered disk reads: 272 MB in 3.02 seconds = 90.07 MB/sec
/dev/sde:
Timing cached reads: 2524 MB in 2.00 seconds = 1261.48 MB/sec
Timing buffered disk reads: 306 MB in 3.01 seconds = 101.56 MB/sec
/dev/sdf:
Timing cached reads: 2366 MB in 2.00 seconds = 1183.28 MB/sec
Timing buffered disk reads: 388 MB in 3.01 seconds = 128.88 MB/sec
/dev/sdg:
Timing cached reads: 2536 MB in 2.00 seconds = 1267.52 MB/sec
Timing buffered disk reads: 400 MB in 3.00 seconds = 133.12 MB/sec
/dev/sdh:
Timing cached reads: 2538 MB in 2.00 seconds = 1269.08 MB/sec
Timing buffered disk reads: 426 MB in 3.00 seconds = 141.90 MB/sec
/dev/sdi:
Timing cached reads: 2538 MB in 2.00 seconds = 1268.57 MB/sec
Timing buffered disk reads: 402 MB in 3.01 seconds = 133.69 MB/sec
bonnie++
en cada matriz por separado para que tenga puntos de referencia de velocidad básicos para ellos. No tengo mucha experiencia con LVM, así que no estoy seguro de que desacoplarlos sea una opción ahora.