使用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ò)互通
- 開(kāi)放的端口: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 # 先輪換證書(shū) 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. 定期輪換證書(shū)
docker swarm ca --rotate
3. 限制管理節(jié)點(diǎn)訪(fǎng)問(wèn)
iptables -A INPUT -p tcp --dport 2377 -s <trusted-ip> -j ACCEPT iptables -A INPUT -p tcp --dport 2377 -j DROP
常見(jiàn)問(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)文章
Docker 鏡像國(guó)內(nèi)加速的方法匯總(收藏版)
本文介紹了在國(guó)內(nèi)使用Docker時(shí)遇到的加速和優(yōu)化方法,針對(duì)國(guó)內(nèi)下載速度慢和斷線(xiàn)問(wèn)題,可以使用國(guó)內(nèi)可用的DockerRegistryMirrors或自建DockerRegistryMirror/Proxy,針對(duì)沒(méi)有公共鏡像庫(kù)賬號(hào)導(dǎo)致的限流問(wèn)題,可以注冊(cè)各個(gè)鏡像庫(kù)賬號(hào)并登錄,感興趣的朋友跟隨小編一起看看吧2025-01-01Docker使用編寫(xiě)dockerfile啟動(dòng)node.js應(yīng)用
這篇文章主要介紹了Docker使用編寫(xiě)dockerfile啟動(dòng)node.js應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼
Selenium Grid允許我們?cè)诙嗯_(tái)計(jì)算機(jī)上并行運(yùn)行測(cè)試,并集中管理不同的瀏覽器版本和瀏覽器配置。這篇文章給大家介紹基于Docker+Selenium Grid的測(cè)試技術(shù)應(yīng)用示例代碼,需要的朋友參考下吧2021-08-08jenkins中通過(guò)Publish Over SSH插件將項(xiàng)目部署到遠(yuǎn)程機(jī)器上的講解說(shuō)明
今天小編就為大家分享一篇關(guān)于jenkins中通過(guò)Publish Over SSH插件將項(xiàng)目部署到遠(yuǎn)程機(jī)器上的講解說(shuō)明,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02docker容器增加或者修改容器映射端口的實(shí)現(xiàn)方法
在只有使用docker安裝的容器,沒(méi)有使用docker-compose或者其他客戶(hù)端工具,如果要增加或者修改容器端口,也是可以增加或者修改容器端口映射,本文給大家介紹了docker容器增加或者修改容器映射端口的實(shí)現(xiàn)方法,需要的朋友可以參考下2025-01-01Docker從0到1實(shí)現(xiàn)項(xiàng)目編排部署
Docker編排是管理和協(xié)調(diào)多個(gè)Docker容器的工具和技術(shù),目的是簡(jiǎn)化容器的部署、擴(kuò)展和管理流程,本文主要介紹了Docker從0到1實(shí)現(xiàn)項(xiàng)目編排部署,感興趣的可以了解一下2025-03-03Docker啟動(dòng)PostgreSQL時(shí)創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)的解決方案
這篇文章主要介紹了Docker啟動(dòng)PostgreSQL時(shí)創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)的解決方案,重點(diǎn)給大家介紹如何把shell/sql腳本放入/docker-entrypoint-initdb.d/目錄中,讓容器啟動(dòng)的時(shí)候自動(dòng)執(zhí)行創(chuàng)建2021-06-06Docker的MySQL容器時(shí)區(qū)問(wèn)題修改
這篇文章主要給大家介紹了關(guān)于Docker的MySQL容器時(shí)區(qū)問(wèn)題修改的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07docker搭建nginx實(shí)現(xiàn)負(fù)載均衡的示例代碼
本隨著互聯(lián)網(wǎng)應(yīng)用規(guī)模不斷擴(kuò)大,原有的單一服務(wù)器已經(jīng)無(wú)法滿(mǎn)足高并發(fā)和高可用性的要求,本文就來(lái)介紹docker搭建nginx實(shí)現(xiàn)負(fù)載均衡的示例代碼,感興趣的可以了解一下2023-12-12