docker安装使用看这里:https://blog.csdn.net/u011477914/article/details/86591452
php连接redis集群 CodeIgniter(ci)框架redis5集群RedisClustert类使用,集群加密码调用:https://blog.csdn.net/u011477914/article/details/89418953
php redis集群 RedisCluster类:https://blog.csdn.net/u011477914/article/details/89465253
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
如果还不行,需要去服务器提供商(阿里云,腾讯云等等)的控制面板那边手动打开相应的端口。