Quay lại

Cài đặt Swarm cluster 3 node trên AWS dùng EC2 Chuyên mục Docker    2023-12-23    17 Lượt xem    15 Lượt thích    comment-3 Created with Sketch Beta. 0 Bình luận

Cài đặt Swarm cluster 3 node trên AWS dùng EC2

Để cài đặt một Swarm cluster trên AWS sử dụng Docker Swarm, bạn cần thực hiện một số bước. Dưới đây là hướng dẫn chi tiết:

Bước 1: Chuẩn bị AWS

  1. Đăng nhập vào AWS Management Console và tạo 3 EC2 instances cho Swarm cluster. Đảm bảo chúng ở cùng một VPC và subnet.

  2. Chọn AMI phù hợp, chẳng hạn Amazon Linux hoặc Ubuntu.

  3. Gán các role IAM cho EC2 instances để chúng có thể truy cập các dịch vụ AWS như S3 hoặc CloudWatch nếu cần.

  4. Mở các port cần thiết trong Security Group cho việc truy cập và giao tiếp giữa các node Swarm. Thông thường, bạn cần mở TCP port 2377, UDP port 7946, và TCP/UDP port 4789.

Bước 2: Cài đặt Docker trên các EC2 instances

Trên mỗi EC2 instance, các bạn cần phải cài docker , mình đã có hướng dẫn trên tất cả OS các bạn có thể xemchi tiết và cụ thể ở Bài 3: Cài đặt Docker và cách thức hoạt động trên từng OS:

Bước 3: Cấu hình Swarm Cluster

  1. Trên máy chủ 1, sử dụng lệnh sau để khởi tạo Swarm:

    docker swarm init --advertise-addr <IP-of-Node-1>​

    Lưu lại mã thông báo (token) mà Docker Swarm cung cấp.

  2. Trên máy chủ còn lại, sử dụng mã thông báo đã lưu để tham gia vào Swarm:

    docker swarm join --token <your-token> <IP-of-Node-1>:2377​

    Lặp lại bước này trên tất cả các node còn lại.

Bước 4: Xác nhận Swarm Cluster

Để xác nhận rằng Swarm Cluster của bạn đã được cấu hình đúng, trở lại máy chủ 1 và chạy lệnh:

docker node ls​

Bạn sẽ thấy danh sách các node trong cluster.

Bước 5: Triển khai các dịch vụ

Bây giờ bạn có thể triển khai các dịch vụ Docker trên Swarm Cluster của mình bằng cách sử dụng Docker Compose hoặc các lệnh docker service.

Lưu ý rằng đây chỉ là hướng dẫn cơ bản, và có thể có điều chỉnh tùy thuộc vào yêu cầu cụ thể của bạn.

Tạo và cập nhập Service

Trong Docker Swarm, dịch vụ (service) là đơn vị cơ bản để triển khai ứng dụng. Dưới đây là cách tạo và cập nhật một dịch vụ trong Docker Swarm:

Tạo một Dịch vụ

Để tạo một dịch vụ, bạn có thể sử dụng lệnh docker service create. Dưới đây là một ví dụ đơn giản:

docker service create --name web --replicas 3 -p 80:80 nginx:latest​

Trong ví dụ này:

  • --name web: Đặt tên cho dịch vụ là "web".
  • --replicas 3: Yêu cầu Swarm triển khai 3 bản sao của dịch vụ.
  • -p 80:80: Chuyển tiếp cổng 80 từ máy chủ đến container.
  • nginx:latest: Sử dụng hình ảnh nginx để triển khai dịch vụ.

Xem Danh Sách Dịch Vụ

Để xem danh sách các dịch vụ đang chạy, sử dụng lệnh:

docker service ls​

Cập Nhật Dịch Vụ

Để cập nhật một dịch vụ, bạn có thể sử dụng lệnh docker service update. Dưới đây là một ví dụ:

docker service update --replicas 5 web​

Trong ví dụ này, chúng ta đang cập nhật dịch vụ có tên "web" để có 5 bản sao thay vì 3.

Xem Trạng Thái Dịch Vụ

Để xem trạng thái của dịch vụ và xác định nó đang chạy ở đâu, bạn có thể sử dụng lệnh:

docker service ps web​

Xóa Dịch Vụ

Để xóa một dịch vụ, sử dụng lệnh:

docker service rm web​

Lưu ý rằng việc xóa dịch vụ sẽ dẫn đến việc dừng và xóa tất cả các bản sao container của dịch vụ đó.

Xem logs Dịch Vụ

docker service logs <tên_dịch_vụ>

