一、运行环境

环境和软件版本

版本

阿里云Centos

7.5

Redis

5.0.7

二、节点情况

节点:端口

角色

0.0.0.0:7001

主节点

0.0.0.0:7002

主节点

0.0.0.0:7003

主节点

0.0.0.0:7004

从节点

0.0.0.0:7005

从节点

0.0.0.0:7006

从节点

三、环境准备

mkdir /home/redis-cluster/7001
make install PREFIX=/home/redis-cluster/7001
cp /home/redis-cluster/redis-5.0.7/redis.conf /home/redis-cluster/7001/bin/

修改配置文件以下内容:

# 修改端口为7001
port 7001

# 设置后台启动
daemonize yes

# 不限制绑定ip
bind 0.0.0.0

# 打开cluster-enabled
cluster-enabled yes

将节点的内容依次复制到其他节点,主从节点之间的密码要保持一致,注意修改端口。

cp -r /home/redis-cluster/7001/* /home/redis-cluster/7002/

准备一个shell脚本,用来统一启动节点。

cd 7001/bin 
./redis-server redis.conf 
cd ../.. 

cd 7002/bin 
./redis-server redis.conf 
cd ../..

cd 7003/bin 
./redis-server redis.conf 
cd ../..

cd 7004/bin 
./redis-server redis.conf 
cd ../..

cd 7005/bin 
./redis-server redis.conf 
cd ../..

cd 7006/bin 
./redis-server redis.conf 
cd ../..

echo "redis-cluster start success..."

赋予执行脚本写和执行的权限

chmod u+x start.sh

四、安全配置

生产环境下集群不能裸奔,所以要增加安全配置。

# 登录集群
./redis-cli -h 127.0.0.1 -p 7001 -c
# 设置密码
config set requirepass 123456

# 密码登录
auth 123456

# 设置链接密码
config set masterauth 123456

# 将修改重写到配置文件中
config rewrite

回去看配置文件,可以发现是重写了masterauth和requirepass,所以每个节点去修改这两个配置项也是可以的。

redis提示1067 redis 7001_redis

五、集群安装

运行上面创建的脚本,查看进程是否正常启动

redis提示1067 redis 7001_redis-cluster_02


集群创建,-a后面携带的是密码

./redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1 -a 123456

显示槽的分配和结果情况则表示集群搭建成功

redis提示1067 redis 7001_redis-cluster_03


以集群形式访问

./redis-cli -h 127.0.0.1 -p 7001 -c

# 查看集群状态
cluster info

# 查看集群节点
cluster nodes

登录的是7001,添加一个测试数据set name helloworld,可以看到此时通过计算得到的槽式5789,将数据分配给7002这个节点。

redis提示1067 redis 7001_Redis高可用_04


到这基本上就完成了整个Redis-Cluster的搭建部署流程。

六、踩到的坑

1、如果是云服务或者是远程服务器,redis记得要取消ip的绑定,不然后面创建集群的时候会连不上

# 不限制绑定ip
bind 0.0.0.0

2、./redis-cli --cluster create创建集群的时候,如果是云服务要记得用外网地址。

客户端操作数据的时候,会计算槽获取要操作的Redis节点,节点信息保存在node.conf里,这里的信息就是创建集群的时候指定的信息,如果不是外网地址,在数据操作中如果发生重定向,客户端拿到的是错误地址就会导致访问不到节点。

3、如果是在同个机器下部署伪集群,可能会出现一直卡在等待客户端加入,仔细看控制台打印的内容发现节点的id是一样的,此时可以修改node.conf的文件名,例如:node.conf -> node_7001.conf

redis提示1067 redis 7001_redis提示1067_05