使用Docker Swarm部署高可用集群的詳細(xì)步驟
一、環(huán)境準(zhǔn)備
1. 服務(wù)器要求
- 至少 3 臺(tái) Linux 服務(wù)器(建議 CentOS/Ubuntu)
- 每臺(tái)服務(wù)器已安裝 Docker Engine(版本 19.03+)
- 服務(wù)器之間網(wǎng)絡(luò)互通
- 開放的端口:2377(集群管理)、7946(節(jié)點(diǎn)通信)、4789(覆蓋網(wǎng)絡(luò))
2. 設(shè)置主機(jī)名和解析(所有節(jié)點(diǎn))
# 設(shè)置主機(jī)名 hostnamectl set-hostname node1 # 在第一臺(tái)執(zhí)行 hostnamectl set-hostname node2 # 在第二臺(tái)執(zhí)行 hostnamectl set-hostname node3 # 在第三臺(tái)執(zhí)行 # 編輯/etc/hosts添加解析 echo " 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3 " >> /etc/hosts
二、初始化 Swarm 集群
1. 在主節(jié)點(diǎn)(node1)上初始化 Swarm
docker swarm init --advertise-addr <node1-IP>
輸出示例:
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 192.168.1.101:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2. 添加工作節(jié)點(diǎn)
在其他節(jié)點(diǎn)上運(yùn)行上面輸出的加入命令:
docker swarm join --token <worker-token> <node1-IP>:2377
3. 添加管理節(jié)點(diǎn)(可選,實(shí)現(xiàn)管理高可用)
# 在主節(jié)點(diǎn)獲取管理令牌 docker swarm join-token manager # 在其他管理節(jié)點(diǎn)運(yùn)行輸出的命令
三、驗(yàn)證集群狀態(tài)
1. 查看節(jié)點(diǎn)列表
docker node ls
輸出示例:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION x3y * node1 Ready Active Leader 20.10.7 z4w node2 Ready Active Reachable 20.10.7 a5b node3 Ready Active 20.10.7
2. 檢查 Swarm 狀態(tài)
docker info | grep -i swarm
四、部署高可用服務(wù)
1. 創(chuàng)建覆蓋網(wǎng)絡(luò)
docker network create --driver overlay --attachable my-overlay
2. 部署示例服務(wù)(Nginx)
docker service create \ --name nginx \ --replicas 3 \ --publish published=8080,target=80 \ --network my-overlay \ nginx:latest
3. 查看服務(wù)狀態(tài)
docker service ls docker service ps nginx
五、實(shí)現(xiàn)高可用特性
1. 服務(wù)自動(dòng)重啟
docker service update \ --restart-condition any \ --restart-delay 5s \ --restart-max-attempts 3 \ nginx
2. 設(shè)置滾動(dòng)更新策略
docker service update \ --update-parallelism 2 \ --update-delay 10s \ --image nginx:1.21 \ nginx
3. 配置健康檢查
docker service update \ --health-cmd "curl -f http://localhost || exit 1" \ --health-interval 5s \ --health-retries 3 \ --health-timeout 2s \ nginx
六、集群管理
1. 節(jié)點(diǎn)維護(hù)
# 將節(jié)點(diǎn)設(shè)置為維護(hù)模式 docker node update --availability drain node2 # 恢復(fù)節(jié)點(diǎn) docker node update --availability active node2
2. 備份 Swarm 配置
# 備份 Raft 日志(在管理節(jié)點(diǎn)執(zhí)行) docker swarm ca --rotate # 先輪換證書 tar -czvf swarm-backup.tar.gz /var/lib/docker/swarm/
3. 災(zāi)難恢復(fù)
# 在新節(jié)點(diǎn)恢復(fù)管理角色 docker swarm init --force-new-cluster --advertise-addr <new-ip>
七、監(jiān)控和日志
1. 部署監(jiān)控棧
# 創(chuàng)建監(jiān)控網(wǎng)絡(luò) docker network create --driver overlay monitor # 部署 Prometheus docker service create --name prometheus \ --network monitor \ --publish published=9090,target=9090 \ prom/prometheus # 部署 Grafana docker service create --name grafana \ --network monitor \ --publish published=3000,target=3000 \ grafana/grafana
2. 集中日志收集
docker service create --name logspout \ --mode global \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ --network my-overlay \ gliderlabs/logspout syslog+tls://your-log-server:514
八、安全加固
1. 啟用 TLS 加密
# 初始化 Swarm 時(shí)啟用 TLS docker swarm init --advertise-addr <ip> --default-addr-pool 10.10.0.0/16 --data-path-port 4789 --force-new-cluster --listen-addr <ip>:2377 --cert-expiry 2160h
2. 定期輪換證書
docker swarm ca --rotate
3. 限制管理節(jié)點(diǎn)訪問(wèn)
iptables -A INPUT -p tcp --dport 2377 -s <trusted-ip> -j ACCEPT iptables -A INPUT -p tcp --dport 2377 -j DROP
常見問(wèn)題解決
節(jié)點(diǎn)無(wú)法加入集群
- 檢查防火墻設(shè)置
- 驗(yàn)證令牌是否過(guò)期(默認(rèn)24小時(shí))
- 確保所有節(jié)點(diǎn)時(shí)間同步
服務(wù)無(wú)法啟動(dòng)
- 檢查資源限制
docker service inspect --pretty <service> - 查看日志
docker service logs <service>
網(wǎng)絡(luò)連接問(wèn)題
- 驗(yàn)證覆蓋網(wǎng)絡(luò)
docker network inspect <network> - 檢查 IP 地址池是否沖突
通過(guò)以上步驟,您已經(jīng)成功部署了一個(gè)高可用的 Docker Swarm 集群。這種架構(gòu)可以自動(dòng)處理節(jié)點(diǎn)故障、服務(wù)擴(kuò)展和負(fù)載均衡,適合生產(chǎn)環(huán)境使用。
以上就是使用Docker Swarm部署高可用集群的詳細(xì)步驟的詳細(xì)內(nèi)容,更多關(guān)于Docker Swarm部署高可用集群的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
通過(guò)docker容器搭建lamp架構(gòu)的流程
這篇文章主要介紹了dcoker容器搭建lamp架構(gòu),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
docker容器出現(xiàn)Cannot allocate memory問(wèn)題及解決過(guò)程
文章討論了Docker容器中出現(xiàn)內(nèi)存不足問(wèn)題,通過(guò)查看`pid_max`和系統(tǒng)總進(jìn)程數(shù)來(lái)定位問(wèn)題,建議臨時(shí)增加`pid_max`值,并使用`psmisc`工具查看進(jìn)程數(shù),如果命令執(zhí)行失敗,需要安裝該工具,永久生效的解決方案是修改配置文件,文章最后提醒讀者參考和支持腳本之家2026-01-01
Docker 設(shè)置代理的三種方法(2025年06月03日親測(cè)可用)
在Docker中設(shè)置代理是非常常見的需求,本文將介紹三種配置Docker使用代理的常見方法,包括通過(guò)配置鏡像加速器、通過(guò)配置HTTP/HTTPS代理及通過(guò)配置代理,感興趣的可以了解一下2025-09-09
使用GoogleContainerTools容器化jib構(gòu)建docker鏡像
這篇文章主要教大家如何使用GoogleContainerTools容器化jib構(gòu)建docker鏡像的實(shí)現(xiàn),有需要的的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
使用Docker多階段構(gòu)建來(lái)減小鏡像大小的方法
這篇文章主要介紹了使用Docker多階段構(gòu)建來(lái)減小鏡像大小的方法,適用于需要在 Dockerfile 中構(gòu)建程式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
docker-compose啟動(dòng)的容器一直處于restarting狀態(tài)的問(wèn)題解決
本文主要介紹了docker-compose啟動(dòng)的容器一直處于restarting狀態(tài)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11

