1、创建redis-cluster文件夹
mkdir /www
cd /www
mkdir redis-cluster
cd redis-cluster
2、文件目录结构
# 项目文件
├── /www/redis-cluster/redis-cluster.tmpl #
├── /www/redis-cluster/redis.sh #
├── /www/redis-cluster/stop.sh #
3、redis-cluster.tmpl文件:配置如下几个参数,此文件的目的是生成每一个redis实例的redis.conf
#端口
port ${PORT}
#非保护模式
protected-mode no
#启用集群模式
cluster-enabled yes
cluster-config-file nodes.conf
#超时时间
cluster-node-timeout 5000
cluster-announce-ip 10.1.1.198
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
#后台运行
#daemonize yes
pidfile /var/run/redis_${PORT}.pid
#集群加密
masterauth a123456
requirepass a123456
4、redis.sh :edis集群shell脚本文件
#!/bin/bash
#在/www/redis-cluster下生成conf和data目标,并生成配置信息
for port in `seq 6000 6005`;
do
mkdir -p ./${port}/conf && PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf && mkdir -p ./${port}/data;
done
#创建6个redis容器
for port in `seq 6000 6005`;
do
docker run -d -it -p ${port}:${port} -p 1${port}:1${port} -v /www/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf -v /www/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
#查找ip
for port in `seq 6000 6005`;
do
echo -n "$(docker inspect --format '{{ (index .NetworkSettings.Networks "redis-net").IPAddress }}' "redis-${port}")":${port}" ";
done
#换行
echo -e "\n"
#输入信息
read -p "请把输入要启动的docker容器名称,默认redis-6000:" DOCKER_NAME
#判断是否为空
if [ ! $DOCKER_NAME ];
then DOCKER_NAME='redis-6000';
fi
#进入容器
docker exec -it redis-6000 /bin/bash
5、stop.sh:卸载redis集群
#!/bin/bash
docker stop redis-6000 redis-6001 redis-6002 redis-6003 redis-6004 redis-6005
docker rm redis-6000 redis-6001 redis-6002 redis-6003 redis-6004 redis-6005
rm -rf 6000 6001 6002 6003 6004 6005
6、设置权限:
chmod 755 redis.sh stop.sh
7、创建自定义network(redis-net)
docker network create redis-net
6、执行redis.sh脚本自动创建redis容器,然后自动进入redis-6000
./redis.sh
7、执行集群,然后输入:yes,启动集群(-a a123456 是密码)。
#执行集群
redis-cli --cluster create 172.19.0.2:6000 172.19.0.3:6001 172.19.0.4:6002 172.19.0.5:6003 172.19.0.6:6004 172.19.0.7:6005 -a a123456 --cluster-replicas 1
8、进入redis
redis-cli -c -p 6000 -a a123456
9、问题处理
如果遇到: Waiting for the cluster to join 一直等待,可能问题是:
打开防火墙端口:
firewall-cmd --zone=public --add-port=6000-6005/tcp --permanent
firewall-cmd --zone=public --add-port=16000-16005/tcp --permanent
firewall-cmd --reload
如果还不行,需要去服务器提供商(阿里云,腾讯云等等)的控制面板那边手动打开相应的端口。
10、如果是准备在公网使用集群,需要修改每一个nodes.conf文件中 myself,master配置的ip地址为公网ip,并重启
需要将配置文件中的ip全部换成公网可访问的ip+
如果是准备在公网使用集群,需要修改每一个nodes.conf文件中 myself,master配置的ip地址为公网ip,并重启
需要将配置文件中的ip全部换成公网可访问的ip+
10、最后推荐一下redis的windows环境下的图形化界面
https://rdm.dev/pricing
问题解决:
-
redis集群 Waiting for the cluster to join 一直等待
redis集群 Waiting for the cluster to join 一直等待 问题: redis集群创建执行 ./redis-trib.rb create --replicas 1 XXXX:PORT1 XXXX:PORT2 .... 的时候一直等待 Waiting for the cluster to join 很久都没有反应 原因: redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口 集群总线端口为redis客户端连接的端口 + 10000 如redis端口为6379 则集群总线端口为16379 故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口 注意:iptables 放开,如果有安全组,也要放开这两个端口