Trước tiên cần tắt tường lửa trên các máy chủ:
# Kiểm tra trạng thái firewall
systemctl status firewalld
# Dừng firewall
systemctl stop firewalld
Ba máy chủ tham gia cụm:
192.168.0.191 - Máy chủ chính
192.168.0.110 - Máy phụ
192.168.0.122 - Máy phụ
Kéo image Consul về tất cả các máy:
Cấu hình cho máy chủ 192.168.0.191:
docker run -d --name consul-primary -h=consul-primary --net=host -e CONSUL_BIND_INTERFACE=ens33 \
consul agent -server=true -client=0.0.0.0 -bind=192.168.0.191 -ui -bootstrap-expect=3
Cấu hình cho máy chủ 192.168.0.110:
docker run -d --name consul-secondary1 -h=consul-secondary1 --net=host -e CONSUL_BIND_INTERFACE=ens33 \
consul agent -server=true -client=0.0.0.0 -join=192.168.0.191 -ui
Cấu hình cho máy chủ 192.168.0.122:
docker run -d --name consul-secondary2 -h=consul-secondary2 --net=host -e CONSUL_BIND_INTERFACE=ens33 \
consul agent -server=true -client=0.0.0.0 -join=192.168.0.191 -ui
Giải thích các tham số khởi động:
- --net=host: Bỏ qua không gian mạng của container Docker, giúp tránh phải cấu hình ánh xạ cổng thủ công
- -server: Chạy ở chế độ server, là thành phần cốt lõi trong phát hiện dịch vụ
- -advertise: Truyền địa chỉ IP nội bộ của máy đến Consul
- -retry-join: Chỉ định địa chỉ nút muốn tham gia, sẽ thử lại khi thất bại
- -client: Xác định địa chỉ mà Consul sẽ bind để cung cấp các dịch vụ HTTP, DNS, RPC
- -bind: Gán địa chỉ IP của máy chủ, dùng cho giao tiếp nội bộ trong cụm
- allow_stale: Nếu true thì có thể lấy thông tin từ bất kỳ server nào, nếu false thì phải qua leader
- -bootstrap-expect: Số lượng server mong đợi trong trung tâm dữ liệu, dùng để tự động bầu chọn leader
- -data-dir: Vị trí lưu trữ dữ liệu bền vững
- -node: Tên của nút trong cụm, phải duy nhất
- -config-dir: Thư mục chứa file cấu hình JSON
- -enable-script-checks: Kích hoạt kiểm tra dịch vụ tương tự như ping
- -datacenter: Tên trung tâm dữ liệu
- -ui: Kích hoạt giao diện người dùng
- -join: Tham gia vào cụm đã tồn tại
Mô tả các cổng giao tiếp:
- 8300: Cổng RPC giữa các server trong cụm
- 8301: Giao tiếp LAN gossip trong cùng một trung tâm dữ liệu
- 8302: Giao tiếp WAN gossip giữa các trung tâm dữ liệu khác nhau
- 8500: Giao diện HTTP cho việc đăng ký và tìm kiếm dịch vụ, cung cấp UI
- 8600: Giao thức DNS cho chức năng phát hiện dịch vụ
Cách triển khai thay thế sử dụng cổng ánh xạ:
docker run -d --name=node-a --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302/udp \
-p 8302:8302 \
-p 8400:8400 \
-p 8500:8500 \
-p 8600:8600 \
-h node-a \
consul agent -server -bind=0.0.0.0 -bootstrap-expect=3 -node=node-a \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
docker run -d --name=node-b --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302/udp \
-p 8302:8302 \
-p 8400:8400 \
-p 8500:8500 \
-p 8600:8600 \
-h node-b \
consul agent -server -bind=0.0.0.0 -node=node-b \
-join=192.168.0.191 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
docker run -d --name=node-c --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302/udp \
-p 8302:8302 \
-p 8400:8400 \
-p 8500:8500 \
-p 8600:8600 \
-h node-c \
consul agent -server -bind=0.0.0.0 -node=node-c \
-join=192.168.0.191 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
Kiểm tra trạng thái cụm:
Liệt kê các thành viên trong cụm:
docker exec -t [container_id] consul members
Kiểm tra thông tin bầu chọn:
docker exec -t [container_id] consul operator raft list-peers
Kiểm tra tính khả dụng cao:
Ngắt một máy chủ trong cụm để kiểm tra khả năng bầu chọn lại. Sau khi máy chủ bị ngắt được khởi động lại, hệ thống sẽ tiến hành bầu chọn leader mới và tiếp tục vận hành bình thường.