Docker_學習筆記系列之docker-swarm

官方文檔:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/node

docker-compose 解決單臺機器多服務協同工做問題python

docker-swarm 解決多臺機器,實現集羣高可用,負載均衡ios

  • 搭建swarm集羣
  1. 搭建swarm,初始化swarm集羣,且設置本節點爲管理節點
# 在沒有加入過集羣的乾淨的且安裝了docker的單節點上
docker swarm init

2.查看如何增長管理節點或worker節點命令及對應tokennginx

docker swarm join-token worker |  manager
# 在管理節點上,執行上面的命令會生成加入該swarm集羣的命令

3.在預加入swarm集羣的機器上,以工做節點加入swarmdocker

docker swarm join --token SWMTKN-1-3ube2y4dopioi3nk0z1ossxdryixqxughkufios3f1edywcb45-f3bxjlcqqalcpoxeh2v5mlva3 192.168.0.150:2377 \
--advertise-addr 192.168.0.151:2377 \
--listen-addr 192.168.0.151:2377

# 簡化命令
docker swarm join 192.168.0.151:2377

4.查看swarm中的節點負載均衡

docker node ls

5.舊的管理節點從新加入swarm,或者某臺機子docker重啓爲防止請除了swarm配置ide

# 在一個管理節點上加入自動鎖: 會生成一個密鑰,在從新加入時須要用到
docker swarm update --autolock=true
# 重啓管理節點
service docker restart
# 查看節點是否加入: 並無,顯示其down和unreachable下線和不能到達的
docker node ls 
# 執行以下安裝的將一個已經下掉的管理節點從新加入
$ docker swarm unlock
Please enter unlock key: <enter your key>

6.docker swarm 刪除節點 (解散集羣)性能

# 排空節點上的集羣容器
docker node update --availability drain 8gt1q5bkq5cac5e49o9da3ahd
# 主動離開集羣,讓節點處於down狀態,才能刪除
docker swarm leave
# 刪除指定節點 (管理節點上操做)
docker node rm g36lvv23ypjd8v7ovlst2n3yt
# 管理節點,解散集羣
docker swarm leave --force
  • swarm集羣的Raft協議【一致性協議】

Raft協議:保證大多數節點存活纔可用,即>1,集羣至少大於3臺!rest

環境:雙主雙從,假設一個節點掛了,其它節點是否可用?日誌

  1. 將docker主節點【leader】機器宕機,另外一個主節點【reachable】也不能使用,即【兩臺主掛了一臺,就不能用】

  2. 將原主節點重啓後,又自動加入了,但其如今不是leader了,而是reachable了,但集羣能夠用了

  3. 若是是3個主節點,一個掛了,集羣還能夠用,若是2個掛了,集羣就不可用了
  • 管理集羣

直接經過命令部署集羣服務

# 開啓服務且啓動一個實例
docker run   #容器啓動,沒有擴縮容
docker Service create -p 8000:80 --name my-nginx nginx  # 集羣啓動,具備擴縮容,灰度升級,滾動更新

# 經過update更新的方式命令增長副本數量
docker service update --replicas 3 my-nginx

# 經過update來減小副本數量
docker service update --replicas 1 my-nginx

# 經過scale來擴縮容
docker service scale my-nginx=3

基於docker-compose.yml 文件部署集羣服務

  1. 獲取服務id/服務名稱
# 查看命令幫助
docker Service --help
# 管理節點上操做
docker service ls

2.查看服務運行日誌

docker service logs 服務名/服務id

3.【查看】查看集羣服務實例運行狀況

docker service ps 服務名/服務id
# 查看服務運行中的容器分佈在那些機器上
docker service ps 服務名/服務id --filter 'desired-state=running'

4.【重啓】中止服務,而後啓動服務

docker service rm 服務名
docker stack deploy -c docker-compose.yml llb

5.【更新】不停服務升級服務--更換新的版本鏡像

docker service update --image 倉庫/鏡像名 經過docker service ls獲得的服務名或服務id
docker service update --image rc_ctec01009_createorder:20200803_v1  llb_ctec01009_create_order

6.【更新】不停服務升級服務【什麼也沒變】須要在上面的基礎上加上--force參數

docker service update --image 10.251.26.11:5000/prod_python3_sunxiuwen_ctec01009_createorder:20200826_v1  llb_prod-ctec01009-create-order --force

7.【擴容】不停服務擴展服務

docker service scale 服務id=30

8.【回滾】不停服回滾上一次操做前

# 回滾上一次update改動版本【包含擴容都算更新】
docker service update --rollback llb_prod-ctec01009-service
  • docker 服務副本及全局副本

通常服務是工做節點和管理節點都能啓動實例

但副本分全局副本即全部節點【管理+工做】均可以跑,服務副本即只能在工做節點上跑

docker service create --help
--mode string                       Service mode (replicated or global) (default "replicated")

docker service create --mode replicated --name myservice nginx
docker service create --mode global --name logCenter alpine ping baidu.com

# 場景:日誌收集
每個節點都有本身的日誌收集器,過濾,把全部日誌最終再傳給日誌中心
服務監控,狀態性能
相關文章
相關標籤/搜索