docker redis 集群配置
1、配置 专有 网络 ,目的是保证局域网ip互通
docker network create -d bridge --subnet 172.18.0.0/24 redis-net
2、配置文件 和 data 目录
·设置ip 为公网 及docker暴露的端口,原因是 集群 槽在其它节点则会 重定向 到该节点 ,自动返回客户端该节点ip ,为annouce ip(指定)
·bus 端口 默认 10000+ip ,如果不指定
·bind 0.0.0.0 或者 不指定 --------------------一定要
for i in $(seq 1 6)
do
mkdir -p /redis-cluster/node-${i}/
cd /redis-cluster/node-${i}/
cat >redis.conf <<EOF
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes-${i}.conf
cluster-node-timeout 5000
appendonly yes
cluster-announce-ip 39.103.165.133
cluster-announce-port 63${i}9
cluster-announce-bus-port 163${i}9
EOF
mkdir data
done
3、 配置 redis 集群 别忘记指定网络
for i in $(seq 1 6)
do
docker run -it -d -p 63${i}9:6379 -p 163${i}9:16379 \
--privileged=true -v /redis-cluster/node-${i}/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v /redis-cluster/node-${i}/data:/data \
--restart always --name redis-${i} --net redis-net \
--sysctl net.core.somaxconn=1024 redis:6.0-bullseye redis-server /usr/local/etc/redis/redis.conf
done
4、创建集群
1、进入其中一个
docker exec -it redis-1 bash
2、
cd /usr/local/bin/
3、创建集群 replicas 1
为每一个主节点配置一个从节点 ,所以 只有3个主节点 06 ,这里可公网也可局域网创建,局域网务必和 2 中配置一样
局域网ip: 成功
【使用docker network inspect redis-net 查看局域网ip】
redis-cli --cluster create 172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 172.18.0.5:6379 172.18.0.6:6379 172.18.0.7:6379 --cluster-replicas 1
如果 一直等待 翻阅下文 错误 部分
如下:
Waiting for the cluster to join
…
…
…
5、 查看节点
redis-cli
cluster nodes
有全部节点则成功 同时 集群总线端口也被打开 ,curl有返回内容,此前没有,
但是客户端连接端口 curl 如:6379一定会有返回值,如果没有,配置问题
问题:
1、[ERR] Node 172.18.0.4:6379 is not empty. Either the node already
关闭所有容器:
docker stop $( docker ps -q -f ancestor=redis:6.0-bullseye)
使用额外工具2 删除配置文件
重启 (命令如下):
docker start $(docker ps -q -f status=exited)
如果配置文件又生成了,再次使用使用额外工具2 删除配置文件
2、一直在等待,则配置出错 ,或者端口 失败
除了阿里云 安全组 和 防火墙 【这里不关心因为这导致的问题】
我的问题
:
使用公网ip 创建集群 失败 原因不明 【后来莫名其妙好了】
如下
# 公网:`一直等待 `
redis-cli --cluster create 39.103.165.133:6319 39.103.165.133:6329 39.103.165.133:6339 39.103.165.133:6349 39.103.165.133:6359 39.103.165.133:6369` --cluster-replicas 1
使用局域网 创建成功,特别注意的是如果使用局域网 创建,那么必须添加如下配置,公网则不需要:
//用于指定外玩连接
cluster-announce-ip 39.103.165.133 外部ip
cluster-announce-port 63${i}9 如:6379
cluster-announce-bus-port 163${i}9 如:16379 可以指定,并非一定是+10000
否则使用命令后报错
连接错误:Command execution timeout
额外工具1 清楚data目录里面的数据 以及nodes.conf
for i in $(seq 1 6)
do
rm -rf /redis-cluster/node-${i}/data/nodes-${i}.conf
rm -rf /redis-cluster/node-${i}/data/appendonly.aof
rm -rf /redis-cluster/node-${i}/data/dump.rdb
done
额外工具2 删除配置文件
rm -rf /redis-cluster
额外工具3 删除所有redis
docker rm -f $( docker ps -q -f ancestor=redis:6.0-bullseye)