Docker Swarm是Docker原生的容器编排工具,可以轻松创建高可用的容器集群。以下是配置高可用Swarm集群的详细步骤。
在所有节点上安装Docker:
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
选择一台作为第一个管理节点:
# 在第一个管理节点上执行
docker swarm init --advertise-addr <MANAGER_IP>
命令会输出加入集群的token,类似:
Swarm initialized: current node (xyz) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxx <MANAGER_IP>:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
获取管理节点加入命令:
# 在第一个管理节点上执行
docker swarm join-token manager
在其他管理节点上执行输出的命令。
获取工作节点加入命令:
# 在任何管理节点上执行
docker swarm join-token worker
在工作节点上执行输出的命令。
在任何管理节点上执行:
docker node ls
应该看到所有节点的状态(包括Leader、Reachable等)。
至少3个管理节点以实现法定人数(quorum),防止脑裂问题。
Swarm内置Raft共识算法会自动处理管理节点故障并选举新Leader。
部署服务时指定副本数:
docker service create --name web --replicas 3 -p 80:80 nginx
配置节点自动检测和重新调度:
docker service update --health-cmd "curl -f http://localhost || exit 1" \
--health-interval 5s \
--health-retries 3 \
--health-timeout 2s \
web
创建跨节点的覆盖网络:
docker network create --driver overlay --attachable my_overlay_net
Swarm内置负载均衡,服务可以通过服务名自动发现和负载均衡。
对于有状态服务,配置持久化存储:
# 创建卷
docker volume create my_volume
# 使用卷
docker service create --name db --mount type=volume,source=my_volume,target=/var/lib/mysql mysql
docker service create --name=cadvisor \
--mode=global \
--publish=8080:8080 \
--mount type=bind,source=/,target=/rootfs,readonly=true \
--mount type=bind,source=/var/run,target=/var/run \
--mount type=bind,source=/sys,target=/sys,readonly=true \
--mount type=bind,source=/var/lib/docker/,target=/var/lib/docker,readonly=true \
google/cadvisor:latest
备份Swarm集群状态:
# 备份Raft数据
sudo tar -czvf swarm-backup.tar.gz /var/lib/docker/swarm/
恢复时先初始化新Swarm,然后停止Docker,恢复备份文件,重启Docker。
docker node update --availability drain <NODE_ID>
docker node promote <WORKER_NODE_ID>
docker node demote <MANAGER_NODE_ID>
通过以上配置,您将拥有一个高可用的Docker Swarm集群,能够自动处理节点故障、服务恢复和负载均衡。