Redis之Cluster集群

1.集群

上一篇 哨兵模式 中,当主节点挂了,哨兵先对主节点主观下线,然后多个哨兵投票后客观下线,接着哨兵选举其中一个从节点升级为主节点。在此过程中redis是无法提供写操作,可能缺失数据。同时整个架构中依然只有一个master提供写服务,写操作的压力也是很大的。

Redis集群是一个由多个主从节点群组成的分布式服务集群,它具有复制、高可用和分片特性。
Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。

2.环境

Redis的集群搭建最少需要3个master节点
master节点进行读写操作,slave节点作为备用节点

机器节点
yzm1192.168.192.128 6391(主) 192.168.192.128 6392(从)
yzm2192.168.192.129 6393(主) 192.168.192.129 6394(从)
yzm3192.168.192.130 6395(主) 192.168.192.130 6396(从)

3.配置redis.conf

vim conf/redis-6391.conf
------------------------------编辑内容----------------------------------
#端口
port 6391

#绑定IP
bind 192.168.192.128

#关闭保护模式,允许外部访问
protected-mode yes

#授权密码
requirepass 3Q3Q

#守护进程,即后台启动
daemonize yes

#进程ID,默认/var/run/redis.pid
pidfile /var/run/redis-6391.pid

#日志
loglevel notice
logfile "/usr/local/redis/redis-6.2.4/logs/log-6391.log"

#数据文件
dir /usr/local/redis/redis-6.2.4/db/
dbfilename dump-6391.rdb

#数据同步
save 900 1
save 300 10
save 60 10000

#作为slave时,连接master的密码
masterauth "3Q3Q"

#集群
#启动集群
cluster-enabled yes
#集群节点信息文件
cluster-config-file nodes_6391.conf
#集群节点离线的超时时间
cluster-node-timeout 15000

yzm1 新增 6391、6392
在这里插入图片描述
在这里插入图片描述

yzm2 新增 6393、6394
在这里插入图片描述
在这里插入图片描述

yzm3 新增 6395、6396
在这里插入图片描述
在这里插入图片描述

4.启动redis实例

./bin/redis-server ./conf/redis-6391.conf
./bin/redis-server ./conf/redis-6392.conf
ps -ef|grep redis
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.创建集群

./bin/redis-cli -a 3Q3Q --cluster-replicas 1 --cluster create 192.168.192.128:6391 192.168.192.128:6392 192.168.192.129:6393 192.168.192.129:6394 192.168.192.130:6395 192.168.192.130:6396

其中,
-a 3Q3Q 表示密码
–cluster-replicas 1 表示每个master下挂载1个slave(2,则表示挂载2个slave)
在这里插入图片描述
登录集群
./bin/redis-cli -c -h 192.168.192.128 -p 6391 -a 3Q3Q
-c 表示集群登录
cluster info 查看集群信息
cluster nodes 查看节点信息
在这里插入图片描述
存取数据
在这里插入图片描述
可以看到集群存值是不固定,根据算法来确定存储
槽位定位算法:HASH_SLOT = CRC16(key) % 16384
Cluster 默认会对 key 值使用 crc16 算法进行 hash 得到一个整数值,然后用这个整数值对 16384 进行取模来得到具体槽位。
跳转重定位 :
当客户端向一个节点发出了指令,首先当前节点会计算指令的 key 得到槽位信息,判断计算的槽位是否归当前节点所管理;若槽位不归当前节点管理,这时它会向客户端发送一个特殊的跳转指令携带目标操作的节点地址,告诉客户端去连这个节点去获取数据。客户端收到指令后除了跳转到正确的节点上去操作,还会同步更新纠正本地的槽位映射表缓存,后续所有 key 将使用新的槽位映射表。

其中slave节点不会提供服务,只是作为对应master节点的一个备份。
当master挂了后,slave自动升级为master
在这里插入图片描述
关闭master=6395
在这里插入图片描述
在这里插入图片描述
6395显示fail,6392升级为master
重新启动6395后,挂载在6392下面
在这里插入图片描述
在这里插入图片描述

6.新增节点

yzm3 新增 6397、6398
cp conf/redis-6396.conf conf/redis-6397.conf
批量替换
:%s/6396/6397/g
在这里插入图片描述
在这里插入图片描述

启动 6397、6398
在这里插入图片描述

6397加入集群
./bin/redis-cli -a 3Q3Q --cluster add-node 192.168.192.130:6397 192.168.192.128:6391
其中192.168.192.128:6391 可以是集群中的任意一个
在这里插入图片描述
查看集群节点,可以看到6397已经加入了集群
在这里插入图片描述
6398也加入集群(另一种加入集群方式)
cluster meet 192.168.192.130 6398
在这里插入图片描述
刚加入的6397、6398都是master节点,现将6398作为salve挂载在6397下

./bin/redis-cli -c -a 3Q3Q -h 192.168.192.130 -p 6398 cluster replicate a9a021f109bb368cfed7cdefc6412e540f7ec198

其中 a9a021f109bb368cfed7cdefc6412e540f7ec198 是 6397的ID,通过cluster nodes 可以查看
在这里插入图片描述
在这里插入图片描述
也可以用6398先登录集群
./bin/redis-cli -c -a 3Q3Q -h 192.168.192.130 -p 6398
再执行挂载命令
cluster replicate 746ccd3c686768f8b2247584096aa06446c199e5

7.分配slots

集群中的 哈希曹 是固定的,共16383。由master节点持有。
新添加的节点是没有哈希曹的,所以并不能正常存储数据,需要给新添加的节点分配哈希曹。

给6397分配slots哈希曹
./bin/redis-cli -a 3Q3Q --cluster reshard 192.168.192.130:6397
其中,
reshard 重新分片
192.168.8.130:6397 集群中的任意一个节点
在这里插入图片描述

#打算分配多少槽位(1~16384),这里选择1000
How many slots do you want to move (from 1 to 16384)? 1000
#1000槽位分配给谁?指定ID即可,这里是6397的ID
What is the receiving node ID? a9a021f109bb368cfed7cdefc6412e540f7ec198
#有两种获取槽位的方式:
#1.all从所有master平均获取
#2.从指定ID获取,这里是从6391获取
#最后都是以done结束
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: c2a1dd1d0ff40f7bbd89098b8af65f2b7c2aa547(或者输入all)
Source node #2: done

查看分片后的哈希槽

8.删除节点

顺序:
清除master节点slots-- > 删除slave节点 --> 删除master节点
在这里插入图片描述
在这里插入图片描述

 ./bin/redis-cli -a 3Q3Q --cluster del-node 192.168.192.128:6391 f2a2d63df5f28ea35fdbfd22f4526f35e44ee534

del-node 移除节点
192.168.192.128:6391 集群中的任意一个节点
f2a2d63df5f28ea35fdbfd22f4526f35e44ee534 被移除的节点ID,这里是6398 slave节点
在这里插入图片描述
在这里插入图片描述
通过 forget 命令移除6397
cluster forget a9a021f109bb368cfed7cdefc6412e540f7ec198
在这里插入图片描述

相关链接

首页
上一篇:哨兵模式
下一篇:消息队列

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值