Hướng dẫn cấu hình và quản lý RAID 0, 1, 5, 10 trên Linux

Tổng quan về kiến trúc RAID

RAID (Redundant Array of Independent Disks) là giải pháp kết hợp nhiều thiết bị lưu trữ vật lý thành một khối logic, nhằm tối ưu hiệu năng I/O hoặc đảm bảo tính toàn vẹn dữ liệu. Các chuẩn phổ biến trong doanh nghiệp bao gồm:

  • Level 0: Kỹ thuật phân dải (striping). Dữ liệu được cắt nhỏ và ghi song song lên nhiều đĩa. Tốc độ đọc/ghi tăng đáng kể nhưng không có cơ chế dự phòng.
  • Level 1: Kỹ thuật gương (mirroring). Mỗi khối dữ liệu được sao chép y nguyên lên ít nhất 2 đĩa. Độ an toàn cao, tốc độ đọc được cải thiện, nhưng dung lượng hữu ích chỉ bằng 50%.
  • Level 5: Kết hợp phân dải và mã chẵn lẻ (parity). Parity được phân phối luân phiên trên các đĩa. Cho phép hỏng 1 đĩa mà không mất dữ liệu. Hiệu suất ghi giảm nhẹ do phải tính toán parity.
  • Level 10: Kiến trúc lồng ghép. Trước tiên tạo các cặp RAID 1, sau đó kết hợp chúng thành mảng RAID 0. Cân bằng được tốc độ và độ tin cậy, thường dùng cho cơ sở dữ liệu quan trọng.

Chuẩn bị môi trường giả lập

Để minh họa quy trình, ta sử dụng một đĩa trống /dev/vdb (20 GB). Đầu tiên, định dạng bảng phân vùng sang chuẩn GPT và chia nhỏ thành nhiều phân vùng 1 GB để mô phỏng các đĩa vật lý độc lập.

[root@node ~]# parted /dev/vdb mklabel gpt
[root@node ~]# partprobe /dev/vdb

Sau đó, sử dụng fdisk để tạo các phân vùng cần thiết. Quá trình này được thực hiện tương tác, nhưng ta có thể tóm tắt các lệnh tạo phân vùng 1 GB liên tiếp:

[root@node ~]# fdisk /dev/vdb
# Lặp lại lệnh 'n' để tạo phân vùng, nhập kích thước '+1G' cho từng phân vùng từ 1 đến 12.
# Sau khi hoàn tất, lưu cấu hình bằng lệnh 'w'.

Xác nhận danh sách phân vùng đã được kernel nhận diện:

[root@node ~]# lsblk /dev/vdb
NAME      MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb        252:16   0  20G  0 disk
├─vdb1     252:17   0   1G  0 part
├─vdb2     252:18   0   1G  0 part
├─vdb3     252:19   0   1G  0 part
├─vdb4     252:20   0   1G  0 part
├─vdb5     252:21   0   1G  0 part
├─vdb6     252:22   0   1G  0 part
├─vdb7     252:23   0   1G  0 part
├─vdb8     252:24   0   1G  0 part
├─vdb9     252:25   0   1G  0 part
├─vdb10    252:26   0   1G  0 part
├─vdb11    252:27   0   1G  0 part
└─vdb12    252:28   0   1G  0 part

Triển khai RAID 0 (Striping)

RAID 0 yêu cầu tối thiểu 2 phân vùng. Ta sử dụng vdb1vdb2 để tạo mảng /dev/md0.

[root@node ~]# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/vdb1 /dev/vdb2

Kiểm tra trạng thái mảng và định dạng hệ thống tệp XFS:

[root@node ~]# mdadm --detail /dev/md0
[root@node ~]# mkfs.xfs -f /dev/md0

Tạo thư mục挂载 điểm và cấu hình khởi động tự động:

[root@node ~]# mkdir -p /data/striping
[root@node ~]# echo "/dev/md0 /data/striping xfs defaults 0 0" >> /etc/fstab
[root@node ~]# mount -a

Triển khai RAID 1 (Mirroring)

Sử dụng vdb3vdb4 để xây dựng mảng gương /dev/md1. Cơ chế này sẽ sao chép toàn bộ dữ liệu đồng thời lên cả hai phân vùng.

[root@node ~]# mdadm --create --verbose /dev/md1 --level=1 --raid-devices=2 /dev/vdb3 /dev/vdb4
[root@node ~]# mkfs.xfs -f /dev/md1
[root@node ~]# mkdir -p /data/mirror
[root@node ~]# echo "/dev/md1 /data/mirror xfs defaults 0 0" >> /etc/fstab
[root@node ~]# mount -a

