Tạo Persistent Storage với GlusterFS cho Docker Swarm

Sơ lược về Persistent storage trong Docker Swarm #

Hiểu một cách đơn giản thì Persistent Storage là tất các các loại thiết bị có thể lưu trữ dữ liệu, ngay cả khi không cung cấp nguồn điện. Đối với Container, persistent storage là bộ nhớ lưu trữ được duy trì liên tục ngay cả khi container không chạy. Hay một cách hiểu khác, persistent storage đơn giản là một thư mục trên server mà khi container tắt vẫn có thể truy cập vào thư mục đó để đọc và thao tác dữ liệu. Hoặc, nếu container đó là một phần của Docker swarm thì persistent storage đó có thể chia sẻ giữa các node.

Đối với việc phát triển container, persistent storage là một công cụ bắt buộc. Với một số công nghệ container hiện nay, persistent storage có thể khá đơn giản. Nhưng vấn đề lớn nhất ở đây đó là chỉ có thể chạy nội bộ trong hệ thống. Do vậy, bạn cần phải sử dụng giải pháp bên thứ 3 như NFS hoặc GlusterFS. Trong đó, NFS có nhược điểm là chúng không được mã hoá. Nên rất nhiều nhà phát triển và doanh nghiệp lựa chọn GlusterFS. Trong bài viết này, mình sẽ nói về GlusterFS cũng như việc sử dụng nó trong Docker Swarm.

Chuẩn bị môi trường #

  • 3 Server Ubuntu 18.04 trong đó 1 master và 2 node để tạo thành Swarm Cluster.
  • User với quyền sudo trên máy ảo

Cập nhật và nâng cấp #

Trước khi bắt đầu, hãy cập nhật OS trên server lên phiên bản mới nhất:

sudo apt-get update
sudo apt-get upgrade -y

Chỉnh sửa file Hosts #

Trên mỗi server trong Cluster, thực hiện chỉnh file host giống như bên dưới:

192.168.1.67 docker-master
192.168.1.107 docker-node1
192.168.1.117 docker-node2

Lưu và đóng file hosts lại.

Cài đặt Swarm Cluster #

Trên mỗi server, thực hiện những câu lệnh để cài đặt Swarm:

sudo apt-get install docker.io -y

Bật và chỉnh cho docker luôn khởi động khi bật:

sudo systemctl start docker
sudo systemctl enable docker

Thêm user hiện tại của bạn vào nhóm người dùng Docker trên mỗi Server:

sudo usermod -aG docker $USER

Sau đó, bạn cần phải khởi tạo Swarm:

docker swarm init --advertise-addr MASTER_IP

Với MASTER_IP ở đây là địa chỉ IP của node master mà bạn định đặt.

Sau khi Swarm được khởi tạo, trên mỗi node còn lại, join vào Swarm:

docker swarm join --token SWMTKN-1-09c0p3304ookcnibhg3lp5ovkjnylmxwjac9j5puvsj2wjzhn1-2vw4t2474ww1mbq4xzqpg0cru 192.168.1.67:2377

Cài đặt GlusterFS #

Tiếp theo, bạn sẽ cài đặt GlusterFS trên mỗi Server theo các bước dưới đây:

sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:gluster/glusterfs-3.12
sudo apt-get update

Sau khi add repository, thực hiện cài đặt GlusterFS

sudo apt install glusterfs-server -y

Cuối cùng là bật và chỉnh cho GlusterFS luôn khởi động cùng hệ thống:

sudo systemctl start glusterd
sudo systemctl enable glusterd

Tạo khoá SSH #

bạn cần tạo khoá SSH trên mỗi server để sử dụng cho việc kết nối tiếp theo:

ssh-keygen -t rsa

Kết nối các Nodes #

Sau các bước trên, bạn đã có GlusterFS trên mỗi node. Tiếp theo sẽ là việc kết nối GlusterFS trên các node với nhau.

Lưu ý: câu lệnh dưới phải được thực hiện với user root (sudo -s) nếu không sẽ bị lỗi không có quyền ghi file logs:

gluster peer probe docker-node1; gluster peer probe docker-node2;

Hãy chắc chắn rằng các câu lệnh trên đã nhập đúng theo hostname mà bạn đã chỉnh sửa trong file Hosts ở bước trước đây. Một khi câu lệnh thực hiện xong, hãy kiểm tra các node đã kết nối với nhau:

gluster pool list

Lúc đó kết quả sẽ giống như hình bên dưới:

Tạo Gluster Volume cho Docker Swarm #

Tiếp theo, bạn cần phải tạo thư mục sử dụng cho Gluster Volume bằng câu lệnh sau: (chạy trên mỗi server)

sudo mkdir -p /gluster/volume1

Sau đó bạn tạo volume cho Cluster sử dụng câu lệnh sau: (chỉ chạy trên node master)

sudo gluster volume create staging-gfs replica 3 docker-master:/gluster/volume1 docker-node1:/gluster/volume1 docker-node2:/gluster/volume1 force

Sau khi câu lệnh trên thực hiện xong, bật Volume: (chỉ chạy trên node master)

sudo gluster volume start staging-gfs

Lúc này, volume đã bật và đang chạy, nhưng bạn cần phải chắc chắn volume sẽ được mount mỗi khi server khởi động. Ta sẽ thực hiện mount volume vào /mnt:

sudo -s


echo 'localhost:/staging-gfs /mnt glusterfs defaults,_netdev,backupvolfile-server=localhost 0 0' >> /etc/fstab

mount.glusterfs localhost:/staging-gfs /mnt

chown -R root:docker /mnt

exit

Kiểm tra lại thông tin Mount của Gluster Volume:

df -h

Dùng Gluster Volume cho Docker #

Việc sử dụng Gluster Volume với Docker khá dễ dàng, bạn chỉ cần thêm một đoạn chỉ định volume trong file YAML để deploy một ứng dụng nào đó là được, trong bài viết này, mình sẽ lấy ví dụ về sử dụng cho Mysql:

volumes:
      - type: bind
        source: /mnt/staging_mysql
        target: /opt/mysql/data

Do bạn đã mount volume vào /mnt cho nên dữ liệu của Mysql khi được ghi vào volume sẽ được đồng bộ vào cả 3 node.

Kết luận #

Như vậy qua bài hướng dẫn trên, bạn đã biết cách cài đặt GlusterFS để tạo Gluster Volume dùng cho Docker Swarm. Với việc dùng Gluster Volume, dữ liệu phát sinh trong quá trình sử dụng Docker lưu trữ trên Disk sẽ được mã hoá. Điều đó sẽ đảm bảo được yếu tố an toàn cho dữ liệu của doanh nghiệp cũng như người dùng.

Ngoài ra, bạn đọc có thể tham khảo thêm về việc quản lý container trong Docker theo đường dẫn bên dưới:

Nguồn bài viết: The New Stack

Mình là Tùng, hiện đang là DevOps tại Công Ty CP EcoIT. Với kinh nghiệm và thủ thuật đúc rút được từ trong công việc, mình muốn chia sẻ cho bạn đọc cùng biết và cùng nhau học thêm nhiều điều mới trong lĩnh vực DevOps.

Powered by BetterDocs

Để lại bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *