Technology

RAID คืออะไร ? ทำไมเราต้องใช้มัน

By Arnon Puitrakul - 21 September 2020 - 2 min read min(s)

RAID คืออะไร ? ทำไมเราต้องใช้มัน

ถ้าเราเก็บข้อมูลในบ้านทั่ว ๆ ไป เก็บข้อมูลที่ไม่ได้มีขนาดใหญ่มากอาจจะไม่คุ้นเคยกับคำว่า RAID เท่าไหร่ แต่ถ้าใครที่มีการเก็บข้อมูลเยอะ ๆ และต้องการความปลอดภัยสูง อาจจะเคยได้ยินมาบ้าง วันนี้เราจะมาแถลงไขกันว่า มันคืออะไร มันทำงานยังไง เราจะสร้างได้ยังไง และ มีแบบไหนบ้าง

RAID คืออะไร

RAID หรือ Redundant Array of Independent Disks เป็นเทคโนโลยีในการทำงานร่วมกันของที่เก็บข้อมูลตั้งแต่ 2 ลูกขึ้นไป เพื่อ Performance ที่มากขึ้น และ ความปลอดภัยที่มากขึ้น

จากเดิมที่เราใช้หน่วยความจำรอง อาจจะเป็น Hard Disk หรือ SSD 1 ลูกในการเก็บข้อมูล ปัญหาที่เราเจอกันจะมีอยู่ 2 เรื่องคือ ขนาดไม่พอ และ ถ้ามันเสียคือข้อมูลก็ลาก่อยเลย ซึ่ง หลัก ๆ RAID เข้ามาแก้ปัญหา 2 เรื่องนี้เลย

เราอาจจะตั้งค่าให้มัน มีข้อมูลเหมือนกันทั้ง 2 ลูก ดังนั้น ถ้าลูกใดลูกนึงเกิดเสียขึ้นมา ข้อมูลของเราก็ไม่หายไปไหน มันก็อยู่ที่อีกลูกที่ยังทำงานได้อยู่นั่นเอง หรือในแง่ของ Performance เองก็สามารถตั้งค่าให้มัน ทำงานพร้อม ๆ กันก็ได้ เราก็จะได้ความเร็วเพิ่มขึ้นเท่าตัวในทางทฤษฏี

โดยที่ทั้งหมดเวลาเราเปิดขึ้นมาในเครื่อง เราจะเห็นว่ามันจะถูกรวมกันเป็น 1 Partition ทำให้ เราสามารถเก็บข้อมูลขนาดใหญ่ได้อย่างง่ายดาย โดยที่เราไม่ต้องแบ่งส่วนข้อมูล แล้วเอาไปใส่ตามหน่วยความจำแต่ละลูกเองเลย ทั้งหมด RAID มันจัดการให้เราหมด

เราจะทำ RAID ได้อย่างไร ?

หลัก ๆ ในการทำ RAID เราจะมี อยู่ 2 วิธีใหญ่ ๆ ที่เราใช้งานกัน คือ Software RAID และ Hardware RAID ทั้ง 2 วิธีนี้ปลายทาง เราได้ RAID มาเหมือนกัน แต่วิธีการทำงาน และ มีข้อดีข้อเสียต่างกัน

เริ่มจากอันที่ง่ายที่สุดก่อนคือ การใช้ Software RAID ก็คือ เราทำ RAID ในระดับ Software ตรง ๆ เลย โปรแกรมพวกนี้ก็จะทำหน้าที่ในการกระจายข้อมูลไปตามหน่วยความจำรองต่าง ๆ ตามที่เราตั้งค่าไว้ ข้อดีคือ เราไม่ต้องซื้อ Hardware มาเสียบเพิ่มเลย เราสามารถไปซื้อโปรแกรม ตั้งค่า และใช้งานได้เลย ข้อเสียคือ มันมี Overhead ในการทำงานอยู่พอตัว ทำให้มันไม่เหมาะกับการใช้งานที่มีการอ่านและเขียนที่หนักมาก เพราะ เราจะเสีย CPU ให้กับโปรแกรมค่อนข้างเยอะ นอกจากนั้น การทำ RAID พวกนี้ เวลาเครื่องมีปัญหา จนโปรแกรมที่ใช้จัดการ RAID ใช้งานไม่ได้แล้ว มันก็มีโอกาสสูงที่เราจะเสียข้อมูลไป