Triển khai RAID 5 (Parity) và mô phỏng sự cố

RAID 5 yêu cầu tối thiểu 3 đĩa dữ liệu. Ở đây, ta dùng vdb5, vdb6, vdb7 làm đĩa chủ, và vdb8 làm đĩa dự phòng nóng (spare). Khi một đĩa chủ bị lỗi, kernel sẽ tự động kích hoạt đĩa spare để rebuild mảng.

[root@node ~]# mdadm --create --verbose /dev/md5 --level=5 --raid-devices=3 /dev/vdb5 /dev/vdb6 /dev/vdb7 --spare-devices=1 /dev/vdb8

Định dạng và gắn mount tương tự các bước trước:

[root@node ~]# mkfs.xfs -f /dev/md5
[root@node ~]# mkdir -p /data/parity
[root@node ~]# echo "/dev/md5 /data/parity xfs defaults 0 0" >> /etc/fstab
[root@node ~]# mount -a

Mô phỏng hỏng đĩa và phục hồi:

Giả sử vdb5 gặp sự cố vật lý. Ta báo cáo lỗi với mdadm:

[root@node ~]# mdadm /dev/md5 --fail /dev/vdb5

Kiểm tra trạng thái, ta sẽ thấy hệ thống tự động chuyển vdb8 sang trạng thái rebuilding để khôi phục dữ liệu. Sau khi hoàn tất, đĩa lỗi cần được loại bỏ khỏi cấu hình:

[root@node ~]# mdadm /dev/md5 --remove /dev/vdb5

Khi thay thế đĩa vật lý mới hoặc sửa chữa xong, gắn lại phân vùng vào mảng với vai trò dự phòng:

[root@node ~]# mdadm /dev/md5 --add /dev/vdb5

Triển khai RAID 10 (Nested Array)

RAID 10 không hỗ trợ tạo trực tiếp bằng một lệnh đơn giản trong các phiên bản kernel cũ. Quy trình chuẩn là tạo 2 mảng RAID 1 độc lập, sau đó gộp chúng thành RAID 0. Sử dụng vdb9 đến vdb12.

Bước 1: Tạo hai cặp gương /dev/md10a/dev/md10b

[root@node ~]# mdadm --create --verbose /dev/md10a --level=1 --raid-devices=2 /dev/vdb9 /dev/vdb10
[root@node ~]# mdadm --create --verbose /dev/md10b --level=1 --raid-devices=2 /dev/vdb11 /dev/vdb12

Bước 2: Gộp hai mảng trên thành RAID 0

[root@node ~]# mdadm --create --verbose /dev/md10 --level=0 --raid-devices=2 /dev/md10a /dev/md10b

Định dạng bằng ext4 (phù hợp cho workload có nhiều tệp nhỏ) và hoàn tất cấu hình:

[root@node ~]# mkfs.ext4 -F /dev/md10
[root@node ~]# mkdir -p /data/nested
[root@node ~]# echo "/dev/md10 /data/nested ext4 defaults 0 0" >> /etc/fstab
[root@node ~]# mount -a

Xác nhận cấu trúc phân cấp đã hoạt động đúng:

[root@node ~]# lsblk -o NAME,TYPE,MOUNTPOINT,FSTYPE | grep -E "vdb|md"
vdb1       part
└─md0      raid0
  └─/data/striping xfs
vdb2       part
└─md0      raid0
  └─/data/striping xfs
vdb3       part
└─md1      raid1
  └─/data/mirror xfs
vdb4       part
└─md1      raid1
  └─/data/mirror xfs
vdb5       part
└─md5      raid5
  └─/data/parity xfs
vdb6       part
└─md5      raid5
  └─/data/parity xfs
vdb7       part
└─md5      raid5
  └─/data/parity xfs
vdb8       part
└─md5      raid5
  └─/data/parity xfs
vdb9       part
└─md10a    raid1
  └─md10   raid0
    └─/data/nested ext4
vdb10      part
└─md10a    raid1
  └─md10   raid0
    └─/data/nested ext4
vdb11      part
└─md10b    raid1
  └─md10   raid0
    └─/data/nested ext4
vdb12      part
└─md10b    raid1
  └─md10   raid0
    └─/data/nested ext4

Thẻ: linux mdadm raid quản-lý-storage hệ-thống-tệp

Đăng vào ngày 1 tháng 6 lúc 17:11