vohongnhuy
Moderator
High Availability Disk on Linux use GlusterFS
I. Đặt vấn đề
Giả sử một doanh nghiệp có hệ thống các server Linux nhưng không có các giải pháp lưu trữ độc lập (SAN hoặc NAT).
Làm thế nào để tiết kiệm chi phí đầu tư hạ tầng, kết hợp các disk trên từng server tạo thành một hệ thống lưu trữ chung duy nhất (storage pool), với tính sẵn sàng cao, tính mở rộng, tính an toàn dữ liệu tương tự SAN/NAT?
II. Giải pháp
Sử dụng giải pháp phần mềm GlsuterFS trên Linux có thể giúp giải quyết vấn đề đặt ra. GlusterFS có chức năng tương tự công nghệ RAID và Storage Space Direct trên Window.
Tham khảo: https://www.gluster.org/
Gluster là một hệ thống phân tán, có thể mở rộng, tổng hợp các tài nguyên lưu trữ từ nhiều máy chủ khác nhau thành một không gian lưu trữ duy nhất.
Ưu điểm
Các doanh nghiệp có thể mở rộng quy mô, hiệu suất và tính sẵn sàng theo yêu cầu, trên cơ sở tại chỗ, đám mây công cộng và môi trường lai.
Mô hình triển khai
Các loại volume
Volume là tập hợp các hệ thống lưu trữ nhỏ lẻ (gọi là brick) và hầu hết các hoạt động của hệ thống tệp xảy ra trên ổ đĩa. Hệ thống tập tin Gluster hỗ trợ các loại volume khác nhau dựa trên các yêu cầu. Một số volume tốt cho việc tăng kích thước lưu trữ, một số để cải thiện hiệu suất và một số cho cả hai.
Đây là volume glusterfs mặc định, tức là trong khi tạo volume nếu không chỉ định loại volume, tùy chọn mặc định là Distributed Glusterfs Volume. Ở đây, các tập tin được phân phối trên các brick khác nhau trong volume. Vì vậy, File1 chỉ có thể được lưu trữ trong brick1 hoặc brick2 chứ không phải trên cả hai. Do đó không có dư thừa dữ liệu. Mục đích của một volume lưu trữ như vậy là để dễ dàng và tiện lợi hơn volume dung lượnzg lớn. Tuy nhiên, điều này cũng có nghĩa là một brick lỗi sẽ dẫn đến mất dữ liệu hoàn toàn.
Volume này khắc phục vấn đề mất dữ. Ở đây các bản sao của dữ liệu được duy trì trên tất cả các brick. Số lượng bản sao trong volume có thể được quyết định bởi cấu hình khi tạo volume. Vì vậy, cần phải có ít nhất hai brick để tạo ra một volume với 2 bản sao hoặc ba brick để tạo ra một volume với 3 bản sao. Một lợi thế lớn của volume như vậy là ngay cả khi một brick bị lỗi, dữ liệu vẫn có thể được truy cập từ các brick sao chép của nó. Một volume như vậy được sử dụng cho độ tin cậy cao, tính sẵn sàng cao hơn và dự phòng dữ liệu.
Số lượng brick phải là bội số của số lượng bản sao. Ngoài ra thứ tự chỉ định là các brick liền kề trở thành bản sao của nhau. Loại âm lượng này được sử dụng khi có yêu cầu sẵn sàng dữ liệu cao và tỷ lệ lưu trữ là bắt buộc. Vì vậy, nếu có tám brick và bản sao yêu cầu là 2 thì 2 brick đầu tiên trở thành bản sao của nhau, sau đó 2 brick tiếp theo và cứ thế. Volume này được ký hiệu là 4x2. Tương tự, nếu có 8 brick và bản sao yêu cầu là 4 thì 4 brick trở thành bản sao của nhau và chúng được ký hiệu là 2x4.
Xem xét một tệp lớn đang được lưu trữ trong một brick thường được nhiều truy cập cùng một lúc. Điều này sẽ gây ra quá nhiều tải cho một brick và sẽ làm giảm hiệu suất. Trong striped volume, dữ liệu được lưu trữ trong các brick sau khi chia thành các phần khác nhau. Vì vậy, tệp lớn sẽ được chia thành các phần nhỏ hơn (bằng số lượng brick trong volume) và mỗi phần được lưu trữ trong một brick. Tải được phân phối và tệp có thể được tìm nạp nhanh hơn nhưng không có dữ liệu dự phòng.
Điều này tương tự với striped volume nhưng ta có thể tăng kích thước volume. Số lượng brick phải là bội số của số strips.
III. Thử nghiệm giải pháp
1. Mô hình hệ thống lab thử nghiệm các giải pháp HA Disk với GlusterFS trên VMWare
Lab triển khai theo mô hình GlusterFS Replicated Volume
Chuẩn bị: Hai máy ảo VMWare chạy server Linux Centos 7 Minimal 64bit (mỗi máy 2 card mạng, nên dùng riêng một cho HA&DR (subnet 172.16.1.0/24))
Thêm 2 dòng sau vào file /etc/hosts trên mỗi máy:
172.16.1.11 node1
172.16.1.12 node2
2. Triển khai GlusterFS Replica Volume
Bước 1: Tạo phân vùng mới cho hard disk thêm vào máy ảo
Các cấu hình sau thực hiện trên node 1, cần thực hiện tương tự trên node2.
Trong từng máy ảo Centos, kiểm tra các hard disk và phân vùng bằng lệnh
#fdisk -l
Ta thấy hard disk mới thêm vào là /dev/sdb có dung lượng 20GB và chưa được phân vùng.
Tạo một phân vùng mới với disk trên:
#fdisk /dev/sdb
Bấm m để hiểu các action
Bấm n để thêm phân vùng mới
Bấm Enter 4 lần (sử dụng các cài đặt mặc định) hoặc nhập các cài đặt thay đổi tuỳ ý
Bấm p để xem kết quả: ta có phân vùng /dev/sdb1
Bấm w để lưu kết quả
Định dạng chuẩn cho /dev/sdb1. Với Linux, ta có các định dạng như ext2, ext3, ext4, XFS, JFS, …
Dùng lệnh tương tự sau để thay đổi, ở đây sử dụng chuẩn ext4:
#mkfs.ext4 /dev/sdb1
Kiểm tra cấu hình đúng
Bước 2: Tạo thư mục liên kết với disk
Ta có disk mới thêm vào
Kiểm tra bằng lệnh
#df -h
Tự động mount ổ mỗi khi khởi động lại hệ điều hành
Thêm dòng sau vào file /etc/fstab:
/dev/sdb1 /home/node1disk ext4 defaults 0 0
#vi /etc/fstab
Kiểm tra bằng lệnh
#df -h
Tự động mount ổ mỗi khi khởi động lại hệ điều hành
Thêm dòng sau vào file /etc/fstab:
/dev/sdb1 /home/node2disk ext4 defaults 0 0
#vi /etc/fstab
Thực hiện tạo 2 thư mục
Bước 3: Cài đặt và cấu hình GlusterFS
Cài đặt và start dịch vụ GlusterFS (thực hiện tương tự nhau trên 2 node):
#yum install centos-release-gluster -y
#yum install glusterfs-server -y
#systemctl enable glusterd
#systemctl start glusterd
#systemctl status glusterd
Lưu ý mở tường lửa cho GlusterFS trên cả 2 node
#firewall-cmd --permanent --add-service=glusterfs
#firewall-cmd --reload
Kết nối các node: trên node1
#gluster peer probe node2
Trên node 2 cũng làm tương tự
Xem status của pool
#gluster peer status
Taọ Volume dạng Replicated Glusterfs Volume: dữ liệu sẽ được nhân bản đến những brick còn lại. Khi dữ liệu trên 1 brick bị mất (tức là dữ liệu lưu trên một server) thì dữ liệu vẫn còn trên brick còn lại và tự động đồng bộ lại cho cả 2 server. Đảm bảo dữ liệu luôn đồng bộ và sẵn sàng. (Chỉ thực hiện trên 1 node)
Trên node1
#gluster volume create storagepool replica 2 transport tcp node1:/home/node1disk node2:/home/node2disk
Do lab chỉ có 2 node nên có cảnh báo về trường hợp split-brain, chọn ‘y’ và bấm Enter.
Start volume vừa tạo
#gluster volume start storagepool
Kiểm tra cấu hình
#gluster volume info
Bây giờ, trên mỗi node sẽ có 1 disk là /storagepool. Dữ liệu trên disk này ở một node sẽ được sao chép đi các node khác. Để sử dụng, ta cần mount disk này với một thư mục
#mount -t glusterfs node1:/storagepool /home/glusterdisk1
#mount -t glusterfs node1:/storagepool /home/glusterdisk2
Thử ghi dữ liệu vào thư mục /home/glusterdisk1
Dữ liệu được tự động sao chép sang /home/glusterdisk2 trên node2
Tự động mount ổ glusterfs với thư mục mỗi khi khởi động lại hệ điều hành
Thêm file /etc/fstab:
#vi /etc/fstab
Tham khảo https://docs.gluster.org/en/latest/ hoặc lệnh #gluster help để tìm hiểu thêm các cấu hình khác.
---HẾT---
I. Đặt vấn đề
Giả sử một doanh nghiệp có hệ thống các server Linux nhưng không có các giải pháp lưu trữ độc lập (SAN hoặc NAT).
Làm thế nào để tiết kiệm chi phí đầu tư hạ tầng, kết hợp các disk trên từng server tạo thành một hệ thống lưu trữ chung duy nhất (storage pool), với tính sẵn sàng cao, tính mở rộng, tính an toàn dữ liệu tương tự SAN/NAT?
II. Giải pháp
Sử dụng giải pháp phần mềm GlsuterFS trên Linux có thể giúp giải quyết vấn đề đặt ra. GlusterFS có chức năng tương tự công nghệ RAID và Storage Space Direct trên Window.
Tham khảo: https://www.gluster.org/
Gluster là một hệ thống phân tán, có thể mở rộng, tổng hợp các tài nguyên lưu trữ từ nhiều máy chủ khác nhau thành một không gian lưu trữ duy nhất.
Ưu điểm
- Tiếp cận lên đến vài petabyte
- Xử lý hàng ngàn client
- Tương thích POSIX
- Có thể sử dụng cho bất kỳ hệ thống tập tin ondisk nào hỗ trợ các thuộc tính mở rộng
- Có thể truy cập bằng các giao thức chuẩn công nghiệp như NFS và SMB
- Mã nguồn mở
Các doanh nghiệp có thể mở rộng quy mô, hiệu suất và tính sẵn sàng theo yêu cầu, trên cơ sở tại chỗ, đám mây công cộng và môi trường lai.
Mô hình triển khai
Các loại volume
Volume là tập hợp các hệ thống lưu trữ nhỏ lẻ (gọi là brick) và hầu hết các hoạt động của hệ thống tệp xảy ra trên ổ đĩa. Hệ thống tập tin Gluster hỗ trợ các loại volume khác nhau dựa trên các yêu cầu. Một số volume tốt cho việc tăng kích thước lưu trữ, một số để cải thiện hiệu suất và một số cho cả hai.
- Distributed Glusterfs Volume
Đây là volume glusterfs mặc định, tức là trong khi tạo volume nếu không chỉ định loại volume, tùy chọn mặc định là Distributed Glusterfs Volume. Ở đây, các tập tin được phân phối trên các brick khác nhau trong volume. Vì vậy, File1 chỉ có thể được lưu trữ trong brick1 hoặc brick2 chứ không phải trên cả hai. Do đó không có dư thừa dữ liệu. Mục đích của một volume lưu trữ như vậy là để dễ dàng và tiện lợi hơn volume dung lượnzg lớn. Tuy nhiên, điều này cũng có nghĩa là một brick lỗi sẽ dẫn đến mất dữ liệu hoàn toàn.
- Replicated Glusterfs Volume
Volume này khắc phục vấn đề mất dữ. Ở đây các bản sao của dữ liệu được duy trì trên tất cả các brick. Số lượng bản sao trong volume có thể được quyết định bởi cấu hình khi tạo volume. Vì vậy, cần phải có ít nhất hai brick để tạo ra một volume với 2 bản sao hoặc ba brick để tạo ra một volume với 3 bản sao. Một lợi thế lớn của volume như vậy là ngay cả khi một brick bị lỗi, dữ liệu vẫn có thể được truy cập từ các brick sao chép của nó. Một volume như vậy được sử dụng cho độ tin cậy cao, tính sẵn sàng cao hơn và dự phòng dữ liệu.
- Distributed Replicated Glusterfs Volume
Số lượng brick phải là bội số của số lượng bản sao. Ngoài ra thứ tự chỉ định là các brick liền kề trở thành bản sao của nhau. Loại âm lượng này được sử dụng khi có yêu cầu sẵn sàng dữ liệu cao và tỷ lệ lưu trữ là bắt buộc. Vì vậy, nếu có tám brick và bản sao yêu cầu là 2 thì 2 brick đầu tiên trở thành bản sao của nhau, sau đó 2 brick tiếp theo và cứ thế. Volume này được ký hiệu là 4x2. Tương tự, nếu có 8 brick và bản sao yêu cầu là 4 thì 4 brick trở thành bản sao của nhau và chúng được ký hiệu là 2x4.
- Striped Glusterfs Volume
Xem xét một tệp lớn đang được lưu trữ trong một brick thường được nhiều truy cập cùng một lúc. Điều này sẽ gây ra quá nhiều tải cho một brick và sẽ làm giảm hiệu suất. Trong striped volume, dữ liệu được lưu trữ trong các brick sau khi chia thành các phần khác nhau. Vì vậy, tệp lớn sẽ được chia thành các phần nhỏ hơn (bằng số lượng brick trong volume) và mỗi phần được lưu trữ trong một brick. Tải được phân phối và tệp có thể được tìm nạp nhanh hơn nhưng không có dữ liệu dự phòng.
- Distributed Striped Glusterfs Volume
Điều này tương tự với striped volume nhưng ta có thể tăng kích thước volume. Số lượng brick phải là bội số của số strips.
III. Thử nghiệm giải pháp
1. Mô hình hệ thống lab thử nghiệm các giải pháp HA Disk với GlusterFS trên VMWare
Lab triển khai theo mô hình GlusterFS Replicated Volume
Chuẩn bị: Hai máy ảo VMWare chạy server Linux Centos 7 Minimal 64bit (mỗi máy 2 card mạng, nên dùng riêng một cho HA&DR (subnet 172.16.1.0/24))
- Node1: 172.16.1.11 (hostname: node1)
- Node2: 172.16.1.12 (hostname: node2)
- Vi text editor
Thêm 2 dòng sau vào file /etc/hosts trên mỗi máy:
172.16.1.11 node1
172.16.1.12 node2
2. Triển khai GlusterFS Replica Volume
Bước 1: Tạo phân vùng mới cho hard disk thêm vào máy ảo
Các cấu hình sau thực hiện trên node 1, cần thực hiện tương tự trên node2.
Trong từng máy ảo Centos, kiểm tra các hard disk và phân vùng bằng lệnh
#fdisk -l
Ta thấy hard disk mới thêm vào là /dev/sdb có dung lượng 20GB và chưa được phân vùng.
Tạo một phân vùng mới với disk trên:
#fdisk /dev/sdb
Bấm m để hiểu các action
Bấm n để thêm phân vùng mới
Bấm Enter 4 lần (sử dụng các cài đặt mặc định) hoặc nhập các cài đặt thay đổi tuỳ ý
Bấm p để xem kết quả: ta có phân vùng /dev/sdb1
Bấm w để lưu kết quả
Định dạng chuẩn cho /dev/sdb1. Với Linux, ta có các định dạng như ext2, ext3, ext4, XFS, JFS, …
Dùng lệnh tương tự sau để thay đổi, ở đây sử dụng chuẩn ext4:
#mkfs.ext4 /dev/sdb1
Kiểm tra cấu hình đúng
Bước 2: Tạo thư mục liên kết với disk
Ta có disk mới thêm vào
- Node1: /dev/sdb1
- Node2: /dev/sdb1
- Node1: /home/node1disk
- Node2: /home/node2disk
- Node1:
Kiểm tra bằng lệnh
#df -h
Tự động mount ổ mỗi khi khởi động lại hệ điều hành
Thêm dòng sau vào file /etc/fstab:
/dev/sdb1 /home/node1disk ext4 defaults 0 0
#vi /etc/fstab
- Node2:
Kiểm tra bằng lệnh
#df -h
Tự động mount ổ mỗi khi khởi động lại hệ điều hành
Thêm dòng sau vào file /etc/fstab:
/dev/sdb1 /home/node2disk ext4 defaults 0 0
#vi /etc/fstab
Thực hiện tạo 2 thư mục
- Node1: /home/node1disk/data
- Node2: /home/node2disk/data
- Mỗi thư mục trên trong lab này là một brick trong mô hình GlusterFS Replica Volume.
Bước 3: Cài đặt và cấu hình GlusterFS
Cài đặt và start dịch vụ GlusterFS (thực hiện tương tự nhau trên 2 node):
#yum install centos-release-gluster -y
#yum install glusterfs-server -y
#systemctl enable glusterd
#systemctl start glusterd
#systemctl status glusterd
Lưu ý mở tường lửa cho GlusterFS trên cả 2 node
#firewall-cmd --permanent --add-service=glusterfs
#firewall-cmd --reload
Kết nối các node: trên node1
#gluster peer probe node2
Trên node 2 cũng làm tương tự
Xem status của pool
#gluster peer status
Taọ Volume dạng Replicated Glusterfs Volume: dữ liệu sẽ được nhân bản đến những brick còn lại. Khi dữ liệu trên 1 brick bị mất (tức là dữ liệu lưu trên một server) thì dữ liệu vẫn còn trên brick còn lại và tự động đồng bộ lại cho cả 2 server. Đảm bảo dữ liệu luôn đồng bộ và sẵn sàng. (Chỉ thực hiện trên 1 node)
Trên node1
#gluster volume create storagepool replica 2 transport tcp node1:/home/node1disk node2:/home/node2disk
Do lab chỉ có 2 node nên có cảnh báo về trường hợp split-brain, chọn ‘y’ và bấm Enter.
Start volume vừa tạo
#gluster volume start storagepool
Kiểm tra cấu hình
#gluster volume info
Bây giờ, trên mỗi node sẽ có 1 disk là /storagepool. Dữ liệu trên disk này ở một node sẽ được sao chép đi các node khác. Để sử dụng, ta cần mount disk này với một thư mục
- Node1:
#mount -t glusterfs node1:/storagepool /home/glusterdisk1
- Node2:
#mount -t glusterfs node1:/storagepool /home/glusterdisk2
Thử ghi dữ liệu vào thư mục /home/glusterdisk1
Dữ liệu được tự động sao chép sang /home/glusterdisk2 trên node2
Tự động mount ổ glusterfs với thư mục mỗi khi khởi động lại hệ điều hành
Thêm file /etc/fstab:
#vi /etc/fstab
Tham khảo https://docs.gluster.org/en/latest/ hoặc lệnh #gluster help để tìm hiểu thêm các cấu hình khác.
---HẾT---