ฉันจะปรับปรุงประสิทธิภาพดิสก์เซิร์ฟเวอร์ของฉันได้อย่างไร


10

ฉันมี HP Microserver ที่ใช้งาน Ubuntu 10.04 LTS มันเป็นเซิร์ฟเวอร์พลังงานต่ำที่มีช่องไดรฟ์ภายใน 5 ช่อง ฉันใช้มันเพื่อสำรองข้อมูลเซิร์ฟเวอร์ระยะไกล VPS และแล็ปท็อปท้องถิ่นผ่านเครือข่าย ฉันต้องการได้ประสิทธิภาพที่ดีที่สุดจากดิสก์ แต่ฉันไม่รู้ว่าเป็นการตั้งค่าอย่างเหมาะสมหรือไม่ดังนั้นฉันกำลังมองหาคำแนะนำ

เซิร์ฟเวอร์ของฉันรัน rsnapshot วันละหลายครั้งเพื่อสำรองโฮสต์ระยะไกล ส่วนสำรองที่เพิ่มขึ้นจริงใช้เวลาน้อยมาก เวลาสำคัญใช้เวลาทำสิ่งต่าง ๆ เช่น: -

/bin/cp -al /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1

ซึ่งใช้เวลาประมาณ 2 ชั่วโมง ฉันรู้ว่ามีไฟล์เล็ก ๆ มากมายอยู่ในนั้น

$ sudo du -hs hourly.1
659G    hourly.1

นอกจากนี้เมื่อ rsnapshot ลบข้อมูลสำรองเก่าซึ่งอาจใช้เวลานาน: -

/bin/rm -rf /srv/rsnapshot/daily.6/

ซึ่งใช้เวลาประมาณครึ่งชั่วโมง

คำถามของฉันมีดังนี้การกำหนดค่าเซิร์ฟเวอร์และสถิติ IO บางอย่างมีรายละเอียดด้านล่าง แน่นอนฉันสามารถให้ข้อมูลการแก้ปัญหาเพิ่มเติมถ้าจำเป็น: -

ฉันจะระบุตำแหน่งของคอขวดได้อย่างไร

ฉันถึงขีด จำกัด ของความสามารถ (IO ฉลาด) พร้อมกล่องนี้หรือไม่?

การแสดงใดที่ฉันสามารถทำได้

ฉันควรใช้ระดับ RAID อื่นหรือไม่

มันจะเหมาะสมไหมที่จะสลับสองดิสก์ RAID ภายใน (ครึ่งหนึ่งของแต่ละมิรเรอร์) กับ 'อีกครึ่งหนึ่งของอีกมิเรอร์' ในอาร์เรย์ภายนอก

หมายเหตุ: ฉันค่อนข้างไม่เอนเอียงที่จะทำสิ่งต่าง ๆ เช่นการรวบรวมเคอร์เนลของฉันเอง โดยหลักการแล้วฉันต้องการติดกับ 10.04 LTS ยกเว้นว่าจะมีเวทย์มนตร์บางอย่างในรุ่นที่ใหม่กว่าซึ่งทำให้การทำงานทั้งหมดเร็วขึ้นมาก

ภายในเซิร์ฟเวอร์นั้นมีดิสก์สำหรับบูต 1x160GB SATA และดิสก์ 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

ดิสก์ 2TB ภายในสี่ตัวอยู่ในการตั้งค่าซอฟต์แวร์ MD RAID10: -

md0 : active raid10 sdg1[3] sdh1[0] sdi1[2] sdf1[1]
      3907023872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

นอกจากนี้ฉันยังมีกล่องไดรฟ์ภายนอก EDGE10 ซึ่งเชื่อมต่อผ่านการ์ด PCI-E eSATA และมีไดรฟ์อีกสี่ 500GB: -

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

นี่คือการตั้งค่าเช่นเดียวกับอาร์เรย์ MD RAID10

md1 : active raid10 sdb1[1] sda1[0] sdd1[3] sdc1[2]
      976767872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

md0 และ md1 ถูกรวมเข้าด้วยกันเพื่อสร้างหนึ่ง LVM ที่ยิ่งใหญ่ หมายเหตุ: ฉันเพิ่งเพิ่มอาร์เรย์ภายนอกเมื่อเร็ว ๆ นี้ดังนั้นจึงค่อนข้างว่างเปล่าฉันไม่คิดว่าจะมีบล็อกใด ๆ อยู่ในขณะนี้

สิ่งนี้ถูกนำเสนอในรูปแบบปริมาณ 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

ซึ่งจัดรูปแบบเป็น EXT4 และติดตั้งเป็น / srv: -

/dev/mapper/data-data on /srv type ext4 (rw)

มีพื้นที่ว่างมากมาย

/dev/mapper/data-data
                      4.5T  2.2T  2.1T  51% /srv

ข้อมูลอื่น ๆ ที่อาจเป็นประโยชน์: -

$ 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)

เมื่อทำคำสั่ง cp ระหว่าง rsnapshot ฉันเห็นสิ่งต่อไปนี้ใน 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

โดยพื้นฐานแล้วมีจำนวนมากเขียนรอ IO มากมาย

ดังนั้นตอนนี้กล่องไม่ได้ใช้งานฉันได้หยุดงานทั้งหมด

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

ดูเหมือนลูกพีช!

$ 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++ในแต่ละอาร์เรย์แยกกันเพื่อให้คุณมีเกณฑ์มาตรฐานความเร็วพื้นฐานสำหรับพวกเขา ฉันไม่ค่อยมีประสบการณ์กับ LVM มากนักดังนั้นฉันไม่แน่ใจว่าการแยกพวกมันเป็นตัวเลือกในขณะนี้
Oli

อาร์เรย์ภายนอกไม่ใช่ปัญหา ไม่มีบล็อคอยู่เลย มันคือประสิทธิภาพของดิสก์ภายในที่ฉันหวังว่าจะได้รับเสียง
popey

คำตอบ:


3

น่าเสียดายที่แคชแถบจะใช้กับ RAID5 และ 6 เท่านั้นไม่เท่ากับ RAID 0/1/10

ประสิทธิภาพการทำงานของไดรฟ์แต่ละตัวของคุณ (ตามhdparm) ดูดี - พวกมันทั้งหมดทำงานได้อย่างที่คาดไว้สำหรับไดรฟ์ของคลาสนั้น

คำแนะนำของฉัน:

  1. ตรวจสอบว่า AHCI เปิดใช้งานใน BIOS และไดรฟ์ที่ติดตั้งภายในไม่ได้ใช้โหมด IDE ดั้งเดิม มีไบออสที่แฮ็กสำหรับ MicroServer ที่เปิดใช้งาน AHCI สำหรับพอร์ต eSATA ด้วย (ดูลิงค์นี้สำหรับข้อมูลเพิ่มเติม) - อาจคุ้มค่าที่จะตรวจสอบไดรฟ์ในกล่องหุ้มภายนอกแม้ว่าพวกเขาจะยังถูก จำกัด ด้วย ตัวคูณพอร์ต
  2. เปิดใช้งาน NCQ สำหรับไดรฟ์ทั้งหมดและดูว่ามีความแตกต่างหรือไม่ (อาจเป็นได้)
  3. ตรวจสอบให้แน่ใจว่าการตั้งค่าระบบไฟล์นั้นได้รับการปรับให้เหมาะสมที่สุด คุณสามารถปิดการใช้งานการเขียนอุปสรรคแต่อาจมีความเสี่ยงเกินไป
  4. ตรวจสอบว่าคุณเห็นประโยชน์ใด ๆ จากการสลับกำหนดการ I / O (noop อาจช่วยได้ที่นี่)
  5. ปรับบัฟเฟอร์การอ่านล่วงหน้าสำหรับทั้งอุปกรณ์ md และ LVM: blockdev --setra <size> /dev/md1ตัวอย่าง (โดยที่<size>มีเซกเตอร์ 512 ไบต์) ที่จะช่วยให้อ่าน

อีกสองสิ่งที่สามารถส่งผลกระทบต่อประสิทธิภาพการทำงานคือการจัดเรียงพาร์ติชันและพารามิเตอร์การสร้างระบบไฟล์ (stride ฯลฯ ) แต่เมื่อคุณใช้เครื่องมือที่ทันสมัย


เพิ่มดิสก์ hdparm times และแก้ไข fstab (และประกอบใหม่) เพื่อใช้ noatime และ nodiratime จะทิ้งไว้ 24 ชั่วโมงเช่นนี้
popey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.