上一節部署了只有一個副本的 Service,不過對於 web 服務,我們通常會運行多個實例。這樣可以負載均衡,同時也能提供高可用。
swarm 要實現這個目標非常簡單,增加 service 的副本數就可以了。在 swarm-manager 上執行如下命令:
docker service scale web_server=5

副本數增加到 5,通過 docker service ls 和 docker service ps 查看副本的詳細信息。

5 個副本已經分布在 swarm 的所有三個節點上。

默認配置下 manager node 也是 worker node,所以 swarm-manager 上也運行了副本。如果不希望在 manager 上運行 service,可以執行如下命令:
docker node update --availability drain swarm-manager

通過 docker node ls 查看各節點現在的狀態:

Drain 表示 swarm-manager 已經不負責運行 service,之前 swarm-manager 運行的那個副本會如何處理呢?用 docker service ps 查看一下:

swarm-manager 上的副本 web_server.2 已經被 Shutdown 了,為了達到 5 個副本數的目標,在 swarm-worker1 上添加了副本 web_server.2。

前面我們的場景是 scale up,我們還可以 scale down,減少副本數,運行下面的命令:
docker service scale web_server=3

可以看到,web_server.4 和 web_server.5 這兩個副本已經被刪除了。

Service 的伸縮就討論到這里,下一節我們學習故障切換 Failover。
書籍:
1.《每天5分鍾玩轉Docker容器技術》
https://item.jd.com/16936307278.html
2.《每天5分鍾玩轉OpenStack》
https://item.jd.com/12086376.html

