【容器----Docker】创建Redis5 集群

1.拉取Redis镜像

docker pull redis

docker images 查看镜像

2.创建模板文件

mkdir /opt/module/redis

编写redis-cluster.tmpl 文件

port ${PORT}
#requirepass WZTH@dev123
#masterauth WZTH@dev123
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 47.92.145.192
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

3.创建配置文件

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

4.创建redis网络

docker network create redis-net

5.启动redis

for port in `seq 7000 7005`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /opt/module/redis/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /opt/module/redis/${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

6.查看ip地址

for port in `seq 7000 7005`; do \
    echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port} ' ' ; \
done

docker inspect redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005 | grep IPAddress

【容器----Docker】创建Redis5 集群_第1张图片

7.进入任意一个节点

docker exec -it redis-7000 bash

 8.创建集群

/usr/local/bin/redis-cli --cluster create \
xxx.xxx.xxx.xxx:7000 \
xxx.xxx.xxx.xxx:7001 \
xxx.xxx.xxx.xxx:7002 \
xxx.xxx.xxx.xxx:7003 \
xxx.xxx.xxx.xxx:7004 \
xxx.xxx.xxx.xxx:7005 \
--cluster-replicas 1

或者使用docker容器ip

/usr/local/bin/redis-cli --cluster create \
172.18.0.2:7000 \
172.18.0.3:7001 \
172.18.0.4:7002 \
172.18.0.5:7003 \
172.18.0.6:7004 \
172.18.0.7:7005 \
--cluster-replicas 1

然后一直输入yes即可成功

【容器----Docker】创建Redis5 集群_第2张图片

 

如果出现错误

解决办法

1)、将需要新增的节点下aof、rdb等本地备份文件删除;

2)、同时将新Node的集群配置文件删除,即:删除你redis.conf里面cluster-config-file所在的文件;

3)、再次添加新节点如果还是报错,则登录新Node,./redis-cli–h x –p对数据库进行清除:

xxx.xxx.xxx.xxx:7001>  flushdb      #清空当前数据库

9.测试

使用redis客户端新增缓存,然后查看其他节点是否一致,语法

set keyName value

 

你可能感兴趣的:(容器-Docker)