docker部署redis-cluster集群


https://segmentfault.com/a/1190000010131816

1>拉取reids鏡像:docker pull redis

2>創建配置文件模版

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 ##持久化模式

3>創建redis配置文件

mkdir docker/redisContainer/redis-cluster,進入redis-cluster目錄執行下面指令

mkdir /docker/redisContainer/redis-cluster ##在home 目錄下創建 集群配置文件加
cd /docker/redisContainer/redis-cluster ##在創建目錄中
touch redis-cluster.tmpl ##創建模版件

for port in `seq 7000 7005`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
注釋:循環7000到7005,在redis-cluster目錄下創建7000~7005文件夾,在每個文件夾下創建conf、data文件夾和在conf文件夾下的redis.conf配置文件

4>創建redis容器

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

注釋:循環7000到7005創建以redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005的容器並運行

5>查看容器是否啟動成功 docker ps 查看redis容器啟動失敗日志 docker logs redis-7000 查看reids容器使用的網絡信息docker inspect redis-net

6>進入各個redis.conf配置cluster-announce-ip (對外IP),並重啟各個redis:docker restart redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005

7>進入任意一個redis容器 docker exec -it redis-7000 /bin/bash

8>執行集群指令 redis-cli --cluster create (對外IP):7000 (對外IP):7001 (對外IP):7002 (對外IP):7003 (對外IP):7004 (對外IP):7005 --cluster-replicas 1,中間需要輸入yes指令,執行成功如下

9>下載Redis Desktop Manager,reids可視化工具檢驗集群

10>進入redis客戶端 docker exec -it redis-7000 /bin/bash

進入集群 redis-cli -c -p 7000

添加緩存key set name andy

查看緩存 get name

 

11>新增主節點

復制7000文件夾到7006,cp -r 7000 7006

修改7006/conf/redis.conf的配置,把ip和端口改成對外IP:7006

刪除7006/data下的所有文件

新建redis-7006容器

port=7006; docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /docker/redisContainer/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw -v /docker/redisContainer/redis-cluster/${port}/data:/data:rw --restart always --name redis-${port} --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;

進入任意redis容器,docker exec -it redis-7000 /bin/bash

執行命令新增主節點  redis-cli --cluster add-node (對外IP):7006 (對外IP):7000 --cluster-master-id 1 

注釋:第一個ip參數是新增節點ip地址,第二個ip為已存在的節點ip地址

12>新增子節點

復制7000文件夾到7007,cp -r 7000 7007

修改7007/conf/redis.conf的配置,把ip和端口改成對外IP:7007

刪除7007/data下的所有文件

新建redis-7007容器:

port=7007; docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /docker/redisContainer/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw -v /docker/redisContainer/redis-cluster/${port}/data:/data:rw --restart always --name redis-${port} --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;

進入任意redis容器,docker exec -it redis-7000 /bin/bash

執行命令新增主節點  redis-cli --cluster add-node (對外IP):7007 (對外IP):7000 --cluster-slave 1 

注釋:第一個ip參數是新增節點ip地址,第二個ip為已存在的主節點ip地址

 

集群不能用的情況:
(1)有半數或者半數以上的master掛掉,集群就不能用了
(2)如果集群任意master掛掉,且當前master沒有slave,集群不能用
注:一個主庫掛掉,它的從庫自動頂替為主庫,正常使用(前提是:有半數或者半數以上的master能用),掛掉的主庫修復好后,會成為從庫,不會搶占為主

 

其他:

redis-cli -h 查看redis-cli指令

redis-cli --cluster help查看cluster指令


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM