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.
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
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.
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
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
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
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:
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
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.
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
Powered by BetterDocs
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 *
Δ
Ghi nhớ tôi
Chưa đăng ký? Đăng ký
Năm sinh
Bạn đã đăng ký? Đăng nhập ngay