Redis群集

Redis3.0版本以.上开始支持cluster,采用的是hash slot(hash槽),可以将多个Redis实例整合在一起, 形成一个群集,也就是将数据分散到群集的多台机器上。

Redis群集原理
Redis Cluster是-一个无中心的结构, 如图9.1所示。每个节点都保存数据和整个群集的状态。每个节点都会保存其他节点的信息,知道其他节点所负责的槽,并且会与其他节点定时发送心跳信息,能够及时感知群集中异常的节点。
在这里插入图片描述
当客户端向群集中任一节 点发送与数据库键有关的命令时,接收命令的节点会计算出命令要处理的数据库键属于哪个槽,并检查这个槽是否指派给了自己。如果键所在的槽正好指派给了当前节点,那么节点直接执行这个命令;如果键所在的槽并没有指派给当前节点,那么节点会向客户端返回一个MOVED错误,指引客户端转向(redirect) 正确的节点,并再次发送之前想要执行的命令。

群集角色有Master和Slave。Master 之间分配slots,一共16384个slot。Slave 向它指定的Master同步数据,实现备份。当其中的一个Master无法提供服务时,该Master的Slave 将提升为Master,以保证群集间slot的完整性。当其中的某一个Master和它的Slave都失效,导致了slot不完整,群集失效,这时就需要人工去处理了。

群集搭建好后,群集中的每个节点都会定期地向其他节点发送PING消息,如果接收PING消息的节点没有在规定的时间内返回PONG消息,那么发送PING 消息的节点就会将其标记为疑似下线(probable fail, PFAIL)。 各个节点会通过互相发送消息的方式来交换群集中各个节点的状态信息。如果在一个群集里面,半数以上的主节点都将某个主节点x报告为疑似下线,那么这个主节点x将被标记为已下线(FAIL), 同时会向群集广播一条关于主节点x的FAIL 消息,所有收到这条FAIL消息的节点都会立即将主节点x标记为已下线。

当需要减少或者增加群集中的机器时,我们需要将已经指派给某个节点(源节点) 的槽改为指派给另一个节点(目标节点),并且将相关槽所属的键值对从源节点移动到目标节点。Redis群集的重新分片操作是由Redis的群集管理软件redis-trib负责执行的,不支持自动的分片,而且需要自己计算从哪些节点上迁移多少Slot, 在重新分片的过程中,群集不需要下线,并且源节点和目标节点都可以继续处理命令请求。

1.架构细节
(1)所有的redis节点彼此互联(PING–PONG机制),内部使用二进制协议优化传输速度和带宽。
(2) 节点的失效(fai) 在群集中超过半数的主(master) 节点检测失效时才生效。
(3) 客户端与redis 节点直连,不需要中间代理(proxy) 层,客户端不需要连接群集所有节点,连接群集中任何一个可用节点即可.
(4) redis-cluster 把所有的物理节点映射到[0-16383]slot 上, cluster 负责维护node<->slot<->key.
2. Redis-cluster 选举
如图9.2所示,选举过程是群集中所有master 参与,如果半数以上master节点与当前master节点通信超时(cluster -node- timeout),认为当前master 节点挂掉。以下两种情况为整个群集不可用(cluster_ state:fail), 当群集不可用时,所有对群集的操作都不可用,收到(error) CLUSTERDOWN. Thecluster is down) 错误。
在这里插入图片描述
在这里插入图片描述
➢如果群集任意 master挂掉,且当前master没有slave,则群集进入fail 状态,也可以理解成群
集的slot映射[0-16383]不完整时进入fail状态。
➢如果群集中超过半数的 master挂掉,无论是否有 slave, 群集都进入fail 状态。
默认情况下,每个群集的节点都使用两个TCP端口,一个是6379, -个是16379; 6379 服务于客户端的连接,16379 用于群集总线,即使用二进制协议的节点到节点通信通道。节点使用群集总线进行故障检测、配置更新、故障转移授权等。如果开启了防火墙,需要开放这两个口。

Redis群集部署
理解了Redis原理之后,我们来学习Redis群集具体的部署。在本章中我们使用6台服务器搭建Redis群集,其中3台为master, 3台为slave, 6台服务器的IP地址为: 192. 168.10.161/24-
192 , 168 10.166/24;服务器系统均为CentOS系统。群集部署的具体操作步骤主要分为以下几个。
在这里插入图片描述
https://blog.csdn.net/weixin_44907813/article/details/101103859 Redis安装参考
1.安装Redis并修改配置文件
在每一台服务器 上都要安装Redis,按照前面的方法安装即可,然后修改配置文件如下。其中每台服务器都要修改,只是IP地址不同而已,其他配置都-样。
在这里插入图片描述
在每台服务器.上重启redis服务,并查看6379和16379端口是否已经正常开启。

在这里插入图片描述
2.使用脚本创建群集
创建群集要用到ruby的一个脚本,在创建群集前,需要先安装ruby 的运行环境和ruby的Redis客户端。该操作在其中一台服务器上进行即可。gem命令是提前下载的redis -3.2.0. gem软件包提供的,直接上传即可使用。
在这里插入图片描述
使用脚本创建群集。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3. 测试群集
登录Redis群集,设置键值测试。这里需要跟"-c° 参数来激活群集模式。
在这里插入图片描述
上述过程可以看到登录的是群集中任意一台服务器。 当创建键值时,重定向到其他的服务器上,是按照slot分配的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值