1. 程式人生 > 實用技巧 >主機Redis服務遷移到現有Docker Overlay環境

主機Redis服務遷移到現有Docker Overlay環境

記錄最後一次對中型2C企業級專案的容器化改造

hello, 好久不見,之前文章記錄了一個實戰的2C分散式專案的改造過程,結果如下:

其中Redis並未完成容器化改造(目前是主機單點),本文記錄將Redis升級到容器化Redis-Sentinel叢集

升級思路:

  1. 《Docker-compose搭建Redis高可用哨兵叢集》,這裡將Redis-Sentinel容器接入現有Docker Swarm overlay網路,規避Redis ClientApp訪問不同網路的Redis-Sentinel引發的混亂(因NAT轉換和Port對映)。
  2. 利用主機上現有Redis dump.rdb持久化檔案快速啟動Redis哨兵叢集

    (1 master:2slave:3 sentinel)
  3. 修改receiverapp的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網路,便於同網路段容器通訊。