Trong Docker, docker service logs là một lệnh dùng để xem logs của một dịch vụ (service). Docker Swarm, một phần của Docker, cho phép bạn triển khai và quản lý các ứng dụng được đóng gói trong các container trên một cụm máy chủ.

Khi bạn triển khai một dịch vụ bằng Docker Swarm, các container của dịch vụ đó sẽ chạy trên nhiều máy chủ và có thể được tự động chuyển đổi giữa các máy chủ khác nhau để đảm bảo tính khả dụng và cân bằng tải. Lệnh docker service logs giúp bạn theo dõi logs của các container thuộc một dịch vụ cụ thể trong Docker Swarm.

Lệnh này sẽ hiển thị logs của tất cả các container đang chạy dịch vụ đó. Bạn có thể sử dụng các tùy chọn khác để điều chỉnh định dạng và phạm vi của logs.

Đây là những lệnh cơ bản để tạo, cập nhật, xem trạng thái, và xóa dịch vụ trong Docker Swarm. Đối với các triển khai thực tế, bạn có thể cần điều chỉnh các cài đặt và tham số tùy thuộc vào yêu cầu cụ thể của ứng dụng của bạn.

Note: Cho dù có xóa containers trên 1 node thì ngay lập tức nó sẽ được tạo lại cái mới => đó là cơ chế docker swarm. Bản thân docker swarm luôn monitor các tasks trên từng node mà nó đã phân phối và nếu có 1 tác vụ nào đó bị lỗi hoặc ảnh hưởng đến thông số đã khai báo vd: replica là 5, thì ngay lập tức nó sẽ tạo lại mà chúng ta k cần phải can thiệp.

Một số câu lệnh quản trị Swarm khác

Xem và Quản lý Node:

  1. Xem danh sách các node trong Swarm:

    docker node ls​
  2. Xem thông tin chi tiết về một node cụ thể:

    docker node inspect <node_id or node_name>​
  3. Thêm một node vào Swarm:

    docker swarm join-token worker​

    Chạy lệnh này trên node mà bạn muốn thêm vào Swarm.

  4. Xem thông tin về tài nguyên của mỗi node:

    docker node ps <node_id or node_name>​

Quản lý Containers trên Node:

  1. Xem danh sách các container đang chạy trên một node cụ thể:

    docker ps --filter "node=<node_id or node_name>"​
  2. Xem logs của container trên một node:

    docker logs <container_id>​
  3. Xóa một container trên một node:

    docker rm <container_id>​

Quản lý Configs và Secrets trên Node:

  1. Xem danh sách các configs trên node:

    docker config ls --filter "node=<node_id or node_name>"​
  2. Xem danh sách các secrets trên node:

    docker secret ls --filter "node=<node_id or node_name>"​

Thao tác trên Node:

  1. Dừng hoặc bật tình trạng drain cho một node (chấp nhận hoặc không chấp nhận việc triển khai container lên node đó):

    docker node update --availability drain <node_id or node_name>​

    Hoặc để bật trở lại:

    docker node update --availability active <node_id or node_name>​
  2. Xóa một node khỏi Swarm:

    docker node rm <node_id or node_name>​

Lưu ý rằng bạn cũng có thể sử dụng các lệnh thông thường của Docker để thực hiện các thao tác với containers, images, networks, volumes, configs và secrets trên một node cụ thể trong Swarm bằng cách sử dụng các tùy chọn --node hoặc --filter trong các lệnh đó.

Sử dụng Overlay Network giữa các node trong Swarm

Docker Swarm là một công cụ quản lý container có thể mở rộng được tích hợp trong Docker. Khi triển khai các ứng dụng phức tạp trên Docker Swarm, việc quản lý mạng giữa các node trở nên quan trọng. Overlay network là một tính năng mạng cung cấp kết nối an toàn và bảo mật giữa các container chạy trên các node khác nhau trong Docker Swarm.

Dưới đây là hướng dẫn cơ bản về cách sử dụng Overlay Network trong Docker Swarm:

1. Khởi tạo Docker Swarm:

Chạy lệnh sau trên một node để khởi tạo Docker Swarm:

docker swarm init​

2. Tạo một Overlay Network:

docker network create --driver overlay my-overlay-network​

3. Triển khai các dịch vụ và kết nối chúng với Overlay Network:

# Ví dụ triển khai một dịch vụ web trên Overlay Network
docker service create --name web --network my-overlay-network -p 80:80 nginx​

4. Xem thông tin về Overlay Network:

docker network inspect my-overlay-network​

5. Thêm node vào Swarm (nếu cần):

Nếu bạn có nhiều node trong Swarm và muốn kết nối chúng với Overlay Network, hãy thêm node vào Swarm bằng cách sử dụng lệnh docker swarm join.

