文/Anoyi
服務(wù)平滑升級(jí),即服務(wù)不停機(jī)更新,客戶端無(wú)感知。
? 案例演示:Redis 版本升級(jí) 4.0.4 -> 4.0.5
1、創(chuàng)建 overlay 網(wǎng)絡(luò)
docker network create \
--attachable \
--driver overlay \
redis_network
說(shuō)明:添加
--attachable
是為了待會(huì) redis-cli 的連接,生產(chǎn)環(huán)境建議不加
2、創(chuàng)建 redis 服務(wù),版本 4.0.4
docker service create \
--name redis \
--replicas 2 \
--network redis_network \
redis:4.0.4
3、使用 redis-cli 連接到 redis 服務(wù)
新建一個(gè)終端窗口,執(zhí)行:
docker run -it --network redis_network --rm redis redis-cli -h redis -p 6379
說(shuō)明:此處用的 latest 版本的 redis 鏡像客戶端,與服務(wù)端版本無(wú)關(guān)
4、升級(jí) redis 服務(wù)到 4.0.5 版本
執(zhí)行以下命令,同時(shí)注意觀察 redis-cli 連接的變化:
docker service update --image redis:4.0.5 redis
現(xiàn)象:整個(gè)升級(jí)過(guò)程 redis-cli 沒(méi)有斷開(kāi)連接,說(shuō)明升級(jí)過(guò)程是平滑的,不間斷的。
5、查看 redis 服務(wù)的任務(wù)列表
docker service ps redis
? 附加內(nèi)容
1、任務(wù)或任務(wù)組之間更新延遲時(shí)間的設(shè)置
使用
--update-delay
來(lái)配置,單位s
、m
、h
,1小時(shí)20分30秒即1h20m30s
2、任務(wù)調(diào)度器并行任務(wù)數(shù)量的配置
默認(rèn)并行任務(wù)的數(shù)量為 1,如上案例所示,redis 服務(wù)有 2 個(gè)副本,在更新過(guò)程中,會(huì)有 2 個(gè)新的任務(wù)來(lái)執(zhí)行 2 個(gè)副本的更新,由于最大并發(fā)任務(wù)執(zhí)行量是 1,所以 2 個(gè)副本會(huì)依次更新。
可以通過(guò)
--update-parallelism
來(lái)配置最大任務(wù)并發(fā)執(zhí)行數(shù)量。
3、任務(wù)更新失敗的情況
默認(rèn)情況下,當(dāng)對(duì)單個(gè)任務(wù)的更新返回
RUNNING
狀態(tài)時(shí),調(diào)度程序開(kāi)始更新另一個(gè)任務(wù),直到所有任務(wù)都更新。如果在更新期間任務(wù)返回FAILED
狀態(tài),則調(diào)度程序會(huì)暫停更新。可以使用
docker service create
或docker service update
的--update-failure-action
來(lái)控制失敗后的行為。
4、平滑升級(jí)的條件
服務(wù)平滑升級(jí)需要至少2個(gè)副本,單副本服務(wù)在更新過(guò)程中不可用。