Ho un microserver HP con Ubuntu 10.04 LTS. È un server a basso consumo con 5 alloggiamenti per unità interne. Lo uso per eseguire il backup dei miei server remoti, VPS e laptop locali sulla rete. Voglio ottenere le migliori prestazioni dai dischi, ma non so se è configurato in modo ottimale, quindi sto cercando qualche consiglio.
Il mio server esegue rsnapshot più volte al giorno per eseguire il backup degli host remoti. La parte di backup incrementale effettiva richiede pochissimo tempo. Il tempo significativo è trascorso facendo cose come: -
/bin/cp -al /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1
Ci vogliono circa 2 ore. Mi rendo conto che ci sono un sacco di minuscoli file lì dentro.
$ sudo du -hs hourly.1
659G hourly.1
Anche quando rsnapshot elimina un vecchio backup ciò può richiedere molto tempo: -
/bin/rm -rf /srv/rsnapshot/daily.6/
Che dura circa mezz'ora.
Le mie domande sono le seguenti, la configurazione del server e alcune statistiche IO sono riportate di seguito. Posso ovviamente fornire ulteriori informazioni di debug se necessario: -
Come posso identificare dove si trovano i colli di bottiglia?
Sto raggiungendo i limiti di ciò che è capace (IO saggio) con questa scatola?
Ci sono delle modifiche alle prestazioni che potrei fare?
Dovrei usare un livello RAID diverso?
Avrebbe senso scambiare due dei dischi RAID interni (metà di ogni mirror) con due "altre metà dell'altro mirror" sull'array esterno?
Nota: in qualche modo non sono propenso a fare cose come compilare il mio kernel. Idealmente, mi piacerebbe attenermi a 10.04 LTS, a meno che non ci sia un po 'di magia nelle versioni successive che faccia funzionare tutto molto più velocemente.
Internamente il server ha un disco di avvio SATA 1x160GB e dischi 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
I quattro dischi interni da 2 TB sono in un'installazione software MD RAID10: -
md0 : active raid10 sdg1[3] sdh1[0] sdi1[2] sdf1[1]
3907023872 blocks 64K chunks 2 near-copies [4/4] [UUUU]
Inoltre ho un contenitore di unità EDGE10 esterno che è collegato tramite una scheda eSATA PCI-E e contiene altre quattro unità da 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
Questo è anche configurato come un array MD RAID10
md1 : active raid10 sdb1[1] sda1[0] sdd1[3] sdc1[2]
976767872 blocks 64K chunks 2 near-copies [4/4] [UUUU]
md0 e md1 sono combinati per creare un grande LVM. Nota: di recente ho aggiunto l'array esterno, quindi è praticamente vuoto, non credo che ci siano blocchi in questo momento.
Questo è presentato come volume 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
Che è formattato come EXT4 e montato come / srv: -
/dev/mapper/data-data on /srv type ext4 (rw)
C'è molto spazio libero.
/dev/mapper/data-data
4.5T 2.2T 2.1T 51% /srv
Altre informazioni che potrebbero essere utili: -
$ 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)
Quando eseguo il comando cp durante rsnapshot vedo quanto segue in 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
Quindi in pratica un sacco di scritture, molti IO aspettano.
Quindi in questo momento la scatola è inattiva, ho sospeso tutti i lavori.
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
Sembra peachy!
$ 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++
su ciascun array separatamente in modo da avere benchmark di velocità di base per loro. Non ho molta esperienza con LVM, quindi non sono sicuro che il loro disaccoppiamento sia un'opzione ora.