Lưu ý:

  1. Overlay Network cung cấp tính bảo mật:

    • Dữ liệu trên mạng Overlay được mã hóa, giúp bảo vệ thông tin khỏi sự đánh cắp.
  2. Tự động định tuyến:

    • Mạng Overlay tự động định tuyến các gói tin giữa các container trên các node khác nhau.
  3. Chia sẻ mạng giữa các dịch vụ:

    • Các dịch vụ khác nhau có thể chia sẻ mạng Overlay, giúp chúng có thể tương tác với nhau.
  4. Không giới hạn số lượng node:

    • Mạng Overlay có thể mở rộng đến số lượng node lớn mà không ảnh hưởng đến hiệu suất.

Hãy nhớ thay thế "my-overlay-network" bằng tên mạng bạn muốn sử dụng. Overlay Network giúp tạo ra một môi trường mạng ảo chéo nhiều node, giúp các container trên Swarm có thể liên kết với nhau dễ dàng mà không cần biết vị trí cụ thể của chúng.

Nguyên lý VIP và Load Balancer trong Swarm

Nguyên lý VIP:

Trong Docker Swarm, nguyên lý VIP (Virtual IP) đóng vai trò quan trọng trong việc quản lý traffic và cung cấp một cách tiếp cận đơn giản và trừu tượng cho các dịch vụ (services) chạy trên nhiều node khác nhau trong một swarm. Dưới đây là chi tiết về nguyên lý VIP trong Docker Swarm:

  1. Mục tiêu của VIP:

    • Cung cấp một địa chỉ IP ảo (Virtual IP) cho một dịch vụ hoặc một nhóm các dịch vụ trong Docker Swarm.
    • Cho phép truy cập ứng dụng thông qua một địa chỉ IP chung, không phụ thuộc vào node cụ thể nào trong swarm.
  2. Triển khai:

    • Khi bạn triển khai một dịch vụ trong Docker Swarm và đặt cấu hình để sử dụng VIP, Docker tự động tạo ra một địa chỉ IP ảo cho dịch vụ đó.
    • VIP được định tuyến để chuyển tiếp traffic đến các container của dịch vụ trên các node khác nhau trong swarm.
  3. Cơ chế hoạt động:

    • VIP đảm bảo rằng bất kỳ request nào đến địa chỉ IP của dịch vụ đều được chuyển tiếp đến một trong những container của dịch vụ, dựa trên một chiến lược mặc định hoặc cấu hình của người dùng.
    • Điều này giúp ẩn đi sự phức tạp của việc quản lý các container trên nhiều node.
  4. Ưu điểm:

    • Đơn giản hóa quản lý: VIP giúp đơn giản hóa quá trình truy cập dịch vụ trong môi trường phân tán.
    • Tích hợp với DNS: VIP thường được liên kết với tên miền DNS, giúp dễ dàng xác định và truy cập dịch vụ.
  5. Hạn chế:

    • Không áp dụng cho chế độ global: VIP thường chỉ áp dụng cho các dịch vụ triển khai trong chế độ replicated, không áp dụng cho chế độ global khi muốn triển khai mỗi container trên mỗi node.
  6. Ví dụ:

    • Khi bạn triển khai một service với VIP, Docker Swarm tạo ra một địa chỉ IP ảo (ví dụ: 10.0.0.1) cho service đó. Các container của service sẽ có địa chỉ IP thực tế trên các node khác nhau (ví dụ: 192.168.1.2, 192.168.1.3), nhưng traffic đến 10.0.0.1 sẽ được chuyển tiếp đến các container này.

Nguyên lý VIP giúp tạo ra một lớp trừu tượng để quản lý và truy cập các dịch vụ trong Docker Swarm, đồng thời giảm sự phức tạp của việc quản lý các container chạy trên nhiều node.

Nguyên lý Load Balancer:

