Bài đăng nổi bật

Redo log, undo log và binary log

Đây là ba loại log mà bạn đã từng nghe khi tiếp cận mysql. Trong các cơ sở dữ liệu quan hệ (RDBMS) khác, cũng sẽ có các thành phần có vai tr...

Thứ Ba, 23 tháng 2, 2016

Tìm hiểu về RAID

RAID - Viết tắt của Redundancy Array of Inexpensive Disks, theo cách gọi phổ biến thì là Redundancy Array of Independent Disks. Đó là một công nghệ storage cho phép gom nhiều physical disk thành một logical unit. Bằng cách này, RAID nâng cao throughput do data được đẩy vào nhiều disk. Về dung lượng data cũng được nâng cao, khả năng fault-tolerance của disk cũng được cải thiện khi mà các data bị mất trên một disk có thể khôi phục qua quá trình rebuilding từ các disk còn lại trong array. Tùy vào RAID level được sử dụng mà các ưu điểm trên có thể xuất hiện một phần hoặc tất cả. Chúng ta sẽ điểm qua các RAID level thông dụng nhất: RAID-0, RAID-1, RAID-5, RAID-6, RAID-10 và RAID-01.

Tuy có khả năng phục hồi dữ liệu khi có sự cố nhưng RAID không thể xem là giải pháp backup vì một backup thực sự phải đáp ứng hai yếu tố phục hồi data deletion và data corruption. Lỗi vật lý trên disk có thể được khắc phục qua quá trình rebuilding nhưng một sai lầm quản trị xóa nhầm data thì không thể cứu vãn.

RAID-0

Dùng kỹ thuật disk striping để nâng cao throughput cho storage. Phù hợp với môi trường có nhiều file lớn và không yêu cầu data redundancy. Data sẽ được bẻ nhỏ thành các strip element có kích cỡ mặc định là 64KB và đẩy đồng thời vào nhiều disk trong array.


Với disk array gồm bốn disk sử dụng RAID-0, các strip element được phân bố đều vào bốn disk. Bằng cách truy xuất data đồng thời vào nhiều disk cùng lúc nên RAID0 sẽ nâng cao performance lên đáng kể. Nhưng với cách bố trí trên, bất kỳ disk nào trong bốn disk hỏng thì 1/4 lượng data sẽ đi tong không gì khôi phục nổi.

Đặc điểm:
- Redundancy data: Không có
- Fault tolerance: Không có
- Throughput: Được nâng cao cả read lẫn write.
- Storage capacity: Được tận dụng tối đa do không có redundancy data.
- Cần tối thiểu hai disk tham gia array

Tránh dùng RAID-0 với critical data. Thực sự, từ lúc đi làm hệ thống tôi chưa thấy có chỗ nào RAID-0 cả.

RAID-1

Dùng kỹ thuật disk mirroring để cho phép cùng một data được ghi đồng thời trên nhiều disk.


Bằng cách duplicate data, RAID-1 sẽ đảm bảo redundancy data. Khi  một trong hai disk bị lỗi, data vẫn còn nguyên vẹn để khôi phục được. Vì redundancy data không gia tăng được dung lượng và write throughput nên trong thực tế mọi người chỉ sử dụng RAID-1 với hai disk.

Đặc điểm:
- Redundancy data: Data được duplicate lên một disk khác
- Fault tolerance: Tái phục hồi trong trường hợp một disk bị lỗi.
- Throughput: Nâng cao read throughput
- Storage capacity: Do chỉ redundancy data nên dung lượng bị giới hạn.
- Cần tối thiểu hai disk tham gia array

RAID-5

Thay vì dùng redundancy data, RAID-5 sử dụng parity data phân bố trên tất cả các disk. Parity data này sẽ tham gia vào quá trình tính toán để khôi phục lại data bị mất trên một disk bất kỳ.


Nếu một trong sáu disk bị hỏng, sử dụng parity data hệ thống raid có thể tính toán lại lượng data bị mất trên disk đó. Một cách không chính xác nhưng trực quan bạn có thể coi parity data là một kết quả phép toán: parity(1-5) = strip element 1 + strip element 2 + strip element 3 + strip element 4 + strip element 5. Giả sử disk thứ hai bị hỏng, strip element 2 sẽ là phần chưa biết trong phép toán. Phương trình một bậc, một ẩn, dễ như ăn kẹo. Raid có thể tính toán ngay được strip element 2, làm tương tự vậy với phần data còn lại của disk thứ hai: strip element 8, strip element 14 và strip element 20... sẽ được tái khôi phục.

Đặc điểm:
- Redundancy data: Sử dụng partiy data để thay thế cho giải pháp redundancy data
- Fault tolerance: Tái phục hồi trong trường hợp một disk bị lỗi, quá trình rebuilding disk lâu hơn so với RAID-1 do bận tính toán data. Với cơ chế parity data đã nói, khôi phục hai disk bị lỗi là bất khả thi.
- Throughput: Nâng cao read throughput, write throughput có nâng cao nhưng không thể bằng RAID-0 do quá trình tính toán parity data.
- Storage capacity: Tận dụng đươc dung lượng disk hơn.
- Cần tối thiểu ba disk tham gia array

