docker 部署 redis-cluster叢集
阿新 • • 發佈:2018-12-25
一 前期準備
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個
祝你成功!