และอีกวิธีคือ การใช้ Hardware RAID พวกนี้คือ เราจะต้องไปซื้อพวก RAID Card มา การ์ดพวกนี้ มันจะทำหน้าที่ในการกระจายข้อมูลเองเลย OS เพียงแค่ส่งข้อมูลมาให้ RAID Card แล้วที่เหลือ RAID Card มันจัดการเองให้หมดเลย ทำให้ลดภาระในการทำงานของเครื่องไปได้เยอะมาก ๆ โดยเฉพาะ ถ้า Array เรามีขนาดใหญ่ หรือ เรามีจำนวนหน่วยความจำรองเยอะ หรือดีกว่านั้น RAID Card บางตัวมี Cache ในตัวอีก ทำให้การเขียนไฟล์เร็วขึ้นมากอีกเช่นกัน

เวลาไปซื้อพวก RAID Card แนะนำให้ดูดี ๆ นะว่า มันเป็น HBA Card (Host But Adapter) หรือ RAID Card อย่าใช้สลับกันนะ มันหน้าตาเหมือนกันเลย ช่องเสียบเหมือนกัน ต่างที่ Feature ของการ์ดล้วน ๆ เลย เพราะพวก HBA ทำหน้าที่เป็นเหมือนปลั๊กพ่วงเลย คือ ไม่มี Feature ในการจัดการข้อมูลแบบ RAID เลย จะเหมาะกับผู้ที่ต้องการเพิ่มจำนวนช่องสำหรับเชื่อมต่อหน่วยความจำรองเท่านั้น ๆ

ใน RAID Card บางรุ่น เราสามารถที่จะ Flash Firmware เพื่อเปลี่ยนโหมดการทำงานระหว่าง HBA และ RAID ได้ด้วย เช่นที่เราใช้ LSI 9211-8i เก่าแล้วละ ออกมาประมาณปี 2017 เลย แต่ก็ใช้งานได้ดีอยู่

สำหรับเราเอง เราใช้ Unraid ชื่อมันก็บอกอยู่แหละว่าไม่ใช่ RAID ทำให้การ์ดที่เราใช้จะเป็น HBA Card ไปเลย ซึ่งราคามันก็ถูกลงไปพอตัวเลยทีเดียว

Striping, Mirroring และ Parity คือ ♥️ ของ RAID

ก่อนเราจะไปดูว่า RAID มันมีแบบไหนก่อน เราอยากจะพาทุกคนมาทำความรู้จักกับคำ 3 คำคือ Striping, Mirroring และ Parity กันก่อน เพื่อที่จะได้เข้าใจ RAID แต่ละแบบได้ดีขึ้น

คำแรกคือ Striping เอาง่าย ๆ มันคือการแยนส่วนของข้อมูลออกมา และ เขียนลงไปใน Disk พร้อม ๆ กัน กลับกันเมื่อเราจะอ่าน ข้อมูลก็จะถูกอ่านจาก Disk ทั้ง 2 ลูก นั่นทำให้ RAID ที่ใช้เทคนิคนี้ มีความเร็วในการอ่าน และ เขียนที่สูงขึ้นนั่นเอง

คำต่อไปคือ Mirroring คำนี้ทำตามชื่อเลยคือ ทำให้ Disk เหมือนส่องกระจกกันเลย หมายความว่า เวลาเราเขียนข้อมูลลงไป ข้อมูลจะเหมือนถูก Copy แยกทางไปเขียนลง Disk พร้อม ๆ กัน นั่นแปลว่า Disk ทั้งหมดที่ผ่านการทำ Mirror จะหน้าตาเหมือนกันเลย นั่นทำให้เวลา Disk สักตัวนึง เกิดมีปัญหาขึ้นมา ข้อมูลของเราก็ยังคงอยู่ใน Disk ที่เหลือที่ไม่ได้เสียหาย

