Ads 468x60px

แสดงบทความที่มีป้ายกำกับ RAID แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ RAID แสดงบทความทั้งหมด

วันจันทร์ที่ 10 ตุลาคม พ.ศ. 2554

เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 3

เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 3
ในตอนสุรปนี้ จะเพิ่มผลลัพธ์จากการรันคำสั่ง sysbench เพื่อทดสอบ fileio ทั้งการอ่านและเขียนไฟล์แบบ sequential, random

ก่อนการรัน sysbench เพื่อทดสอบ ต้องสร้างไฟล์ (prepare) ใน mount point ของ filesystem ที่ต้องการทดสอบ เช่นถ้า mount ไว้ที่ /mnt/lv0/ ต้อง cd เข้าไปในพาธนี้แล้วรันคำสั่ง
[root@fc10-disk ~]# cd /mnt/lv0/
[root@fc10-disk lv0]# sysbench --test=fileio prepare
Sequential Read test (seqrd) รันคำสั่ง
[root@fc10-disk ~]# sysbench --test=fileio --file-test-mode=seqrd run
Sequential Write test (seqwr) รันคำสั่ง
[root@fc10-disk ~]# sysbench --test=fileio --file-test-mode=seqwr run
Random Read test (rndrd) รันคำสั่ง
[root@fc10-disk ~]# sysbench --test=fileio --file-test-mode=rndrd run
Random Write test (rndwr) รันคำสั่ง
[root@fc10-disk ~]# sysbench --test=fileio --file-test-mode=rndwr run
ผลลัพธ์การรันคำสั่ง dd ในตอนที่ผ่านมา จะใกล้เคียงกับการรัน Sequential Write test
ตารางสรุปผลการทดสอบ

/dev/sdc1 /dev/sdd1 mdadm linear mdadm stripe LVM linear LVM stripe
xfs (blocks) 195,263,012 195,263,012 390,585,600 390,585,344 390,578,176 390,577,152
dd (MB/s) 52.00 47.10 52.70 96.50 51.80 94.80
seqrd (MB/s) 58.08 60.71 57.71 115.78 58.22 104.64
seqrw (MB/s) 43.76 38.96 46.89 85.04 47.92 84.15
rndrd (MB/s) 3.92 3.96 3.92 4.34 3.97 4.31
rndwr (MB/s) 0.61 0.69 2.88 2.08 2.91 2.08
คงไม่สรุปใดๆ ทั้งสิ้น เกี่ยวกับผลลัพธ์ที่ได้ ว่าคอนฟิก mdadm หรือ lvm เร็วกว่ากัน เพราะตัวเลขออกมาใกล้เคียงกัน อีกทั้งการทดสอบนี้ อาจไม่ตรงกับหลักการทางสถิติ เช่น ทดลองรันไม่กี่ครั้ง หรือในขณะที่รันทดสอบอาจมี process อื่นๆ ในเครื่องรันขึ้นมาทำงาน (ทั้งๆ ที่พยายามลดให้เหลือน้อยที่สุดแล้ว) และด้วยคุณสมบัติของ mdadm และ LVM ที่แตกต่างกัน ทางเลือกคงขึ้นอยู่กับลักษณะการใช้งานของแต่ละเครื่องว่าเป็นอย่างไร …
แต่…ถ้าให้เลือก ความเห็นส่วนตัว ผมเลือก LVM ครับ

เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 2

เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 2
ในตอนแรก เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 1 เราได้ทดลองใช้คำสั่ง mdadm เพื่อคอนฟิกดิสก์เป็นแบบ linear และ stripe ซึ่งให้ผลลัพธ์ความเร็วในการเขียนข้อมูลแตกต่างกัน ในตอนนี้จะลองใช้คำสั่ง LVM บ้าง เพื่อสร้างคอนฟิกแบบ linear และ stripe เพื่อเป็นการเปรียบเทียบกัน

สร้าง LVM Physical Volume และ Volume Group

ก่อนอื่นเราต้องคอนฟิกดิสก์แต่ละพารทิชั่น ทำเป็น Physical Volume และ Volume Group สุดท้ายค่อยเลือกว่าจะสร้าง Logical Volume เป็นแบบ linear หรือ stripe
[root@fc10-disk ~]# pvcreate /dev/sdc1 /dev/sdd1
  Wiping software RAID md superblock on /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
  Wiping software RAID md superblock on /dev/sdd1
  Physical volume "/dev/sdd1" successfully created
ตรวจสอบสถานะของ physical volume
[root@fc10-disk ~]# pvdisplay
  "/dev/sdc1" is a new physical volume of "186.31 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name
  PV Size               186.31 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ...
  "/dev/sdd1" is a new physical volume of "186.31 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdd1
  VG Name
  PV Size               186.31 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               ...
คอนฟิกรวมทั้งสอง physical volume สร้างเป็น volume group เดียวกัน
[root@fc10-disk ~]# vgcreate VG_1 /dev/sdc1 /dev/sdd1
  Volume group "VG_1" successfully created
ตรวจสอบสถานะของ volume group
[root@fc10-disk ~]# vgdisplay
  --- Volume group ---
  VG Name               VG_1
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               372.61 GB
  PE Size               4.00 MB
  Total PE              95388
  Alloc PE / Size       0 / 0
  Free  PE / Size       95388 / 372.61 GB
  VG UUID               ...

คำสั่ง lvcreate สร้าง logical volume แบบ linear

คอนฟิกนี้จะใช้คำสั่ง lvcreate เพื่อสร้างดิสก์สองก้อนเป็นแบบ linear ซึ่งหลักการเขียนข้อมูลจะเหมือนกันคือ ข้อมูลจะถูกเขียนลงบนตัวแรกให้เต็มก่อนแล้วค่อยเขียนตัวถัดไป
การระบุออปชั่น –extents 100%free คือให้ใช้พื้นที่ทั้งหมดของ volume group สร้างเป็น logical volume
[root@fc10-disk ~]# lvcreate --extents 100%free VG_1 --name LV_0
  Logical volume "LV_0" created
ผลลัพธ์ที่ได้จะสร้าง logical volume ชื่อ /dev/VG_1/LV_0 ขึ้นมา ซึ่งเรานำมาสร้าง filesystem แล้วมา mount ใช้งานได้
รันคำสั่ง lvdisplay ตรวจสอบสถานะของดิสก์
[root@fc10-disk ~]# lvdisplay --maps
  --- Logical volume ---
  LV Name                /dev/VG_1/LV_0
  VG Name                VG_1
  LV UUID                eOdh1C-nSw3-wLjd-fuPz-Y6HA-rNvU-nWaOfY
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                372.61 GB
  Current LE             95388
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
  --- Segments ---
  Logical extent 0 to 47693:
    Type                linear
    Physical volume     /dev/sdc1
    Physical extents    0 to 47693
  Logical extent 47694 to 95387:
    Type                linear
    Physical volume     /dev/sdd1
    Physical extents    0 to 47693
สร้าง filesystem เป็นแบบ xfs และ mount เข้ากับพาธที่สร้าง
[root@fc10-disk ~]# mkfs.xfs -f /dev/VG_1/LV_0
[root@fc10-disk ~]# mkdir /mnt/lv0
[root@fc10-disk ~]# mount /dev/VG_1/LV_0 /mnt/lv0
ดูขนาดของ filesystem ที่สร้างได้
[root@fc10-disk ~]# cd /mnt/lv0/
[root@fc10-disk lv0]# df -k .
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VG_1-LV_0
                     390578176      4256 390573920   1% /mnt/lv0
