网上可以查到很多redis集群的部署文档,但大多数都是在一台机器上部署的集群,按照这些模式部署最终会导致Waiting for the cluster to join故障,这里给出一种在多台机器上部署可以解决的方法。
本次部署采用三台服务器进行部署,每一台机器上都包含一主一从。
在其中一台机器上进行如下操作:
1.在/home/redis-cluster目录下创建结构,如下所示:
2.在7000/conf/redis.conf中添加如下内容:
port 7000
protected-mode no
pidfile /var/run/redis_7000.pid
masterauth root123redis
requirepass root123redis
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 15000
appendonly yes
3.在7001/conf/redis.conf中添加如下内容:
port 7001
protected-mode no
pidfile /var/run/redis_7001.pid
masterauth root123redis
requirepass root123redis
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 15000
appendonly yes
4.打开start.sh文件,写一个启动脚本,方便一键启动:
for port in 7000 7001;do
docker run -d --net=host -v /home/redis-cluster/${port}/conf/redis.conf:/etc/redis/redis.conf:rw -v /home/redis-cluster/${port}/data:/data:rw --restart always --name=redis-${port} redis:5.0 redis-server /etc/redis/redis.conf;
done
启动redis: sh start.sh
将以上的1-4步在另外两台机器上执行一遍,不用做修改哦。
然后进入任意一个容器内部,如进入redis-7000:
docker exec -it redis-7000 bash
执行以下命令使得集群节点之间完成互通:
redis-cli -a root123redis --cluster create ip1:7000 ip2:7000 ip3:7000 ip3:7001 ip2:7001 ip1:7001 --cluster-replicas 1
这里的-a后面是redis的密码,也就是redis.conf配置文件中设置的密码;ip1,ip2,ip3需要修改成指定的物理机的ip地址。
然后选择yes,完成集群搭建: