High Availability Disk on Linux use GlusterFS

Discussion in 'LINUX SERVICE' started by vohongnhuy, Jun 6, 2019.

  1. vohongnhuy

    vohongnhuy New Member

    Joined:
    Mar 11, 2019
    Messages:
    9
    Likes Received:
    0
    Trophy Points:
    1
    Gender:
    Male
    Location:
    HCM
    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/

    glfs()


    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
    glfs()

    Đâ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
    glfs()

    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
    glfs()

    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
    glfs()

    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
    glfs()

    Đ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
    glfs()

    Lab triển khai theo mô hình GlusterFS Replicated Volume

    glfs()

    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)
    Cài đặt các dich vụ cơ bản sau lên hai server:

    • Vi text editor
    Thêm vào mỗi máy ảo một hard disk mới với dung lượng tuỳ chọn, reboot máy ảo.

    glfs()

    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

    glfs()

    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

    glfs()

    Bấm m để hiểu các action

    glfs()

    Bấm n để thêm phân vùng mới

    glfs()

    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ỳ ý

    glfs()

    Bấm p để xem kết quả: ta có phân vùng /dev/sdb1

    glfs()

    Bấm w để lưu kết quả

    glfs()


    Đị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

    glfs()

    Kiểm tra cấu hình đúng

    glfs()


    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
    Tạo thư mục

    • Node1: /home/node1disk

    • Node2: /home/node2disk
    Mount disk với thư mục

    • Node1:
    #mount /dev/sdb1 /home/node1disk

    Kiểm tra bằng lệnh

    #df -h

    glfs()

    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

    glfs()

    • Node2:
    #mount /dev/sdb1 /home/node2disk

    Kiểm tra bằng lệnh

    #df -h

    glfs()

    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

    glfs()

    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

    glfs()

    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

    glfs()

    Trên node 2 cũng làm tương tự

    glfs()

    Xem status của pool

    #gluster peer status

    glfs()

    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

    glfs()

    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

    glfs()

    Kiểm tra cấu hình

    #gluster volume info

    glfs()

    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:
    #mkdir /home/glusterdisk1

    #mount -t glusterfs node1:/storagepool /home/glusterdisk1

    glfs()

    • Node2:
    #mkdir /home/glusterdisk2

    #mount -t glusterfs node1:/storagepool /home/glusterdisk2

    glfs()

    Thử ghi dữ liệu vào thư mục /home/glusterdisk1

    glfs()

    Dữ liệu được tự động sao chép sang /home/glusterdisk2 trên node2

    glfs()

    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

    glfs()


    glfs()


    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---
     

Share This Page