ทดสอบการเขียนไฟล์ขนาด 2 GB บนคอนฟิก “linear”
[root@fc10-disk lv0]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 38.6144 s, 51.8 MB/s
ความเร็วที่ได้จะใกล้เคียงกับการเขียนไฟล์ลงดิสก์ก้อนเดียว
ยกเลิกการ mount ดิสก์ และลบ logical volume แบบ linear
[root@fc10-disk lv0]# cd
[root@fc10-disk ~]# umount /mnt/lv0
[root@fc10-disk ~]# lvremove /dev/VG_1/LV_0
Do you really want to remove active logical volume "LV_0"? [y/n]: y
  Logical volume "LV_0" successfully removed

คำสั่ง lvcreate สร้าง logical volume แบบ stripe

คอนฟิกนี้จะใช้คำสั่ง lvcreate เพื่อสร้าง logical volume เป็นแบบ stripe เพื่อให้เวลาเขียนข้อมูลแยกการเขียนลงดิสก์ทั้งสองก้อนพร้อมๆ กัน ทำให้ความเร็วที่ได้เพิ่มขึ้น
ในที่นี้เราต้องระบุจำนวน stripe หรือจำนวนดิกส์ที่จะเขียนข้อมูลพร้อมๆ กัน ในที่นี้เรามี physical volume อยู่ 2 ก้อน ก็ระบุเป็นตัวเลข 2
[root@fc10-disk ~]# lvcreate --extents 100%free --stripes 2 VG_1 --name LV_0
  Using default stripesize 64.00 KB
  Logical volume "LV_0" created
ตรวจสอบสถานะของ logical volume แบบ stripe
[root@fc10-disk ~]# lvdisplay --maps
  --- Logical volume ---
  LV Name                /dev/VG_1/LV_0
  VG Name                VG_1
  LV UUID                JJuw2a-4C6O-4DED-jqCO-qTRF-iDw0-VPeatg
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                372.61 GB
  Current LE             95388
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     512
  Block device           253:0
  --- Segments ---
  Logical extent 0 to 95387:
    Type                striped
    Stripes             2
    Stripe size         64 KB
    Stripe 0:
      Physical volume   /dev/sdc1
      Physical extents  0 to 47693
    Stripe 1:
      Physical volume   /dev/sdd1
      Physical extents  0 to 47693
สร้าง filesystem เป็นแบบ xfs และ mount เข้ากับพาธที่สร้างไว้
[root@fc10-disk ~]# mkfs.xfs -f /dev/VG_1/LV_0
[root@fc10-disk ~]# mount /dev/VG_1/LV_0 /mnt/lv0
ดูขนาดของ filesystem ที่สร้างได้
[root@fc10-disk ~]# cd /mnt/lv0/
[root@fc10-disk lv0]# df -k .
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VG_1-LV_0
                     390577152      4640 390572512   1% /mnt/lv0
ทดสอบการเขียนไฟล์ขนาด 2 GB บนคอนฟิก “linear”
[root@fc10-disk lv0]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 21.0913 s, 94.8 MB/s
ความเร็วที่ได้ใกล้เคียงกับผลรวมของความเร็วในการเขียนข้อมูลลงดิสก์แต่ละก้อน
ยกเลิกการ mount ดิสก์ และลบ logical volume แบบ “stripe”
[root@fc10-disk lv0]# cd
[root@fc10-disk ~]# umount /mnt/lv0
[root@fc10-disk ~]# lvremove /dev/VG_1/LV_0
Do you really want to remove active logical volume "LV_0"? [y/n]: y
  Logical volume "LV_0" successfully removed

ลบ LVM Volume Group, Physical Volume

หลังจากทดสอบเรียบร้อย ถ้าต้องการลบคอนฟิก LVM ออกสามารถทำได้ดังนี้
ใช้คำสั่ง vgremove เพื่อลบ Volume Group
[root@fc10-disk ~]# vgremove /dev/VG_1
  Volume group "VG_1" successfully removed
ใช้คำสั่ง pvremove เพื่อลบ physical volume
[root@fc10-disk ~]# pvremove /dev/sdc1 /dev/sdd1
  Labels on physical volume "/dev/sdc1" successfully wiped
  Labels on physical volume "/dev/sdd1" successfully wiped

เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 1

เปรียบเทียบ RAID-0 จากคำสั่ง mdadm และ lvm ตอนที่ 1
เกิดความสงสัยขึ้นมา ขณะคอนฟิกเซิร์ฟเวอร์ที่มีดิสก์หลายๆ ก้อน เพื่อทำหน้าที่เป็น file server ว่า ระหว่างการใช้ mdadm และ lvm เพื่อรวมดิสก์แต่ละก้อนเข้าด้วยกันทำเป็น RAID-0 อย่างไหนจะเร็วกว่ากัน เลยทดสอบและนำผลลัพธ์แต่ละคอนฟิกมาเปรียบเทียบกัน
และเพื่อความครบถ้วนของการเปรียบเทียบ เลยทดสอบคอนฟิกทั้งเป็นแบบ linear และ stripe (RAID-0) จากการใช้คำสั่งทั้งสองด้วย โดยแยกเป็นสองบทความ ในตอนแรกจะใช้คำสั่ง mdadm ก่อน

หมายเหตุ
  • โดยทั่วไป คำว่า RAID-0 หมายถึงการคอนฟิกแบบ stripe
  • ข้อควรระวังการเลือกใช้คอนฟิก RAID-0 เพียงอย่างเดียว ถ้าดิสก์ก้อนใดก้อนนึงเสียไป มีโอกาสทำให้ข้อมูลบางส่วนหรือทั้งหมดเสียหายได้ โดยทั่วไปนิยมคอนฟิก RAID-0 ทับไปบนคอนฟิก RAID-1 หรือ RAID-5 เพื่อทำเป็น RAID-10, หรือ RAID-50
  • ความเสียหายของข้อมูลเมื่อดิสก์ก้อนหนึ่งเสีย ในการคอนฟิกแต่ละแบบจะไม่เหมือนกันเช่น ถ้าคอนฟิกเป็นแบบ “linear” การกู้ข้อมูลกลับคืนมาจะมีโอกาสมากกว่า เพราะข้อมูลส่วนใหญ่จะถูกเขียนลงบนดิสก์ก้อนเดียว แต่ข้อเสียของ “linear” คือความเร็วในการเขียนข้อมูลจะน้อยกว่าแบบ “stripe”

ทดสอบดิสก์แต่ละก้อน

ก่อนจะเริ่มคอนฟิก RAID-0 ขอเริ่มทดสอบดิสก์ทีละตัว เพื่อดูความเร็วคร่าวๆ ในการเขียนข้อมูล
ตัวอย่างการสร้างพาร์ทิชั่นของดิสก์แต่ละก้อน
[root@fc10-disk ~]# fdisk -l /dev/sdc
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       24321   195358401   83  Linux
[root@fc10-disk ~]# fdisk -l /dev/sdd
...
   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1               1       24321   195358401   83  Linux
สร้าง filesystem เป็นแบบ xfs ในแต่ละพาร์ทิชั่น และ mount เข้ากับพาธที่สร้าง
[root@fc10-disk ~]# mkfs.xfs -f /dev/sdc1
[root@fc10-disk ~]# mkfs.xfs -f /dev/sdd1
[root@fc10-disk ~]# mkdir /mnt/sdc1
[root@fc10-disk ~]# mkdir /mnt/sdd1
[root@fc10-disk ~]# mount /dev/sdc1 /mnt/sdc1
[root@fc10-disk ~]# mount /dev/sdd1 /mnt/sdd1
ทดสอบการเขียนไฟล์ขนาด 2 GB ในแต่ละพาร์ทิชั่น
[root@fc10-disk sdc1]# cd /mnt/sdc1/
[root@fc10-disk sdc1]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 38.4796 s, 52.0 MB/s
[root@fc10-disk sdd1]# cd /mnt/sdd1/
[root@fc10-disk sdd1]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 42.4467 s, 47.1 MB/s
ได้ความเร็วประมาณ 50 MB/s
ยกเลิกการ mount ดิสก์แต่ละก้อน
[root@fc10-disk sdd1]# cd
[root@fc10-disk ~]# umount /mnt/sdc1
[root@fc10-disk ~]# umount /mnt/sdd1

คำสั่ง mdadm สร้างดิสก์แบบ linear

คอนฟิกแรกจะใช้คำสั่ง mdadm เพื่อสร้างดิสก์เป็นแบบ “linear” ซึ่งเป็นการนำพื้นที่ดิสก์ทั้งสองก้อนมาต่อเรียงกัน เวลาเขียนข้อมูลจะเขียนบนดิสก์ตัวเดียวก่อน ถ้าก้อนแรกเต็มถึงจะเขียนดิสก์อีกก้อน
[root@fc10-disk ~]# mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.
ตรวจสอบสถานะของดิสก์
[root@fc10-disk ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Sun Jun  7 12:35:05 2009
     Raid Level : linear
     Array Size : 390716672 (372.62 GiB 400.09 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent
    Update Time : Sun Jun  7 12:35:05 2009
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Rounding : 64K
           UUID : 450c959b:c5d34b87:792b422a:65152846
         Events : 0.1
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1
สร้าง filesystem เป็นแบบ xfs และ mount เข้ากับพาธที่สร้าง
[root@fc10-disk ~]# mkfs.xfs -f /dev/md0
[root@fc10-disk ~]# mkdir /mnt/md0
[root@fc10-disk ~]# mount /dev/md0 /mnt/md0/
ดูขนาด filesystem ที่สร้างได้
[root@fc10-disk ~]# cd /mnt/md0/
[root@fc10-disk md0]# df -k .
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md0             390585600      4256 390581344   1% /mnt/md0
ทดสอบการเขียนไฟล์ขนาด 2 GB บนคอนฟิก “linear”
[root@fc10-disk md0]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 37.9349 s, 52.7 MB/s
ความเร็วที่ได้จะใกล้เคียงกับการเขียนไฟล์ลงดิสก์ก้อนเดียว
ยกเลิกการ mount ดิสก์ และปิด (stop) การใช้ดิสก์แบบ linear
[root@fc10-disk md0]# cd
[root@fc10-disk ~]# umount /mnt/md0
[root@fc10-disk ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@fc10-disk ~]# cat /proc/mdstat
Personalities : [linear]
unused devices: <none>

คำสั่ง mdadm สร้างดิสก์แบบ  stripe (RAID-0)

คอนฟิกที่สอง จะใช้คำสั่ง mdadm เพื่อคอนฟิกดิกส์สองกันเป็นแบบ stripe หรือ RAID-0 เวลาเขียนข้อมูลจะเขียนลงบนดิสก์ทั้งสองก้อนพร้อมกัน ทำให้ความเร็วเพิ่มขึ้น
หมายเหตุ การระบุออปชั่น “–level” เป็นแบบ “stripe” หรือ “raid-0″  ให้ผลเหมือนกัน
[root@fc10-disk ~]# mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: chunk size defaults to 64K
mdadm: /dev/sdc1 appears to be part of a raid array:
    level=linear devices=2 ctime=Sun Jun  7 13:28:06 2009
mdadm: /dev/sdd1 appears to be part of a raid array:
    level=linear devices=2 ctime=Sun Jun  7 13:28:06 2009
Continue creating array? y
mdadm: array /dev/md0 started.
ตรวจสอบสถานะของดิสก์
[root@fc10-disk ~]# mdadm --detail /dev/md0
/dev/md0:
        Version : 0.90
  Creation Time : Sun Jun  7 13:40:02 2009
     Raid Level : raid0
     Array Size : 390716672 (372.62 GiB 400.09 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent
    Update Time : Sun Jun  7 13:40:02 2009
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
     Chunk Size : 64K
           UUID : 1ee50769:2becc762:fb9a3596:c284b115
         Events : 0.1
    Number   Major   Minor   RaidDevice State
       0       8       33        0      active sync   /dev/sdc1
       1       8       49        1      active sync   /dev/sdd1
สร้าง filesystem เป็นแบบ xfs และ mount เข้ากับพาธที่สร้างไว้
[root@fc10-disk ~]# mkfs.xfs -f /dev/md0
[root@fc10-disk ~]# mount /dev/md0 /mnt/md0/
ดูขนาด filesystem ที่สร้างได้
[root@fc10-disk ~]# cd /mnt/md0/
[root@fc10-disk md0]# df -k .
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/md0             390585344      4640 390580704   1% /mnt/md0
ทดสอบความเร็วการเขียนข้อมูลบนดิสก์ RAID-0
[root@fc10-disk md0]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 20.7292 s, 96.5 MB/s
ความเร็วที่ได้ใกล้เคียงกับผลรวมของความเร็วในการเขียนข้อมูลลงดิสก์แต่ละก้อน
ยกเลิกการ mount ดิสก์ และปิด (stop) การใช้ดิสก์แบบ “stripe”
[root@fc10-disk md0]# cd
[root@fc10-disk ~]# umount /mnt/md0
[root@fc10-disk ~]# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
[root@fc10-disk ~]# cat /proc/mdstat
Personalities : [linear] [raid0]
unused devices: <none>

วันพุธที่ 5 ตุลาคม พ.ศ. 2554

RAID คืออะไร ?

RAID คืออะไร ?

    RAID (Redundant Array of Inexpensive Disk) คือการนำเอา Harddisk ตั้งแต่ 2 ตัวขึ้นไปมาทำงานร่วมกันเสมือนเป็น harddisk ตัวเดียวที่มีประสิทธิภาพสูงขึ้น หรือมีโอกาสที่จะสูญเสียข้อมูลน้อยลงในกรณีที่เกิดความผิดพลาดของ hardware (fault tolerance) กลุ่มของ harddisk ที่เอามาทำงานร่วมกันในเทคโนโลยี RAID จะถูกเรียกว่า disk array โดยระบบปฏิบัติการและ software จะเห็น harddisk ทั้งหมดเป็นตัวเดียว ซึ่งการทำ RAID นี้นอกจากจะเป็นการเพิ่มประสิทธิภาพของการเก็บรักษาข้อมูลแล้ว ยังเป็นการประหยัดอีกด้วย เพราะว่ายิ่ง harddisk มีความจุมากเท่าไหร่ ราคาของมันก็จะยิ่งสูงขึ้นเท่านั้น ดังนั้น สำหรับงาน ที่จำเป็นต้องใช้พื้นที่ในการเก็บข้อมูลมากๆ อย่าง Database Server ถ้าเราเลือกใช้ harddisk ความจุมากๆ เพียงตัวเดียว ในการเก็บข้อมูลหรือที่เรียกกันว่าเป็นการใช้ harddisk แบบ SLED หรือ Single Large Expensive Disk ราคาที่เราเสียไปกับ harddisk ตัวเดียวนั้น อาจจะไม่คุ้มค่าเท่ากับการใช้ harddisk ที่มีความจุต่ำกว่า (ซึ่งแน่นอนว่าราคาต้องถูกกว่าหลายเท่าด้วย) นำมาต่อเพื่อให้ทำงานร่วมกันหรือที่เรียกกันว่าเป็นการใช้ harddisk แบบ RAID

เทคโนโลยี RAID

   
ความเป็นมา ของ RAID Stripping และ Parity ระดับของ RAID RAID 1, RAID 3 , RAID 5 ส่วนประกอบของ RAID การจัดการ RAID ความเป็นมา
    คำว่า RAID อ่านออกเสียงว่า "เหรด" ในลักษณะเดียวกันกับ พาเหรด ในปี 1987 Patterson, Gibson และ Katz ซึ่งทำงานที่ University of California Berkeley ได้พิมพ์บทความเกี่ยวกับ A Case for Redundant Arrays of  Inexpensive Disks (RAID) โดยเอกสารนี้ได้บรรยายถึงชนิดของดิสก์อะเรย์ประเภทต่างๆ โดยเรียกชื่อย่อๆว่า RAID หลักการพื้นฐานของ RAID มาจากแนวคิดที่ว่า  เมื่อเอาดิสก์ที่มีความจุน้อยหลายๆตัวมารวมกัน ประสิทธิภาพที่ได้จากการใช้งานจะมากกว่าใช้ดิสก์ขนาดใหญ่เพียงตัวเดียว โดยเมื่อเอาดิสก์มารวมกันแล้วคอมพิวเตอร์จะต้องเห็นว่าเป็นดิสก์ขนาดใหญ่ตัว เดียว (เป็น Logical Drive)
       ครั้นต่อมา RAID ก็เปลี่ยนคำจำกัดความเป็น Redundant Array of independent  disks แปลไทยได้อย่างไม่สละสลวยว่า  ระบบเผื่อไว้แบบอะเรย์ของดิสก์ที่เป็นอิสระต่อกัน ฟังแล้วงงมั้ย? งงมากครับ   RAID ก็คือ RAID ฟัง แล้วง่าย แต่ไม่เข้าใจไปใหญ่ ลองนึกง่ายๆ ครับ  ถ้าเรามีฮาร์ดดิสก์เพียงตัวเดียว วันหนึ่งถ้าพังก็พังไปเลย ข้อมูลหายหมด  แต่ถ้านำฮาร์ดดิสก์หลายๆ ตัวมาต่อกัน เช่น 5 ตัว ข้อดีคือ ได้ความจุเพิ่มขึ้น แต่ถ้าตัวใดตัวหนึ่งพังก็จะเสียข้อมูลในฮาร์ดดิสก์ตัวนั้นไป  แต่จะป้องกันได้มากกว่า ถ้าหากเพิ่มฮาร์ดดิสก์เข้าไป 3 ตัว  แล้วใช้ระบบการจัดแบ่งเก็บข้อมูลในแต่ละตัว พร้อมกัน แต่ในแต่ละตัวก็มีข้อมูลที่ซ้ำกัน หรือมีการเก็บ Parity ของอีกตัวไว้ ถ้าเกิดวันใดที่ตัวหนึ่งเกิดพังไป ข้อมูลในตัวที่พังก็ยังคงมีเก็บ  "สำรองเผื่อเสีย" ไว้ การแก้ไข ก็เพียงเอาฮาร์ดดิสก์ใหม่มาเปลี่ยน แล้วค่อยๆ  ผ่องถ่ายข้อมูลที่ฮาร์ดดิสก์ตัวเก่าที่พังไปเคยฝากไว้กับฮาร์ดดิสก์ตัวอื่น ลงมาใหม่ๆ ทำให้สมบูรณ์แบบ ทั้งหมดนั้นเรียกว่าระบบ Fault Tolerance แปลเป็นไทยก็คือ "ระบบที่คงทนต่อความเสียหาย" คือ  แทนที่ว่าฮาร์ดดิสก์พังไปตัวหนึ่งก็ต้อง "Down" เซิร์ฟเวอร์   ทำ ให้ระบบต้องหยุดชะงัก เพื่อป้องกันความเสียหายดังกล่าว  จะต้องสร้างระบบให้คงทนต่อความเสียหาย ฮาร์ดดิสก์พังไปแล้วหนึ่งตัว   ระบบยังทำงานต่อไปเหมือนไม่มีอะไรเกิดขึ้น โดยวิธีการนี้ จะต้องใช้ RAID   ซึ่งเป็นหัวใจของการสร้าง "ดิสก์ที่คงทนต่อความเสียหาย"
 คำจำกัดความของ RAID คือ
 
    เทคโนโลยี ของหน่วยเก็บข้อมูลที่ใช้เพื่อปรับปรุงระบบให้มีความสามารถในการประมวลผล เกี่ยวกับการจัดเก็บข้อมูล   เทคโนโลยีดังกล่าวจะออกแบบเพื่อให้ระบบการจัดเก็บข้อมูลแบบอะเรย์มีความ เชื่อถือได้   และเพื่อใช้ข้อดีของการนำประสิทธิภาพที่เพิ่มขึ้นจากการเพิ่มฮาร์ดดิสก์เข้า ไปในระบบหลายๆ   ตัวเข้ามาใช้งาน นี่เขียนแบบวิชาการต้องแบบนั้น แต่อ่านไม่รู้เรื่องเลย    แปลง่ายๆ คือ ฮาร์ดดิสก์ที่ต่อกันเป็นสมาชิกของอะเรย์   (แบบเดียวกับทางคณิตศาสตร์ เรื่องของ อะเรย์)   แล้ว ทำอย่างไรให้ทำงานได้น่าเชื่อถือ แล้วการมีฮาร์ดดิสก์หลายๆ ตัว และให้เขียนและอ่านหลายๆ ตัว พร้อมๆ กัน  จะได้ประสิทธิภาพดีกว่าเขียนและอ่านตัวเดียว ซึ่งต้อง "รอให้การเขียนเสร็จสิ้นเป็นคราวๆ ถึงจะเริ่มเขียนใหม่ได้  ประโยชน์อีกประการของ RAID คือ "เผื่อเสีย" คือ ถ้าตัวหนึ่งเสีย   อีกสลับตัวที่สำรองไว้ขึ้นมาทำงานโดยอัตโนมัติ  เพื่อให้มั่นใจว่าระบบนั้นจะคงทนต่อความเสียหาย ระบบดำเนินการต่อไปได้   โดยไม่ต้องถูกขัดจังหวะจากการเสียเวลาซ่อมแซม พูดง่ายๆ ฝรั่งเขาว่า disk access will still continue normally with the failure transparent to the  host system คือ การใช้งานดิสก์ยังคงเกิดขึ้นอย่างปกติ ตัวที่เสีย ระบบคอมพิวเตอร์ก็จะมองผ่านไป  ปัจจุบันการนำ RAID มาใช้งานนั้น เกี่ยวกับเซิร์ฟเวอร์เป็นส่วนใหญ่   เมื่อระบบเครือข่ายถูกพัฒนาขึ้นใช้ ความสำคัญของหน่วยเก็บข้อมูล (Storage  System) ก็ ทวีความสำคัญขึ้น เพราะในเซิร์ฟเวอร์นั้น ถ้าหากว่าฮาร์ดดิสก์ชำรุด  ใช้งานไม่ได้ นอกจากจะสูญเสียข้อมูลที่เก็บไว้ในฮาร์ดดิสก์ไปทั้งหมดแล้วยังจะต้องเสีย เวลาเพื่อรอให้การซ่อมแซมแล้วเสร็จ ซึ่งหมายถึงการสูญเสียโอกาสทางธุรกิจ
   
ประโยชน์จาก RAID 

1.เอื้อประโยชน์ในการรวมเอาพื้นที่จากฮาร์ดดิสก์หลายๆ ตัวเข้ารวมกันเป็น  "ก้อน" ก้อนเดียว 
2.ใช้ประโยชน์จากการ "เข้าถึง" ของฮาร์ดดิสก์แต่ละตัว ซึ่งหมายถึง  จะแบ่งข้อมูลออกเป็นบล๊อคย่อยๆ แล้วแยกกันไปเขียน (อ่าน) ลงบนฮาร์ดดิสก์แต่ละตัว ทำให้ย่นระยะเวลาทำงาน และลดระยะเวลาคอย (Wait  State)
3. มีระบบ "เผื่อเสีย" โดยการทำ "Mirroring" หรือ Parity  การกระจายการเขียน-อ่านข้อมูล (Stripping) และพาริตี้ (Parity)
การกระจายการเขียน-อ่านข้อมูล (Stripping) และพาริตี้ (Parity) 2 กลไก  หัวใจของ RAID
 
    การนำเอาดิสก์หลายๆ ตัวมารวมกันเป็นดิสก์อะเรย์ แล้วกำหนดให้เป็น Logical  Drive เพียงหนึ่งตัว นั้นมี "Stripping" เป็นหัวใจในการทำงาน กล่าวได้ว่า Stripping เป็นหลักการพื้นฐานของ RAID คือ เมื่อมีฮาร์ดดิสก์หลายๆ  ตัวมารวมกัน การเขียนข้อมูลชุดหนึ่งๆ ลงดิสก์ เพื่อให้ได้ประสิทธิภาพดีที่สุด  ต้องมีการ "กระจาย" ข้อมูลลงไปในดิสก์ทุกตัวในอะเรย์  เรียกการกระจายเขียน-อ่านข้อมูลเหล่านี้ว่า Stripping
    กระบวนการ Stripping นั้นสิ่งที่สำคัญคือ I/O  เพราะต้องมีการเข้าถึงฮาร์ดดิสก์ในอะเรย์  ต้องจัดการให้ดิสก์ทุกตัวบรรจุข้อมูลที่ถูกเขียน-อ่าน (Access) ในสภาวะที่สมดุลกัน ยิ่ง RAID Controller ออกแบบเท่าไร ก็จะได้ประสิทธิภาพจาก  I/O มากขึ้น สำหรับตัวควบคุมอะเรย์แบบฮาร์ดแวร์ (RAID Controller)    การวัดประสิทธิภาพในการทำงาน สิ่งที่นำมาวัดประสิทธิภาพก็คือ I/O Performance
บันทึกเทคนิค
 
     ทำไมถึงว่า I/O สำคัญ กรณีนี้ จะชี้ให้เห็นว่าถ้าหากเป็น file server นั้น I/O ยังมีความสำคัญไม่มากนัก เพราะ user จะไม่ค่อยเปิด/ปิด file เท่าไหร่ (เว้นแต่มีกรณีที่มีการนำเอา network drive เป็น swap space  แต่นั่นไม่ใช่ file request แล้ว เพราะการเปิดแต่ละครั้ง จะเป็นการเปิดเพื่อนำมาแก้ไข ซึ่งกว่าจะ save บางทีใช้เวลานานกว่า 10-15 นาที สมมุติว่ามีผู้ใช้ 20 คน เฉลี่ยเวลาที่จะต้องทำ I/O  ก็ยังนานระดับเป็นนาที ซึ่งถือว่าไม่มากนัก แต่ถ้าเป็น database ที่ต้องทำงานระดับ record locking นั้น การเปิดข้อมูลมาแก้ไข 1 record  จะมี I/O อย่างน้อย 3-4 ครั้ง (database open, record open, index  open, lock open) และเฉลี่ย ไม่เกิน 30 วินาทีก็ต้องมี I/O อีกรอบ  เพื่อ write ซึ่งแพงกว่า read มากเนื่องจากต้องมี concurrency control, journalizing, log ยิ่งพวก 2-phase commitment (เขียน changed image ก่อน -> ลบ record เดิม -> เปลี่ยน changed image เป็น record ใหม่) จะใช้ I/O ถึง 2 เท่า เฉลี่ย 30 วินาที มี I/O ไม่น้อยกว่า 15 ครั้ง ยิ่งพวก banking หรือ online service เวลาการจัดการ record จะน้อยกว่า 10 วินาทีอีก
     ถ้าประมาณว่าเฉลี่ย 15 วินาที มี I/O 15 หน 1 หน/วินาที  ถ้ามีเครื่องแค่ 1,000 เครื่อง ที่เข้าจัดการ database อันนั้น  ลองจินตนาการว่าอะไรจะเกิดขึ้น เพราะจากตัวอย่างนั้นแค่ 1 database, 1 job (ที่ซ้ำซาก เหมือนกัน) เท่านั้น และยังไม่นับ overhead  ที่เกิดจากการ verify parity ของตัว RAID controller เองด้วย cache  จะมีความสำคัญตรงนี้ คือ ถ้าสามารถ hold ข้อมูลไว้ได้ ทำ block I/O ได้, queuing I/O ดีๆ ให้อ่านเขียนโดยมี HDD head movement น้อยที่สุด เปิดยาวทีเดียวเพื่ออ่าน/เขียนจาก track 1 -> last track แบบ one-way โดยไม่ต้องกระโดดไปๆ กลับๆ ประสิทธิภาพจะสูงอีกมาก
 จะเห็นได้ว่า data transfer rate แทบไม่มีบทบาทเลย SCSI/2  สามารถส่งผ่านข้อมูลได้ 40 MB/sec แต่ฐานข้อมูลส่วนใหญ่ จะอ่านเขียน data ขนาด ไม่เกิน 2k กันแทบทั้งนั้น (ข้อมูล 1 record ไหน ขนาดที่ใหญ่ๆ จะไม่เกิน 2 กิโลไบต์ ถ้าไม่ใช่ image) พันเครื่องอ่าน-เขียนพร้อมๆกัน data stream  ก็แค่ 2-3 MB เท่านั้นการวัดประสิทธิภาพ I/O วัดว่ารองรับได้กี่ I/O per sec โดย RAID Controller ที่ดีนั้น ได้ถึง 6,000 I/O per sec และปัจจุบัน RAID Controller รุ่นประสิทธิภาพสูง ทำได้ถึง 10 KBPSec แต่มีราคาแพงมากกรณีที่ ค่า I/O ต่ำ ความเร็วในการทำงานของ RAID จะแปรผันตาม cache
 สำหรับ Parity ของข้อมูลนั้น ไม่ได้ถูกระบุสำหรับ RAID ทุกระดับ แต่จะมีเฉพาะบางระดับเท่านั้น Parity จะช่วยในเรื่องของการ "เผื่อเสีย" คือ ถ้าหากข้อมูลในดิสก์เสียหาย หรือเกิดทำลาย จะใช้ Parity  ช่วยให้กู้ข้อมูลกลับมาได้
      การสร้าง parity อาศัยความสามารถของโปรเซสเซอร์ ซึ่งจะเป็น โปรเซสเซอร์บน RAID Controller หรือโปรเซสเซอร์บนเซิร์ฟเวอร์ก็ตาม การทำงานของโปรเซสเซอร์ดังกล่าวจะได้ค่า ยิ่งถ้า parity นั้นเป็น CRC ยิ่งต้องการ CPU power มากขึ้น โดยการคำนวณกัน byte per byte ไม่ได้เอามาทั้ง file แล้ว generate 4 bytes และกรณีที่เป็น RAID-5 ยังต้องคอยหมุนให้ parity bit กระจายไปอยู่ตาม HDD ลูกต่างๆ ในอะเรย์อีก
                ถ้าหากต้องการทราบว่า RAID-5 ใช้พลังงานงานจาก CPU มากขนาดไหน ลองหา HDD SCSI มาสามตัว ลง Windows NT แล้วทำ software RAID ดูสิครับ

ก่อนที่เราจะไปรู้จัก RAID แบบต่างๆ เรามารู้จักคำว่า Data Striping กันก่อนครับ
Data Striping คือการแบ่งข้อมูลออกเป็นส่วนๆ แล้วนำแต่ละส่วนไปเก็บใน harddisk แต่ละตัว การทำ striping นี้จะช่วยให้การอ่าน หรือเขียนข้อมูลใน disk array มีประสิทธิภาพมากขึ้น เพราะแต่ละไฟล์จะถูกแบ่งเป็นส่วนๆ กระจายไปเก็บในส่วนที่ต่างกันของ harddisk หลายตัว โดย harddisk เหล่านั้นทำงานไปด้วยกันแบบขนาน (parallel) จึงทำให้การเข้าถึงข้อมูลนั้นเร็วกว่า harddisk แบบตัวเดียวอย่างแน่นอนและนี่คือ RAID แบบต่างๆ ที่มีความสามารถต่างกัน และถูกเอามาใช้ในงานที่แตกต่างกัน แล้วแต่ผู้ใช้ครับ

 RAID 0
    คือการเอา harddisk มากกว่า 1 ตัวมาต่อร่วมกันในลักษณะ non-redundant ซึ่ง RAID 0 นี้มีจุดประสงค์ เพื่อที่จะเพิ่มความเร็วในการอ่าน/เขียนข้อมูล harddisk โดยตรง ไม่มีการเก็บข้อมูลสำรอง ดังนั้นถ้าฮาร์ดดิสก์ตัวใดตัวหนึ่งเกิดเสียหาย ก็จะส่งผลให้ข้อมูลทั้งหมดไม่สามารถใช้งานได้ทันที จากรูป จะเห็นว่าข้อมูลจะถูกแบ่งไปเก็บที่ harddisk ทั้ง 3 ตัว (กรณีที่เราใช้ harddisk 3 ตัวมาต่อ RAID 0 กัน) และถ้าเพิ่มจำนวน harddisk ใน array ให้มากขึ้น เวลาที่ใช้อ่านหรือเขียนข้อมูลก็จะลดลงไปตามสัดส่วน ตามทฤษฎีแล้ว ถ้า disk array มี harddisk จำนวน N ตัว ก็จะทำให้อ่านหรือเขียนข้อมูลได้เร็วขึ้นเป็น N เท่าตัว แต่ด้วยเหตุผลและปัจจัยหลายประการ เช่น RAID controller, ความคลาดเคลื่อนของความเร็ว harddisk ทำให้ในความเป็นจริงอาจเร็วไม่ถึงตามทฤษฎี
   

RAID 1

RAID 1 มีอีกชื่อหนึ่งว่า disk mirroring จะประกอบไปด้วย harddisk 2 ตัวที่เก็บข้อมูลเหมือนกันทุกประการ เสมือนการสำรองข้อมูล หาก harddisk ตัวใดตัวหนึ่งเกิดเสียหาย ระบบก็ยังสามารถดึงข้อมูลจาก harddisk อีกตัวหนึ่งมาใช้งานได้ตามปกติ สำหรับ RAID controller ที่ถูกออกแบบมาเป็นอย่างดีแล้ว การเขียนข้อมูลลง harddisk 2 ตัวในเวลาเดียวกัน จะใช้เวลาพอๆ กับการเขียนข้อมูลลง harddisk ตัวเดียว ในขณะที่เวลาในการอ่านก็จะน้อยลง เพราะ RAID controller จะเลือกอ่านข้อมูลจาก harddisk ตัวไหนก็ได้ โดยหากมีคำสั่งให้อ่านข้อมูล 2 ชุดในเวลาเดียวกัน ตัว RAID controller ก็สามารถประมวลผลคำสั่งเพื่ออ่านข้อมูลจาก harddisk ตัวหนึ่ง และคำสั่งอีกชุดนึงจาก harddisk อีกตัวนึงก็ได้
จุดเด่นของ RAID 1 คือความปลอดภัยของข้อมูล ไม่เน้นเรื่องประสิทธิภาพและความเร็วเหมือนอย่าง RAID 0 แม้ว่าประสิทธิภาพในการอ่านข้อมูลของ RAID 1 จะสูงขึ้นก็ตาม
 

RAID 3

RAID 3 มีลักษณะที่คล้ายกับ RAID 2 แต่แทนที่จะตัดแบ่งข้อมูลในระดับ bit เหมือน RAID 2 ก็จะตัดเก็บข้อมูลในระดับ byte แทนและการตรวจสอบและแก้ไขข้อผิดพลาดของข้อมูล จะใช้ parity แทนที่จะเป็น ECC ทำให้ RAID 3 มีความสามารถในการอ่านและเขียนข้อมูลได้อย่างรวดเร็ว เพราะมีการต่อ harddisk แต่ละตัวแบบ stripe และใช้ harddisk ที่เก็บ parity เพียงแค่ตัวเดียวเท่านั้น แต่ถ้านำ RAID 3 ไปใช้ในงานที่มีการส่งผ่านข้อมูลในจำนวนที่น้อยๆ ซึ่ง RAID 3 ต้องกระจายข้อมูลไปทั่วทั้ง harddisk จะทำให้เกิดปัญหาที่เรียกว่า คอขวด ขึ้นกับ harddisk ที่เก็บ parity เพราะไม่ว่าข้อมูลจะมีขนาดใหญ่ขนาดไหน RAID 3 ต้องเสียเวลาไปสร้างส่วน parity ทั้งสิ้น ยิ่งข้อมูลมีขนาดเล็กๆ แต่ parity ต้องสร้างขึ้นตลอด ทำให้ข้อมูลถูกจัดเก็บเสร็จก่อนการสร้าง parity ทั้งระบบต้องมารอให้สร้าง parity เสร็จก่อน จึงจะทำงานต่อไปได้นั่นเอง RAID 3 เหมาะสำหรับใช้ในงานที่มีการส่งข้อมูลจำนวนมากๆ เช่นงานตัดต่อ Video เป็นต้น
 

RAID 5

มีการตัดแบ่งข้อมูลในระดับ block เช่นเดียวกับ RAID 4 แต่จะไม่ทำการแยก harddisk ตัวใดตัวหนึ่งเพื่อเก็บ parity ในการเก็บ parity ของ RAID 5 นั้น จะกระจาย parity ไปยัง harddisk ทุกตัว โดยปะปนไปกับข้อมูลปกติ จึงช่วยลดปัญหาคอขวด ซึ่งเป็นปัญหาที่สำคัญใน RAID 3 และ RAID 4 คุสมบัติอีกอันหนึ่งที่น่าสนใจของ RAID 5 คือ เทคโนโลยี Hot Swap คือเราสามารถทำการเปลี่ยน harddisk ในกรณีที่เกิดปัญหาได้ในขณะที่ระบบยังทำงานอยู่ เหมาะสำหรับงาน Server ต่างๆ ที่ต้องทำงานต่อเนื่อง
 

RAID 6

RAID 6 อาศัยพื้นฐานการทำงานของ RAID 5 เกือบทุกประการ แต่มีการเพิ่ม parity block เข้าไปอีก 1 ชุด เพื่อยอมให้เราทำการ Hot Swap ได้พร้อมกัน 2 ตัว (RAID 5 ทำการ Hot Swap ได้ทีละ 1 ตัวเท่านั้น หาก harddisk มีปัญหาพร้อมกัน 2 ตัว จะทำให้เสียทั้งระบบ) เรียกว่าเป็นการเพิ่ม Fault Tolerance ให้กับระบบ โดย RAID 6 เหมาะกับงานที่ต้องการความปลอดภัยและเสถียรภาพของข้อมูลที่สูงมากๆ
 

RAID 0+1

เป็นการผสมผสานระหว่าง
RAID 1 และ RAID 0 เข้าด้วยกัน โดยใช้ Harddisk 4 ตัวขึ้นไปครับ และมีการทำ mirror ข้อมูล (backup ข้อมูล) ไปด้วย ข้อเสียของ 0+1 คือการเพิ่มจำนวน harddisk ในอนาคตเป็นไปได้ยาก เพราะ harddisk แต่ละตัวมี mirror เป็นของตัวเอง ยิ่งเพิ่ม harddisk เพื่อใช้งานก็ต้องเพิ่ม harddisk เพื่อ backup ไปด้วย ตามรูปครับ

 


RAID 10 (1+0)

RAID 10 หรือ RAID 1+0 เป็นการผสมผสานระหว่าง RAID 1 และ RAID 0 เข้าด้วยกัน การทำงานจะสกับกันทีละตัว พร้อมทั้งทำ Mirror ทำให้การเข้าถึงข้อมูลเป็นไปได้อย่างรวดเร็ว  เหมาะสำหรับ Server ที่ต้องการความเร็วในการเข้าถึงข้อมูลค่อนข้างมาก และมีประสิทธิภาพสูงครับ

 

ส่วนประกอบของ RAID


RAID Controller
ตัว ควบคุมระบบ RAID นั้นใช้ได้ทั้งซอฟต์แวร์และฮาร์ดแวร์ หรือใช้รวมกันก็ได้ ซอฟต์แวร์เช่น Windows NT 4.0 สนับสนุน RAID ระดับ 0 ,1 (Striping , Mirroring) และฮาร์ดแวร์จากผู้ผลิตรายต่างๆ ซึ่งมีอยู่มากหลากหลาย เช่น  Asustek , Adaptec , DCT ,MTI ซึ่งฮาร์ดแวร์เหล่านั้นมีราคาอยู่ในระหว่างสองหมื่นถึงเป็นล้านบาท
กรณี ใช้ซอฟต์แวร์เป็น RAID Controller จะมีข้อจำกัดคือ ระดับที่สนับสนุน คือ  0, 1 (Striping , Mirroring) นั้นยังไม่ครอบคลุมระดับ Data Protection ในเรื่องของพาริตี้ ซึ่งมีใน RAID ระดับ 3,5 และใช้กำลังจากโปรเซสเซอร์  ทำให้โปรเซสเซอร์มีเวลาจะไปประมวลผลงานอื่นๆ น้อยลง การใช้ซอฟต์แวร์ควบคุม มีข้อดีคือ ราคาถูกกว่า ไม่ต้องการอุปกรณ์เพิ่มเติมมากนัก
ส่วน ฮาร์ดแวร์ โดยมากจะได้รับการออกแบบที่ดี  แต่ฮาร์ดแวร์ก็มีข้อแตกต่างระหว่างยี่ห้อต่างๆ คือ ประสิทธิภาพในการทำงานแตกต่างกันออกไป การติดตั้งยากกว่าซอฟต์แวร์ควบคุม และราคาการลงทุนค่อนข้างสูงกว่า เพราะต้องการอุปกรณ์เพิ่มเติม ไม่ว่าจะเป็นฮาร์ดดิสก์ เคสสำหรับฮาร์ดดิสก์ โดยเฉพาะระบบ "Hot Swap"  แต่ผลของการลงทุนก็คุ้มค่า (เกี่ยวกับ Hardware RAID Controller  ดูข้อมูลเพิ่มเติมได้จาก รู้จักกับ Raid Controller)
ฮาร์ดดิสก์ที่นำมาต่อเป็น Array (Physical Drive)

คือฮาร์ดดิสก์ที่นำมาต่อเข้าเพื่อใช้กับระบบที่จะใช้ RAID  จำนวนของฮาร์ดดิสก์นั้น ขึ้นอยู่กับระดับของ RAID ที่เลือกใช้งาน  
ไดรฟ์อะไหล่ (Spare Drive)

เป็น ฮาร์ดดิสก์ที่นำมาติดตั้งไว้เป็น "อะไหล่" เผื่อว่าฮาร์ดดิสก์ตัวอื่นๆ ที่ใช้ในระบบ RAID เกิดชำรุดเสียหาย  โดยปกติเมื่อไดรฟ์ตัวใดตัวหนึ่งในระบบเกิดเสียหาย ไดรฟ์ที่เป็น "อะไหล่"  จะถูกสลับเข้าไปใช้งานแทนที่โดยอัตโนมัติทันที
ไดรฟ์ชำรุด (Failed Drive)

ฮาร์ดดิสก์ ที่ชำรุดเสียหาย เช่นมี Bad Sector หรือตัวระบบกลไกการทำงานเสียหาย   หรือไม่ตอบสนองต่อการทำงานของ Host SCSI ไดรฟ์พวกนี้ถือเป็น "ไดรฟ์ชำรุด" จะต้องเอาออกและเปลี่ยนไดรฟ์ดีเข้าไปใหม่
ไดรฟ์ตรรกะ (Logical Drive)

เหมือน กับระบบดอสธรรมดา คือ ไม่ใช่ไดรฟ์จริง เป็นเพียงไดรฟ์สมมุติ แต่ใน RAID  ไดรฟ์ตรรกะนั้น เกิดจากการรวมเอาไดรฟ์อื่นๆ มารวมกัน ให้เกิดความจุสูงขึ้น
 Logical Volume

ไม่อยากแปลเป็นไทย เอาเป็นแบบเดิม คงความหมายดีกว่า เมื่อต้องการ "ก้อน"  ของฮาร์ดดิสก์ที่มีความจุมากขึ้น ทำได้โดยการนำเอา "Logical Drive"  มารวมเข้าด้วยกันเป็น Logical Volume นั้นเอง
การจัดการ RAID

เมื่อ กล่าวถึงการจัดการ RAID ก็เสมือนว่าเรากำลังคุยกันเกี่ยวกับเทคโนโลยี  "การจัดเก็บข้อมูล" หรือ Storage Technology ซึ่งมีสองส่วนด้วยกันคือ การเลือกระดับของ RAID ที่เหมาะสมกับการใช้งาน  และการจัดการกับไดรฟ์ที่เสียหาย 
การเลือกระดับ RAID ที่เหมาะสม

RAID แต่ละระดับมีความเหมาะสมเกี่ยวกับการใช้งาน และความต้องการฮาร์ดแวร์  ซอฟต์แวร์ ฮาร์ดดิสก์แตกต่างกัน ดูอ้างอิงได้จากระดับของ RAID ซึ่งกล่าวไว้คร่าวๆ เกี่ยวกับระดับของ RAID และการใช้งาน

การจัดการไดรฟ์เสีย
การ จัดการกับไดรฟ์เสีย ไม่ได้หมายถึงว่า ฮาร์ดดิสก์เสียแล้ว ถึงค่อยคิดว่า จะจัดการอย่างไร แต่หมายถึง จะทำอย่างไรกับ "ระบบเผื่อเสีย" หาฮาร์ดดิสก์มา  Standby หรือเปิดไว้รอ เหมือนเตรียมยางรถยนต์อะไหล่ติดไว้ที่ท้ายรถ?  อะไหล่หรือ Spare นี่เป็นของ "เผื่อเสีย" แน่นอน คิดอยากมีระบบ "เผื่อเสีย"  ก็ต้องลงทุนบ้าง สำหรับ RAID ก็เช่นเดียวกัน ต้องลงทุนซื้อไดรฟ์มาไว้  เรียกว่าเป็น Spare Drive ซึ่งมีทั้ง Global Spare Drive และ Local Spare  Drive เป็นสองกลุ่ม ความแตกต่างคือ Local Spare Drive จะเป็นอะไหล่สำหรับ  Local Drive เพียงตัวเดียว (แยกให้ออกนะครับ Local Drive ตัวเดียวหมายถึง 1  "ก้อน" หรือ 1 Volume ซึ่งจะรวมได้หลายๆ Physical Drive เพราะ Local Drive   ในระบบเครือข่าย แตกต่างจาก Local Drive ของพวกเครื่องพีซี) แต่ Global Spare Drive นั้นเป็นอะไหล่สำรองสำหรับ Local Drive 2 ก้อนขึ้นไป

การระบุว่า ไดรฟ์ไหนเสีย และการวิเคราะห์อาการเสีย เป็นเทคนิคการออกแบบ RAID Controller ที่ผู้ผลิตรายต่างๆ ต่างก็แข่งขันกันพัฒนา  เพราะโดยคุณสมบัติการออกแบบฮาร์ดดิสก์แบบ SCSI แล้ว เป็นไปได้ยากที่ RAID Controller จะตรวจสอบว่าไดรฟ์ไหนเสีย แต่ระบบการตรวจสอบที่เกิดจากการพัฒนาร่วมกันของผู้ผลิต RAID  และผู้ผลิตฮาร์ดดิสก์ ที่มีชื่อเทคโนโลยีว่า SAF-TE ก็ทำให้การวิเคราะห์  และวินิจฉัยอาการเสียของฮาร์ดดิสก์เป็นไปได้ง่ายขึ้น

การจัด การกับไดรฟ์เสีย ยังมีระบบสนับสนุนหรืออำนวยความสะดวก  ซึ่งทำงานสอดคล้องกับระบบ RAID Controller อีกส่วนหนึ่งคือ Hot Plug Drive, Hot Swap Drive Bay  ซึ่งหมายถึงการเปลี่ยนฮาร์ดดิสก์โดยอไม่ต้องปิดสวิตช์คอมพิวเตอร์ก่อน  และเมื่อเปลี่ยนแล้วนอกจากสามารถใช้งานได้ทันทีแล้ว หากใช้ระบบ RAID ก็สามารถ  "Rebuild" คือ สร้างระบบ RAID ในฮาร์ดดิสก์ก้อนใหม่ได้ทันที
การเพิ่มขนาดของ Logical Volume
ขนาด ของ Logical Drive นั้น ขึ้นกับความจุและจำนวนของฮาร์ดดิสก์ที่นำมาเพิ่มในระบบ RAID โดยปกติระบบ RAID จะระบุไว้ว่า กรณีใช้ฮาร์ดแวร์ในการควบคุม ฮาร์ดดิสก์ทั้งหมดที่นำมาเพิ่มในระบบจะต้องมีความจุเท่ากัน การเพิ่มขนาดของ Logical Drive ทำได้โดยการเพิ่มฮาร์ดดิสก์ SCSI เข้าไปในระบบ
 ถ้า เป็นระบบ RAID เก่าๆ การเพิ่มขนาดของ Logical Drive  ทำได้โดยการสำรองข้อมูลทั้งหมด หลังจากนั้นปิดระบบ (ปิดเฉพาะระบบที่ใช้ RAID) ติดตั้งฮาร์ดดิสก์เพิ่มเติมเข้าไปในระบบ และ Config RAID หรือการสร้าง RAID  ขึ้นใหม่ วิธีการนี้มีข้อด้อยคือ ใช้เวลาในการดำเนินใหม่      และต้องการผู้เชี่ยวชาญ เพราะในระบบเครือข่าย ถ้าหากต้องมีการ    "ติดตั้งระบบใหม่" นั้นหมายถึง การ Config ระบบใหม่ทั้งหมด
แต่ ระบบคอมพิวเตอร์ที่ใช้ RAID ใหม่ๆ นั้น ใช้หลักการของ Dynamic System  Expansion การขยายขนาดของระบบโดยวิธีการง่ายกว่าเดิม โดยวิธีนี้ต้องใช้กับระบบ RAID ที่เป็น RAID Hardware Controller เท่านั้น โดยเมื่อเพิ่มฮาร์ดดิสก์เข้าไปในระบบ (จะเป็น Hot Plug หรือ Non Hot-Plug) ก็ได้ หลังจากนั้นใช้ฟังก์ชันในการตรวจจับ (SCSI Harddisk SCAN) เพื่อตรวจสอบว่ามีฮาร์ดดิสก์ใหม่ถูกติดตั้งเข้าไปในอะเรย์      หลังจากนั้นก็ใช้ฟังก์ชันในการเพิ่มขนาด Logical Volume โดยการ Assign  ฮาร์ดดิสก์ใหม่เข้ากับระบบอะเรย์ เพียงไม่กี่นาทีก็เพิ่มขนาดของ Logical  Volume ได้
การจัดการและตรวจสอบโดย RAID Controller
ฮาร์ดแวร์ RAID Controller ที่ผลิตโดยผู้ผลิตหลายๆ รายๆ  มีกลวิธีในการตรวจสอบระบบ DISK Array  โดยเริ่มจากการตรวจสอบตัวคอนโทรลเลอร์เอง ไปจนถึงการตรวจสอบฮาร์ดดิสก์ที่เป็นสมาชิกอะเรย์ ได้แก่การตรวจสอบ disk / PSU  / Power / Over-Temp แล้วแสดงค่าความผิดพลาด พร้อมทั้งแจ้งเตือนกรณีที่ความผิดพลาดนั้น ถือเป็นความผิดพลาดระดับวิกฤติ

ขอขอบคุณบทความจาก http://www.msit.mut.ac.th

Blogger templates