RAID-6

Tương tự RAID-5 nhưng sử dụng hai parity data thay vì một parity data như RAID-5. Nhờ vậy, RAID-6 cho phép khôi phục được tối đa hai disk thay vì một disk như RAID-5


Nếu hai trong sáu disk bị hỏng, sử dụng hai parity data hệ thống raid có thể tính toán lại lượng data bị mất trên hai disk đó. Một cách không chính xác nhưng trực quan, bạn có thể xem hai parity data là kết quả của hai phép toán khác nhau. Khi có hai disk bị hỏng, RAID-6 sẽ tính toán lại data bằng cách giải một hệ phương trình có hai ẩn số. Tuy fault-tolerance nâng cao nhưng quá trình tính toán phức tạp hơn khiến rebuilding mất thời gian hơn và write throughput bị giảm hơn so với RAID-5

Đặc điểm:
- Redundancy data: Sử dụng partiy data để thay thế cho giải pháp redundancy data
- Fault tolerance: Tái phục hồi trong trường hợp hai disk bị lỗi, quá trình rebuilding disk lâu hơn so với RAID-5 do độ phức tạp tính toán cao hơn. Với cơ chế parity data đã nói, khôi phục ba disk bị lỗi là bất khả thi.
- Throughput: Nâng cao read throughput, write throughput có nâng cao nhưng không thể bằng RAID-5 do quá trình tính toán hai parity data.
- Storage capacity: Tận dụng đươc dung lượng disk hơn.
- Cần tối thiểu bốn disk tham gia array

RAID-10

Ở mức độ này, data được striping vào các mirror set. Raid array được chia thành các set, mỗi set đó là một cặp disk dùng RAID-1, sau đó data được striping theo kiểu RAID-0 xuống các set này. Do không sử dụng parity data nên hoàn toàn không lo down performance do tính toán.  Đây là cách tổ chức data rất giống sharding trong mongodb, mysql cluster.


Khả năng fault-tolerance của RAID-10 rất cao, nó có thể khôi phục hầu hết mọi sự cố trừ khi toàn bộ disk thuộc cùng một mirror set hoàn toàn bị lỗi. Cũng vì cân bằng được performance và redundancy nên RAID-10 là lựa chọn phù hợp cho database.

Đặc điểm:
- Redundancy data: Sử dụng RAID-1 để redundancy data vào các mirror set.
- Fault tolerance: Cao nhất
- Throughput: Nâng cao read và write throughput nhưng không thể so được với RAID-0, raid-level chiến thắng hoàn toàn trong lãnh vực throughput.
- Storage capacity: Tận dụng đươc dung lượng disk hơn.
- Cần tối thiểu bốn disk tham gia array

RAID-01

Toàn bộ data của storage được duplicate lên, sau đó data ghi vào từng mirror sẽ được striping bên trong mỗi mirror. Tối thiểu cần bốn disk tham gia array. Về performance, dung lượng thì RAID-01 ngang ngửa RAID-01 nhưng về fault-tolerance lại kém hơn. Hiện tại, tôi cũng chưa thấy hệ thống nào dùng RAID-01. Với cùng số disk, RAID-10 luôn là lựa chọn tốt hơn

RAID-10 vs RAID-01

Tại sao nói RAID-01 có khả năng fault-tolerance kém hơn RAID-10 ?



Theo tổ chức data như trên:

RAID-10 chỉ bó tay khi disk 1,2 hỏng hoặc disk 3,4 hỏng hoặc disk 5,6 hỏng
RAID-01 sẽ bó tay khi disk 1,4 hỏng hoặc disk 2,5 hỏng hoặc disk 3,6 hỏng

(*) Các trường hợp không thể khôi phục khác đều có thể quy về các trường hợp đã kể trên.

Tuy số trường hợp lỗi ngang nhau nhưng về mặc xác suất toán học, với 6 ổ thì tỉ lệ xác suất rơi vào case bó tay của RAID-10 là 1/5 tương ứng 20% còn với RAID-01 là 3/5, tương ứng 60%

Chi tiết tính toán ở đây
https://serverfault.com/questions/145319/is-there-a-difference-between-raid-10-10-and-raid-01-01

Tham khảo:

http://www.dell.com/support/article/us/en/19/SLN129581/EN
https://en.wikipedia.org/wiki/RAID
http://www.thegeekstuff.com/2011/10/raid10-vs-raid01/
https://serverfault.com/questions/145319/is-there-a-difference-between-raid-10-10-and-raid-01-01
http://aput.net/~jheiss/raid10/

1 nhận xét: