主機Redis服務遷移到現有Docker Overlay環境
阿新 • • 發佈:2020-06-26
記錄最後一次對中型2C企業級專案的容器化改造
hello, 好久不見,之前文章記錄了一個實戰的2C分散式專案的改造過程,結果如下:
其中Redis並未完成容器化改造(目前是主機單點),本文記錄將Redis升級到容器化Redis-Sentinel叢集
。
升級思路:
- 《Docker-compose搭建Redis高可用哨兵叢集》,這裡將Redis-Sentinel容器接入現有Docker Swarm overlay網路,規避Redis ClientApp訪問不同網路的Redis-Sentinel引發的混亂(因NAT轉換和Port對映)。
- 利用主機上現有Redis dump.rdb持久化檔案快速啟動Redis哨兵叢集
(1 master:2slave:3 sentinel) - 修改
receiver
、app
的Redis連線字串,驗證
注意事項
- 現有的應用程式處於Docker Swarm Overlay網路,預設是不允許附加其他容器,這裡我們需要將該Overlay網路配置成
可附加
,方便Redis-Sentinel接入該網路,所有容器同網路。
......
# 下面生成的overlay網路名稱是:eqidstack_webnet
networks:
webnet:
driver: overlay
attachable: true // 應用程式Docker swarm overlay網路配置可附加容器
.....
- 官方Redis映象持久化資料儲存在:
/data
, 本處我們需要將現有的主機Redis dump.rdb檔案外掛進Master容器。
# 下面是master/slave docker-compose.yml檔案
version: '3.7'
services:
master:
image: redis
container_name: redis-master
command: redis-server --requirepass [email protected] --masterauth [email protected]
volumes:
- /home/redis-sentinel/redis/data:/data
ports:
- "6380:6379"
networks:
- webnet
slave1:
image: redis
container_name: redis-slave-1
ports:
- "6381:6379"
command: redis-server --slaveof redis-master 6379 --masterauth [email protected] --requirepass [email protected]
networks:
- webnet
slave2:
image: redis
container_name: redis-slave-2
ports:
- "6382:6379"
command: redis-server --slaveof redis-master 6379 --masterauth [email protected] --requirepass [email protected]
networks:
- webnet
networks:
webnet:
external: true
name: eqidstack_webnet
- 經過驗證,最新版本StackExchange.Redis 2.1.58 可以更簡潔的方式支援Redis-sentinel, 只需更改連線字串,其中
10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379
是sentinel容器ip,serviceName
配置主節點名稱。
"redis": "10.0.7.41:26379,10.0.7.42:26379,10.0.7.43:26379,serviceName=mymaster1,[email protected],abortConnect=false,connectTimeout=10000,writeBuffer=40960"
後記
本文記錄較凌亂,需要了解本次實操的背景和過程。
總結起來:將主機上現有單點Redis服務容器化,並搭建哨兵高可用叢集, 且將Redis叢集與應用程式放在同一Overlay網路,便於同網路段容器通訊。