文/Anoyi
服務(wù)平滑升級屈雄,即服務(wù)不停機更新村视,客戶端無感知。
? 案例演示:Redis 版本升級 4.0.4 -> 4.0.5
1酒奶、創(chuàng)建 overlay 網(wǎng)絡(luò)
docker network create \
--attachable \
--driver overlay \
redis_network
說明:添加
--attachable
是為了待會 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ù)
新建一個終端窗口,執(zhí)行:
docker run -it --network redis_network --rm redis redis-cli -h redis -p 6379
說明:此處用的 latest 版本的 redis 鏡像客戶端另伍,與服務(wù)端版本無關(guān)
4鼻百、升級 redis 服務(wù)到 4.0.5 版本
執(zhí)行以下命令,同時注意觀察 redis-cli 連接的變化:
docker service update --image redis:4.0.5 redis
現(xiàn)象:整個升級過程 redis-cli 沒有斷開連接质况,說明升級過程是平滑的愕宋,不間斷的。
5结榄、查看 redis 服務(wù)的任務(wù)列表
docker service ps redis
? 附加內(nèi)容
1中贝、任務(wù)或任務(wù)組之間更新延遲時間的設(shè)置
使用
--update-delay
來配置,單位s
臼朗、m
邻寿、h
,1小時20分30秒即1h20m30s
2视哑、任務(wù)調(diào)度器并行任務(wù)數(shù)量的配置
默認并行任務(wù)的數(shù)量為 1绣否,如上案例所示,redis 服務(wù)有 2 個副本挡毅,在更新過程中蒜撮,會有 2 個新的任務(wù)來執(zhí)行 2 個副本的更新,由于最大并發(fā)任務(wù)執(zhí)行量是 1跪呈,所以 2 個副本會依次更新段磨。
可以通過
--update-parallelism
來配置最大任務(wù)并發(fā)執(zhí)行數(shù)量。
3耗绿、任務(wù)更新失敗的情況
默認情況下苹支,當對單個任務(wù)的更新返回
RUNNING
狀態(tài)時,調(diào)度程序開始更新另一個任務(wù)误阻,直到所有任務(wù)都更新债蜜。如果在更新期間任務(wù)返回FAILED
狀態(tài)晴埂,則調(diào)度程序會暫停更新。可以使用
docker service create
或docker service update
的--update-failure-action
來控制失敗后的行為寻定。
4儒洛、平滑升級的條件
服務(wù)平滑升級需要至少2個副本,單副本服務(wù)在更新過程中不可用特姐。