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:
- Giới thiệu tổng quát về Portainer – Công cụ quản lý Docker Container (Phần 1)
- Cấu hình Portainer – Giám sát Docker trên remote host (Phần 2)
Nguồn bài viết: The New Stack