使用Docker Swarm部署高可用集群的詳細步驟
一、環(huán)境準備
1. 服務器要求
- 至少 3 臺 Linux 服務器(建議 CentOS/Ubuntu)
- 每臺服務器已安裝 Docker Engine(版本 19.03+)
- 服務器之間網絡互通
- 開放的端口:2377(集群管理)、7946(節(jié)點通信)、4789(覆蓋網絡)
2. 設置主機名和解析(所有節(jié)點)
# 設置主機名 hostnamectl set-hostname node1 # 在第一臺執(zhí)行 hostnamectl set-hostname node2 # 在第二臺執(zhí)行 hostnamectl set-hostname node3 # 在第三臺執(zhí)行 # 編輯/etc/hosts添加解析 echo " 192.168.1.101 node1 192.168.1.102 node2 192.168.1.103 node3 " >> /etc/hosts
二、初始化 Swarm 集群
1. 在主節(jié)點(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é)點
在其他節(jié)點上運行上面輸出的加入命令:
docker swarm join --token <worker-token> <node1-IP>:2377
3. 添加管理節(jié)點(可選,實現(xiàn)管理高可用)
# 在主節(jié)點獲取管理令牌 docker swarm join-token manager # 在其他管理節(jié)點運行輸出的命令
三、驗證集群狀態(tài)
1. 查看節(jié)點列表
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
四、部署高可用服務
1. 創(chuàng)建覆蓋網絡
docker network create --driver overlay --attachable my-overlay
2. 部署示例服務(Nginx)
docker service create \ --name nginx \ --replicas 3 \ --publish published=8080,target=80 \ --network my-overlay \ nginx:latest
3. 查看服務狀態(tài)
docker service ls docker service ps nginx
五、實現(xiàn)高可用特性
1. 服務自動重啟
docker service update \ --restart-condition any \ --restart-delay 5s \ --restart-max-attempts 3 \ nginx
2. 設置滾動更新策略
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é)點維護
# 將節(jié)點設置為維護模式 docker node update --availability drain node2 # 恢復節(jié)點 docker node update --availability active node2
2. 備份 Swarm 配置
# 備份 Raft 日志(在管理節(jié)點執(zhí)行) docker swarm ca --rotate # 先輪換證書 tar -czvf swarm-backup.tar.gz /var/lib/docker/swarm/
3. 災難恢復
# 在新節(jié)點恢復管理角色 docker swarm init --force-new-cluster --advertise-addr <new-ip>
七、監(jiān)控和日志
1. 部署監(jiān)控棧
# 創(chuàng)建監(jiān)控網絡 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 時啟用 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é)點訪問
iptables -A INPUT -p tcp --dport 2377 -s <trusted-ip> -j ACCEPT iptables -A INPUT -p tcp --dport 2377 -j DROP
常見問題解決
節(jié)點無法加入集群
- 檢查防火墻設置
- 驗證令牌是否過期(默認24小時)
- 確保所有節(jié)點時間同步
服務無法啟動
- 檢查資源限制
docker service inspect --pretty <service> - 查看日志
docker service logs <service>
網絡連接問題
- 驗證覆蓋網絡
docker network inspect <network> - 檢查 IP 地址池是否沖突
通過以上步驟,您已經成功部署了一個高可用的 Docker Swarm 集群。這種架構可以自動處理節(jié)點故障、服務擴展和負載均衡,適合生產環(huán)境使用。
以上就是使用Docker Swarm部署高可用集群的詳細步驟的詳細內容,更多關于Docker Swarm部署高可用集群的資料請關注腳本之家其它相關文章!
相關文章
Docker使用編寫dockerfile啟動node.js應用
這篇文章主要介紹了Docker使用編寫dockerfile啟動node.js應用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
基于Docker+Selenium Grid的測試技術應用示例代碼
Selenium Grid允許我們在多臺計算機上并行運行測試,并集中管理不同的瀏覽器版本和瀏覽器配置。這篇文章給大家介紹基于Docker+Selenium Grid的測試技術應用示例代碼,需要的朋友參考下吧2021-08-08
jenkins中通過Publish Over SSH插件將項目部署到遠程機器上的講解說明
今天小編就為大家分享一篇關于jenkins中通過Publish Over SSH插件將項目部署到遠程機器上的講解說明,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-02-02
docker容器增加或者修改容器映射端口的實現(xiàn)方法
在只有使用docker安裝的容器,沒有使用docker-compose或者其他客戶端工具,如果要增加或者修改容器端口,也是可以增加或者修改容器端口映射,本文給大家介紹了docker容器增加或者修改容器映射端口的實現(xiàn)方法,需要的朋友可以參考下2025-01-01
Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據庫的解決方案
這篇文章主要介紹了Docker啟動PostgreSQL時創(chuàng)建多個數(shù)據庫的解決方案,重點給大家介紹如何把shell/sql腳本放入/docker-entrypoint-initdb.d/目錄中,讓容器啟動的時候自動執(zhí)行創(chuàng)建2021-06-06
docker搭建nginx實現(xiàn)負載均衡的示例代碼
本隨著互聯(lián)網應用規(guī)模不斷擴大,原有的單一服務器已經無法滿足高并發(fā)和高可用性的要求,本文就來介紹docker搭建nginx實現(xiàn)負載均衡的示例代碼,感興趣的可以了解一下2023-12-12