และคำสุดท้าย อันนี้อาจจะยากหน่อยคือ Parity มันเหมือนการทำ Checking Bit เลย แทนที่เราจะ Mirroring เอา มันเสียทั้งลูกเลย แต่เรายังต้องการให้ข้อมูลอยู่เหมือนเดิมเมื่อมี Disk เสียหาย แต่ เราไม่อยากเสีย Disk ไปทั้งลูกเลย ทำยังไงดี Parity ใช้หลักการของการทำ XOR (Exclusive OR) ลองไปหาใน Google ดูได้ว่ามันคืออะไร

สิ่งที่มันทำคือ มันจะเอาข้อมูลที่อยู่ในแต่ละ Disk มา XOR รวมกัน เราก็จะได้ค่าตัวนึงออกมา เราเรียกมันว่า Parity จากนั้น เมื่อมี Disk สักลูกเสีย ทำให้ส่วนนึงมันหายไป แต่ถ้าเรามี Parity อยู่ เราก็สามารถเอาข้อมูลคืนมาด้วยการแก้สมการธรรมดา เราก็จะได้ข้อมูลคืนมาหมดแล้ว

ในการทำทั้ง Striping และ Parity มันก็มีระดับในการทำเช่นกัน ขึ้นกับเราเลือกใช้งานคือ ระดับ Byte คือ มันก็จะแยกข้อมูลออกมาเป็นขนาดนึงตามที่เราตั้งค่าไว้ หรือคำนวณ Parity ของข้อมูลขนาดนึง แล้วเก็บไป

หรือถ้าเป็น Block Level เหมือนกับเราซอย Disk ของเราเป็นส่วน ๆ แล้ว Copy แยก หรือ ทำ Parity ไป

RAID มีแบบไหนบ้าง ?

ในการตั้งค่า RAID มันมีหลายแบบมาก ๆ แต่วันนี้เราจะเอาอันที่นิยมใช้น่าจะมี 4 แบบด้วยกันเริ่มที่ตัวแรกกันก่อนคือ RAID0 ตัวนี้เป็นตัวที่เรียกได้ว่าท๊อปฟอร์มเรื่อง Performance มาก เพราะสิ่งที่มันทำคือ การ Striping ข้อมูลเราลงไปตาม Disk ต่าง ๆ เลย ทำให้ Performance ก็คือแทบจะเอามาบวกกันได้เลยตามทฤษฏี และขนาดของ Disk ที่ใช้ได้คือเกือบเท่า เอาความจุ มาคูณด้วยจำนวน Disk เลย แต่ข้อเสียคือ ถ้าเกิด Disk ตัวใดตัวนึงมีปัญหาขึ้นมา ทั้งหมดนี่คือ หายเกี้ยงเลยนะ ทำให้ยิ่งเรามี Disk เยอะขึ้นมันก็ยิ่งเร็วขึ้นจริง แต่นั่นก็เพิ่มโอกาสที่ Disk ลูกใดลูกนึงจะเสียหายไปด้วย ดังนั้นพวกนี้มันจะเหมาะกับการทำ Storage ในการทำงาน เสร็จก็เอาไปเก็บที่อื่นต่อ ไม่เหมาะกับการเอามาเก็บข้อมูลระยะยาวเลย อันตรายมาก ๆ

RAID1 ทำมาตรงข้ามกับ RAID0 เลยคือ แทนที่จะ Striping มันจะทำ Mirroring แทน ทำให้ Performance ไม่ต่างจากการใช้งาน Disk ลูกเดียวเลย แต่สิ่งที่ได้เพิ่มคือ ความปลอดภัยของข้อมูลที่มีเพิ่มขึ้น เช่น เราใช้ 2 ลูก และมีตัวใดตัวนึงเสีย ข้อมูลของเราก็ยังคงอยู่ไม่หายไปไหน แต่ข้อเสียคือ ขนาดความจุที่เราใช้ได้คือ เอาความจุทั้งหมดบวกกันหารด้วย 2 เพราะมันหายไป Mirror ครึ่งนึงเลย ทำให้มันเหมาะกับการเก็บข้อมูลสำคัญ ๆ มาก ๆ

RAID5 เป็นประเภทที่น่าจะเรียกได้ว่าอยู่ระหว่างกลางในเรื่องของ Performance และความปลอดภัยได้เลย สิ่งที่มันทำคือ การใช้ Parity โดยที่มันจะแยก Disk ของเราออกมาเป็นส่วนเท่า ๆ กัน จากนั้น มันจะคำนวณ Parity และ เก็บไว้ที่ทุกลูก ทำให้ ตัดปัญหาเวลาเราคำนวณ Parity แล้วเกิดขอขวดในการเขียน Parity ลงไป ในขณะที่เรื่อง Performance ก็ได้ประโยชน์จากการทำ Striping ด้วยเหมือน RAID0 พร้อมทั้งจำนวนพื้นที่ ที่เสียไปเพื่อเก็บ Parity จะเท่ากับ Disk 1 ลูกเท่านั้นเอง สมมุติว่า เราเสียบไป 5 ลูก ๆ ละ 4 TB เราก็จะมี 20 TB อยู่ในมือ เมื่อผ่านการทำ RAID ออกมา ก็จะเหลือพื้นที่ให้เราใช้อยู่ที่ 12 TB ไปเลย นั่นแปลว่า จำนวนพื้นที่ ๆ เราสามารถใช้งานได้ และ ยังให้ความปลอดภัยของข้อมูลอยู่ แทนที่จะเสียไปครึ่งนึง เราก็เสียพื้นที่เท่ากับ Disk ลูกเดียวเท่านั้น ข้อเสียคือ มันต้องมีการคำนวณ Parity ทำให้ถ้าเราใช้ Software RAID อาจจะมีการใช้ CPU ของเราในการคำนวณบ้าง ส่วนถ้า Hardware RAID มันทำในการ์ดเลย ดังนั้นเราไม่ต้องไปสนใจมัน ทั้งหมดของ RAID5 ที่เรากล่าวไป มันเลยทำให้มันเป็น RAID ที่ได้ทั้งความปลอดภัย และ Performance ไปพร้อม ๆ กัน จนทำให้มันเป็นที่นิยมในการใช้งานสูงมาก ๆ

RAID10 เป็น RAID ที่เกิดจาก RAID1 และ RAID0 เข้าด้วยกัน โดยการใช้ Configuration แบบนี้ เราจำเป็นที่จะต้องใช้ Disk ไม่ต่ำกว่า 4 ลูกในการทำ สิ่งที่มันทำคือ มัน Striping ข้อมูลเหมือน RAID0 และ Mirror เหมือน RAID1 ทำให้ เราได้ ทั้ง Performance และความปลอดภัยที่เป็นข้อดีของทั้ง RAID1 และ RAID0 ทำให้มันเป็น RAID ประเภทที่มีความน่าเชื่อถือ และ ความปลอดภัยสูงมากตัวนึงเลย แต่ข้อเสียแน่นอนว่า มันเปลืองมาก เพราะ เราต้องใช้ Disk ทั้งหมด 4 ลูกในการทำเลย และ ถ้าเราต้องการเพิ่ม เราก็ต้องเติมอีก 4 ลูกเข้าไป ซึ่งนั่นบอกเลยว่า ไม่น้อยเลยจริง ๆ ส่วนความจุที่ได้ เหมือน RAID1 เลยคือ ครึ่งนึงของความจุทั้งหมด

การเลือกใช้งาน

WD Blue SSDs

การเลือกใช้งาน ให้เราดูลักษณะการใช้งานของเราว่า เรามีการอ่านและเขียนข้อมูลมากน้อยขนาดไหน เราต้องการความปลอดภัยของข้อมูลมากขนาดไหน ถ้าเราบอกว่า ข้อมูลสำคัญมาก ๆ หายไม่ได้เลย เราแนะนำไปเล่น RAID1 เลย อันนี้ค่อนข้างชัวร์มากกว่า ถ้าต้องการความชัวร์มากกว่านั้นอีก ก็เพิ่ม Disk ไปเข้าไป เราก็จะมีจำนวน Copy เยอะเข้าไปอีก เวลาระบบมีปัญหา เราก็มีได้สูงสุด N-1 Disk ไปเลย (N คือจำนวน Disk ในระบบ)

