Redis手动搭建Cluster集群超详细步骤
Redis手动搭建Cluster集群超详细步骤
准备工作
1、安装编译软件
yum -y install g g-c++ libstdc++-devel
2、主机别名映射
各主机上执行vi /etc/hosts 命令,输入如下信息
192.168.51.20 node1
192.168.51.27 node2
192.168.51.30 node3
主机部署详细
别名
IP
节点
node-id
槽位数量
Node1
192.168.51.20
6379
c4bbb252c6b56230f2965da0fba4b8685b1a161c
0-5461
Node2
192.168.51.27
6379
cb3b854a41871769779ef96b5db3c116ca2d5a3d
5462-10922
Node3
192.168.51.30
6379
be9f0f4f49cb8f802765e2f01c7eff41333ac27e
10923-16383
Redis集群模式部署开始
1、所有节点创建目录
mkdir -p /usr/local/redis_cluster/redis_63{79,80}/{conf,pid,logs}
2、Redis安装包下载
get https://donload.redis.io/releases/redis-6.2.1.tar.gz
3、所有节点解压安装包
tar -zxvf redis-6.2.1.tar.gz -C /usr/local/redis_cluster/
4、所有节点编译安装Redis
cd /usr/local/redis_cluster/redis-6.2.1/
make && make install
5、集群配置
执行编辑vi /usr/local/redis_cluster/redis_6379/conf/redis.f
相同的配置文件每节点创建一份(共6份),按照注释修改对应的配置项即可
# 守护进行模式启动
daemonize yes
# 设置数据库数量,默认数据库为0
databases 16
# 绑定地址,需要修改
bind 192.168.0.120
# 绑定端口,需要修改
port 6379
# pid文件存储位置,文件名需要修改
pidfile /usr/local/redis_cluster/redis_6379/pid/redis_6379.pid
# log文件存储位置,文件名需要修改
logfile /usr/local/redis_cluster/redis_6379/logs/redis_6379.log
# RDB快照备份文件名,文件名需要修改
dbfilename redis_6379.rdb
# 本地数据库存储目录,需要修改
dir /usr/local/redis_cluster/redis_6379
# 集群相关配置 # 是否以集群模式启动
cluster-enabled yes
# 集群节点回应最长时间,超过该时间被认为下线
cluster-node-timeout 15000
# 生成的集群节点配置文件名,文件名需要修改
cluster-config-file nodes_6379.conf
6、启动集群,每个主机上执行如下2条命令
redis-server /usr/local/redis_cluster/redis_6379/conf/redis.f
redis-server /usr/local/redis_cluster/redis_6380/conf/redis.f
验证启动
1)redis集群模式的启动进程带有cluster关键字
2)查看每台节点上是否生成集群信息配置文件
cat /usr/local/redis_cluster/redis_6379/nodes_6379.conf
cat /usr/local/redis_cluster/redis_6380/nodes_6380.conf
7、加入集群
现在虽然说每个节点都成功启动了,彼此之间并没有任何联系。
所以下一步要做的就是将6个节点加入至一个集群中,如下操作示例
redis-cli -h 192.168.51.20 -p 6379
登录后执行如下命令
cluster meet 192.168.51.27 6379
cluster meet 192.168.51.30 6379
cluster meet 192.168.51.27 6380
cluster meet 192.168.51.30 6380
cluster meet 192.168.51.20 6380
验证集群
1)执行cluster nodes 查看集群信息
2)执行 stat -tnlp|grep redis ,查看10000+端口出现了,说明集群各个节点之间能互相通信了
8、主从配置
6个节点之间目前还没有任何主从关系,从cluster nodes命令输出中记录主节点的node-id信息.
是node1的6380,将它映射到node2的6379
redis-cli -h node1 -p 6380
node1:6380> cluster replicate cb3b854a41871769779ef96b5db3c116ca2d5a3d
然后是node2的6380,将它映射到node3的6379
redis-cli -h node2 -p 6380
node2:6380> cluster replicate be9f0f4f49cb8f802765e2f01c7eff41333ac27e
是node3的6380,将它映射到node1的6379
redis-cli -h node3 -p 6380
node3:6380> cluster replicate c4bbb252c6b56230f2965da0fba4b8685b1a161c
验证
执行cluster nodes查看集群节点信息
#myself表示当前登录是那个节点
9、分配槽位
槽位号从0开始,共16384个。为了写入操作能分配均匀,需要在主节点上进行平均分配。
执行如下指令即可
redis-cli -h node1 -p 6379 cluster addslots {0..5461}
redis-cli -h node2 -p 6379 cluster addslots {5462..10922}
redis-cli -h node3 -p 6379 cluster addslots {10923..16383}
验证
执行cluster nodes查看槽位分配是否正确,如图所示
10、集群部署完毕,检查集群状态
登录任一节点,执行cluster info查看集群状态
数据操作验证
集群主从验证
执行 redis-cli -h node1 -p 6379 shutdon 命令,模拟故障。
如图所示,node1状态fail,且node3从库升级为主库,槽位已迁移。
在node1上执行redis-server /usr/local/redis_cluster/redis_6379/conf/redis.f恢复节点
查看集群节点已自动变成slave