Trong Docker Swarm, nguyên lý Load Balancer đóng vai trò quan trọng để cân bằng tải giữa các container của một dịch vụ trên các node khác nhau trong swarm. Dưới đây là chi tiết về nguyên lý Load Balancer trong Docker Swarm:

  1. Mục tiêu của Load Balancer:

    • Phân phối traffic đến các container của một dịch vụ để cân bằng tải và đảm bảo rằng mỗi container nhận được một lượng công việc hợp lý.
  2. Triển khai:

    • Docker Swarm có một cơ chế load balancing tích hợp mà bạn có thể sử dụng khi triển khai một dịch vụ. Load balancer này tự động phân phối traffic đến các container của dịch vụ trên các node khác nhau trong swarm.
  3. Cơ chế hoạt động:

    • Khi một request đến địa chỉ IP của dịch vụ, Docker Swarm load balancer quyết định làm thế nào để phân phối request đó đến các container của dịch vụ.
    • Có thể sử dụng các chiến lược phân phối cân bằng như round-robin (mỗi container lượt qua một lần), source-based (dựa trên địa chỉ nguồn của request), hoặc một số chiến lược khác.
  4. Ưu điểm:

    • Cân bằng tải tự động: Load balancer giúp đảm bảo rằng mỗi container nhận được một lượng công việc đồng đều, giảm nguy cơ quá tải cho một số container và để tránh tình trạng chết đói công việc cho các container khác.
    • Khả năng mở rộng: Load balancing là một phần quan trọng của việc mở rộng orizzontally (thêm node vào swarm).
  5. Hạn chế:

    • Chiến lược cân bằng cố định: Mặc định, Docker Swarm load balancer sử dụng một chiến lược cố định, và bạn có thể không có nhiều tùy chọn để tùy chỉnh các quy tắc cân bằng tải nếu sử dụng giải pháp tích hợp.
    • Hiệu suất: Cơ chế load balancing tích hợp có thể không linh hoạt hoặc hiệu suất không đủ nếu yêu cầu của bạn đặt ra những yêu cầu đặc biệt.
  6. Ví dụ:

    • Khi bạn triển khai một dịch vụ với hai container trên ba node, Docker Swarm load balancer sẽ phân phối traffic đến các container này để đảm bảo rằng mỗi container nhận được phần công việc cân bằng.

Nguyên lý Load Balancer trong Docker Swarm giúp cân bằng tải và tăng khả năng mở rộng của hệ thống, đồng thời đảm bảo rằng mỗi container được sử dụng hiệu quả.

Routing Mesh là một tính năng quan trọng trong Docker Swarm, cho phép một dịch vụ có thể truy cập từ bất kỳ node nào trong Swarm bằng cách sử dụng một địa chỉ IP ảo (Virtual IP). Điều này giúp ẩn đi sự phức tạp của việc quản lý các node và container đằng sau một dịch vụ, tạo nên một lớp trừu tượng để quản lý và truy cập dịch vụ.

Cách Routing Mesh hoạt động:

  1. Virtual IP (VIP):

    • Mỗi dịch vụ trong Docker Swarm được gắn kết với một VIP, là một địa chỉ IP ảo được cung cấp cho dịch vụ đó.
    • VIP này có thể được sử dụng để truy cập dịch vụ từ bất kỳ node nào trong Swarm.
  2. Routing Mesh:

    • Khi một request đến VIP, Docker Swarm Routing Mesh tự động định tuyến nó đến một trong các container của dịch vụ đó, không phụ thuộc vào node nào request đó đến.
    • Nó sử dụng một cơ chế cân bằng tải để phân phối request đến các container một cách đồng đều.

Ví dụ cụ thể:

Giả sử bạn có một service trong Docker Swarm và bạn triển khai nó với một địa chỉ VIP. Dưới đây là một ví dụ cụ thể:

  1. Triển khai service:

    docker service create --name myweb --replicas 3 -p 8080:80 mywebimage​
    • Trong ví dụ này, bạn đang triển khai một service có tên là "myweb" với 3 replicas (container) và ánh xạ cổng 8080 từ host vào cổng 80 của container.
  2. Routing Mesh:

    • Sau khi triển khai, Docker Swarm tự động gắn kết một VIP cho dịch vụ "myweb".
    • VIP này sẽ là một địa chỉ IP ảo, chẳng hạn như 10.0.0.1.
  3. Truy cập dịch vụ:

    • Bây giờ, bạn có thể truy cập dịch vụ "myweb" từ bất kỳ node nào trong Swarm bằng cách sử dụng VIP:

      curl http://10.0.0.1:8080​
    • Dù request đến từ node nào, Docker Swarm Routing Mesh sẽ định tuyến request đó đến một trong các container của dịch vụ "myweb", giúp ẩn đi sự phức tạp của việc quản lý container trên các node khác nhau.

Tính năng Routing Mesh giúp tạo ra một môi trường linh hoạt và dễ quản lý khi triển khai các dịch vụ trong Docker Swarm, đặc biệt là khi cần truy cập từ các node khác nhau trong mạng Swarm.

Routing Mesh VIP:

Trong Docker Swarm, "Routing Mesh VIP" là một tính năng quan trọng liên quan đến việc quản lý traffic và cung cấp một địa chỉ IP ảo (VIP) cho các dịch vụ triển khai trong swarm. VIP giúp đơn giản hóa quy trình truy cập dịch vụ và ẩn đi sự phức tạp của việc quản lý các container chạy trên nhiều node khác nhau.

  1. Mục tiêu:

    • Cung cấp một địa chỉ IP ảo (VIP) cho một dịch vụ hoặc một nhóm các dịch vụ trong Docker Swarm.
    • Cho phép truy cập ứng dụng thông qua một địa chỉ IP chung, không phụ thuộc vào node cụ thể nào trong swarm.
  2. Triển khai:

    • Khi bạn triển khai một dịch vụ trong Docker Swarm và cấu hình nó để sử dụng VIP, Docker Swarm tự động tạo ra một địa chỉ IP ảo cho dịch vụ đó.
    • VIP này là một địa chỉ IP ảo mà mọi node trong swarm đều biết và có thể định tuyến traffic đến các container của dịch vụ.
  3. Cơ chế hoạt động:

    • Khi một request đến địa chỉ IP của dịch vụ (VIP), Docker Swarm load balancer quyết định làm thế nào để phân phối request đó đến các container của dịch vụ trên các node khác nhau.
    • Địa chỉ IP ảo giúp ẩn đi sự phức tạp của việc quản lý địa chỉ IP thực tế của từng container và node.
  4. Ví dụ cụ thể:

    • Giả sử bạn có một dịch vụ web triển khai trong Docker Swarm với ba container chạy trên ba node khác nhau.
    • Khi bạn cấu hình dịch vụ để sử dụng Routing Mesh VIP, Docker Swarm tự động tạo ra một địa chỉ IP ảo (ví dụ: 10.0.0.1).
    • Khi một người dùng truy cập địa chỉ IP 10.0.0.1, Docker Swarm sẽ chuyển tiếp request đó đến một trong ba container của dịch vụ, cân bằng tải theo chiến lược được cấu hình.

Routing Mesh VIP giúp tạo ra một lớp trừu tượng để quản lý và truy cập các dịch vụ trong Docker Swarm, giảm sự phức tạp của việc quản lý địa chỉ IP và đồng thời cung cấp tính ổn định và hiệu suất cho ứng dụng phân tán.

Routing Mesh Load Balancer:

Trong Docker Swarm, "Routing Mesh" là một tính năng quan trọng có nhiệm vụ load balancing traffic giữa các container của một dịch vụ (service) trên các node trong swarm. Routing Mesh giúp đơn giản hóa việc quản lý và truy cập các dịch vụ trong môi trường phân tán.

  1. Mục tiêu:

    • Load balancing traffic giữa các container của một dịch vụ trên các node trong Docker Swarm.
    • Đảm bảo rằng mỗi container nhận được một lượng công việc cân bằng và đảm bảo sẵn sàng của dịch vụ.
  2. Triển khai:

    • Khi một dịch vụ được triển khai trong Docker Swarm và bạn cấu hình nó để sử dụng Routing Mesh, Docker tự động tạo ra một địa chỉ IP và port ảo (Virtual IP) cho dịch vụ đó.
    • Tất cả các node trong swarm tham gia vào "Routing Mesh," có nghĩa là mọi request đến địa chỉ IP và port của dịch vụ sẽ được chuyển tiếp đến một trong các container của dịch vụ, bất kỳ node nào cũng có thể xử lý request đó.
  3. Cơ chế hoạt động:

    • Khi một request đến địa chỉ IP và port của dịch vụ, Docker Swarm load balancer quyết định làm thế nào để phân phối request đó đến các container của dịch vụ.
    • Cơ chế này có thể sử dụng các chiến lược phân phối cân bằng như round-robin, source-based, hoặc một số chiến lược khác.
  4. Ví dụ cụ thể:

    • Giả sử bạn có một dịch vụ web triển khai trong Docker Swarm với ba container chạy trên ba node khác nhau.
    • Khi bạn cấu hình dịch vụ để sử dụng Routing Mesh, Docker tự động tạo ra một địa chỉ IP và port ảo (ví dụ: 10.0.0.1:8080).
    • Khi một người dùng truy cập địa chỉ IP 10.0.0.1:8080, Docker Swarm sẽ chuyển tiếp request đó đến một trong ba container của dịch vụ, cân bằng tải theo chiến lược được cấu hình.

Routing Mesh giúp tạo ra một lớp trừu tượng để quản lý và truy cập các dịch vụ trong Docker Swarm, giảm sự phức tạp của việc quản lý các container chạy trên nhiều node và đồng thời cung cấp tính ổn định và hiệu suất cho ứng dụng phân tán.

Bình luận (0)

Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough
Michael Gough

Bài viết liên quan

Learning English Everyday