สำหรับการใช้งานจำพวก Cache Disk ที่เราอาจจะเป็นที่พักของข้อมูลเฉย ๆ เช่น NAS บางตัวที่มีการใส่ Cache ที่เป็น SSD ลงไป พวกนี้ข้อมูลมันพักอยู่ไม่นาน มันก็ย้ายไปเก็บที่ ส่วนเก็บข้อมูลหลักของมันแล้ว เราก็อาจจะตั้งค่าเป็น RAID0 เพื่อ Performance ที่ดีกว่าก็ได้เหมือนกัน

และสุดท้าย การใช้งานทั่ว ๆ ไป เราแนะนำให้ไปใช้พวก RAID5 ก็เป็นการ Balance เรื่องความเสี่ยง และ ความเร็วได้เป็นอย่างดี ในขณะที่เราเสียพื้นที่ในการเก็บข้อมูลไปไม่มากเท่า RAID1 แต่ Disk จะพังได้สูงสุดแค่ 1 ลูกพร้อม ๆ กันเท่านั้น นั่นคือเงื่อนไขที่ทำให้ข้อมูลทั้งหมดยังคงอยู่เหมือนเดิมทุกอย่าง ส่วนถ้าเราต้องการความทนทานมากกว่านี้หน่อยก็อาจจะไปใช้พวก RAID6 ที่เราไม่ได้พูดถึงไป ลองไปหาอ่านดูได้ พวกนี้ มันสามารถเสียพร้อมกันได้ 2 ลูกโดยที่ข้อมูลยังคงอยู่เหมือนเดิม แต่ก็แลกมากับการเสียพื้นที่ในการจัดเก็บข้อมูลเพิ่มขึ้นด้วยเช่นกัน

Unraid

เครื่องเราเอง เราไม่ได้ใช้ RAID ในการจัดการ Disk เราใช้โปรแกรมที่ชื่อว่า Unraid ไว้เราจะมารีวิวอีกที แต่มันจะมีตัว Cache Disk อยู่ ซึ่งอันนี้เราเลือกใช้เป็น RAID10 เพราะใน Cache Device มี VM ของเว็บที่ทุกคนกำลังอ่านตอนนี้อยู่ และ Docker Container อีกเยอะแยะมากกมาย ทำให้ มันมีการอ่านและเขียนค่อนข้างหนักมาก พร้อมกับ เว็บเราจะ Down ไม่ได้ และ เราไม่ได้ต้องการที่จะเพิ่ม Disk แล้ว (ถ้าเพิ่มต้องพวกอีก 4 ลูกบอกเลยว่า เคสใส่ไม่พอแล้ว ฮ่า ๆ) ดังนั้น เราเลยเลือกใช้เป็น RAID10 ไป

สรุป

การใช้ RAID เป็นการช่วยทำให้เราสามารถจัดการข้อมูลได้ง่ายขึ้นมาก พร้อมกับ ทำให้ข้อมูลของเราปลอดภัยจากความเสียหายของ Disk ได้ และยังเพิ่ม Performance ในการอ่านและเขียนข้อมูลได้อีก เป็นอะไรที่มีประโยชน์มาก ๆ แต่ต้องบอกว่า มันไม่ได้เหมาะกับทุกคนนะ มันเหมาะกับคนที่ต้องการเก็บข้อมูลจำนวนมาก หรือต้องการ Performance สูงมาก ๆ อันนี้เราจะแนะนำให้ใช้ แต่ถ้าเราใช้งานทั่ว ๆ ไปตามบ้าน ขนาดไม่ใหญ่มาก เราก็ยังแนะนำให้ใช้แบบปกติไปนี่แหละ น่าจะง่ายที่สุดแล้ว