1. 程式人生 > >docker 部署 redis-cluster叢集

docker 部署 redis-cluster叢集

一  前期準備

1、centos 7 系統(網路橋接)+docker環境
2、centos 7 基本命令支援 

yum install wegt  ##安裝下載工具
yum install net-tools  ##安裝網路工具
yum install tree  ##安裝tree命令(方便檢視叢集配置檔案結構)
yum -y update ##跟新系統

二 安裝叢集環境

1 安裝ruby映象   tag省略預設下載lasted

docker pull ruby

2 安裝redis映象  

docker pull redis:4.0

備註:redis官方叢集方案 為4.0版本自帶

3 安裝結果如下


備註:mysql映象與本教程無關,redis兩個版本其實為相同映象,不影響使用

三、叢集配置

1 建立虛擬網絡卡

docker create network redis-net
docker network ls ##檢視網絡卡資訊

備註:建立redis-net虛擬網絡卡 目的是讓docker容器能與宿主(centos7)橋接網路 並間接與外界連線

2 檢視redis-net虛擬網絡卡閘道器ip

 docker network inspect  redis-net  | grep "Gateway" |  grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o

備註:docker network inspect network-name 顯示 network-name對應配置資訊         (gerp 過濾閘道器配置行 並篩選ip ) 可人工   

3 建立配置檔案模版

mkdir /home/redis-cluster ##在home 目錄下建立 叢集配置檔案加
cd /home/redis-cluster    ##在建立目錄中
touch redis-cluster.tmpl  ##建立模版件
vi redis-cluster.tmpl ##編輯模版檔案

備註:編輯如下  esc+:wq退出

port ${PORT}                        ##節點埠
cluster-enabled yes                 ##cluster叢集模式
cluster-config-file nodes.conf      ##叢集配置名
cluster-node-timeout 5000           ##超時時間  
cluster-announce-ip 172.18.0.1      ##實際為各節點網絡卡分配ip  先用上閘道器ip代替
cluster-announce-port ${PORT}       ##節點對映埠
cluster-announce-bus-port 1${PORT}  ##節點匯流排端
appendonly yes                      ##持久化模式

備註:此模版檔案為叢集節點通用檔案  其中${PORT} 將讀取命令列變數  ip則根據網絡卡分配ip進行替換  以保證節點配置檔案除埠以及ip 全部一致。

4 建立節點配置檔案

cd /home/redis-cluster
for port in `seq 7010 7015`; do \
  mkdir -p ./${port}/conf \
  && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
  && mkdir -p ./${port}/data; \
done

備註:命令譯為 迴圈7010 - 7015 在當前目錄下建立 701*/conf 目錄結構     (mkdir -p 遞迴建立目錄)
          設定701*為PORT變數 將當前目錄下 模版檔案 複製到 701*/conf/redis.conf 檔案中
          在當前目錄下建立 701*/data 目錄結構 

5 驗證上步

tree
cat 701*/conf/redis.conf


 備註:data目錄本步驟為空   節點對應配置檔案ip本步驟對應網管ip

6 啟動redis節點容器

for port in `seq 7010 7015`; do \
  docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
  --privileged=true -v /home/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
  --privileged=true -v /home/redis-cluster/${port}/data:/data \
  --restart always --name redis-${port} --net redis-net \
  --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done

備註:命令譯為  迴圈7010 - 7015  執行redis 容器

docker  run            執行
-d                          守護程序模式
--restart always     保持容器啟動
--name redis-710* 容器起名
--net redis-net    容器使用虛擬網絡卡
-p                        指定宿主機器與容器埠對映 701*:701*
-P                        指定宿主機與容器redis匯流排埠對映 1701*:1701*
 --privileged=true -v /home/redis-cluster/701*/conf/redis.conf:/usr/local/etc/redis/redis.conf
    付權將宿主701*節點檔案掛載到容器/usr/local/etc/redis/redis.conf 檔案中
--privileged=true -v /home/redis-cluster/${port}/data:/data \
   付權將宿主701*/data目錄掛載到容器/data目錄中
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
   容器根據掛載的配置檔案啟動 redis服務端

7 驗證容器啟動

docker ps


8 檢視容器分配ip

docker network inspect redis-net

結果


備註:每個容器對應分配了ip 需要修改節點配置檔案redis.conf與其對應  並重啟容器。

9 修改節點 配置檔案重啟redis服務(容器中命令中度缺失不推薦)

docker exec -it redis-701* /bin/bash   ##以命令列形式進入 redis-701*容器   
vi /usr/local/etc/redis/redis.conf   ##編輯ip為上查詢分配的ip 並esc+:wq退出

備註:6個節點均要修改 並重新啟動redis-service 根據修改的節點檔案

10 修改宿主掛載目錄檔案中檔案 重複6、7 進行11

vi  /home/redis-cluster/701*/conf/redis.conf  ##編輯ip為查詢分配的ip 並esc+:wq退出

暫停容器並刪除容器 以便重複6步驟

for port in `seq 7010 7015`; do \
  docker stop redis-${port};
  docker rm redis-${port};
done

備註:6個都要修改redis.conf   

11 啟動redis-cluster叢集

echo yes | docker run -i --rm --net redis-net ruby sh -c '\
  gem install redis \
  && wget http://download.redis.io/redis-stable/src/redis-trib.rb \
  && ruby redis-trib.rb create --replicas 1 \
  '"$(for port in `seq 7010 7015`; do \
    echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \
  done)"

備註:docker run -i    互動模式啟動 ruby sh  
  gem intall redis    安裝redis
--net redis-net   使用虛擬網絡卡橋接
wget     下載 redis叢集啟動 redis-trib.rb 包
ruby redis-trib create --replicas  1  17.18.0.x:701*  ....     ruby 執行叢集包 新增redis節點6個 


祝你成功!