redis集群主从节点自动切换方式

 更新时间:2024年01月18日 09:47:37   作者:nedjie  
这篇文章主要介绍了redis集群主从节点自动切换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

redis集群主从节点自动切换

最近在将redis作为数据库使用(redis中存放大量数据)的项目中,偶然发现redis的主从节点发生了变化,但是没有任务报错,redis集群的各节点也没有fail状态,因此记录学习一下,redis的深层机制。

为什么

首先redis是单线程的,所有的命令发送的redis会进入一个队列,依次执行。

当数据量很大时,执行flushall、keys、scan等耗时较长的命令时,就会照成redis节点阻塞。

其次,了解一下redis的集群节点检测机制。redis集群的其他节点,每隔一断时间,就会向集群中的其他节点发送ping包,以检测节点是否还活着。

如果此时,某个主节点阻塞了,收到pong包的时间超时,大于 cluster-node-timeout,就会自动切换主从节点。

此时,在redis-cli中查看cluster nodes,会发现节点会短暂的出现fail状态。

当主从节点切换完毕,redis又会重新扫描一下集群中的所有redis节点,当阻塞的redis节点,执行完之后,又会重新回到正常状态。

解决

了解了上面说的redis机制之后,如果想要避免redis节点自动切换就很简单了,只需要调大redis.conf中的配置项cluster-node-timeout(默认15000 millisec)即可。

Redis的主从复制

主从复制

主机数据更新后根据配置和策略,自动同步到从机的master/slave机制,Master以写为主,Slave以读为主。

一主二从

一主二从原理

1、配从(库)不配主(库)

2、配从(库): slaveof 主库IP 主库端口

3、主写从读、读写分离

4、从连前后同

5、主断从待命、从断重新连

一主二从搭建

1、一台服务器模拟三台主机:

  • 第一步:将redis.conf 拷贝三份,名字分别是,redis6379.conf,redis6380.conf,redis6381.conf
  • 第二步:修改三个文件的port端口,pid文件名,日志文件名,rdb文件名

如:

port 6379
pidfile /var/run/redis_6379.pid
logfile “6379.log”
dbfilename dump6379.rdb
  • 第三步:分别打开三个窗口模拟三台服务器,开启redis服务。

2、查询主从信息:info replication

3、写操作6379:

4、设置主从关系:

在6380和6381主机上分别执行命令:slaveof 127.0.0.1 6379

另一种方式,就是修改6380和6381的配置文件,在最后加上:

注意:如果主redis设置了密码,从库的redis.conf中还需要设置masterauth为主redis的密码。

5、全量复制:在6380和6381分别执行命令get k1

6、增量复制:6379执行命令:set k2 v2。然后6380端口和6381端口,分别执行命令:get k2

7、主写从读、读写分离:在6380和6381上执行写操作set k3 v3

8、主机宕机:6379执行指令shutdown,并查看6380和6381的redis信息 从机原地待命。

9、主机宕机后恢复:重启6379,并且执行写命令set k4 v4;6380和6381上分别执行get k4 主机重启后,一切正常。

10、从机宕机:6380执行指令shutdown,并查看6379和6381的redis信息

11、从机宕机后恢复:重启6380,并查看6380、6379和6381的redis信息

注意:从机跟master断开联系,必须重新连接,除非写进配置文件。

12、从机恢复连主机前,主机写操作:6379执行写命令set k5 v5,6380和6381分别执行命令get k5

13、从机恢复连接主机,6380执行命令:slaveof 127.0.0.1 6379,并且执行命令:get k5

14、从机上位:

  • 第一步:主机宕机,6379执行命令:shutdown
  • 第二步:6380断开主从关系,执行命令:SLAVEOF no one
  • 第三步:重新搭建主从,6381执行命令:info replication,SLAVEOF 127.0.0.1 6380
  • 第四步:之前主机恢复,重启6379的Redis服务,并执行命令:info replication

在6379主机宕机后,6380从机断开主从关系,6381开始还在原地待命;后来6380从机上位,6381投靠6380,6379主机即使回来但它已是孤寡老人,空头司令。

15、天堂变地狱:6379执行命令saveof 127.0.0.1 6381,并在6379和6381执行info replication

一台主机配多台从机,一台从机再配多台从机,从而实现了庞大的集群架构。同时也减轻了一台主机的压力,缺点是增加了服务器间的延迟。

复制原理

全量复制

slave启动成功连接到master后会发送一个sync命令;Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步;slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。

只要是重新连接master,一次完全同步(全量复制)将被自动执行。

增量复制

Master将新的所有收集到的修改命令依次传给slave,完成同步。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • Redis如何正确关闭和开启持久化

    Redis如何正确关闭和开启持久化

    本文主要介绍了Redis如何正确关闭和开启持久化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 使用Redis实现向量相似度搜索

    使用Redis实现向量相似度搜索

    在自然语言处理领域,有一个常见且重要的任务就是文本相似度搜索,所以本文为大家介绍一下如何利用Redis实现向量相似度搜索,解决文本、图像和音频之间的相似度匹配问题,需要的可以了解下
    2023-07-07
  • redis执行redis命令的方法教程

    redis执行redis命令的方法教程

    这篇文章主要给大家介绍了在redis中执行redis命令的方法教程,文中详细介绍了关于Redis 命令及在远程服务上执行命令的方法,介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 为什么RedisCluster设计成16384个槽

    为什么RedisCluster设计成16384个槽

    本文主要介绍了为什么RedisCluster设计成16384个槽,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Redis慢查询的实现

    Redis慢查询的实现

    本文主要介绍了Redis慢查询的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Redis+threading实现多线程消息队列的使用示例

    Redis+threading实现多线程消息队列的使用示例

    Redis多线程消息队列是一种使用Redis作为存储后端的消息队列实现,它利用Redis的线程并发处理能力来提高消息队列的处理效率,本文主要介绍了Redis+threading实现多线程消息队列的使用示例,感兴趣的可以了解一下
    2023-12-12
  • redis使用skiplist跳表的原因解析

    redis使用skiplist跳表的原因解析

    经常会有人问这个问题,redis中为什么要使用跳表?这个问题,redis作者已经给出过明确答案,今天通过本文再给大家讲解下这个问题,对redis?skiplist跳表知识感兴趣的朋友一起看看吧
    2022-10-10
  • Redis 密码设置和查看密码的方法

    Redis 密码设置和查看密码的方法

    这篇文章主要介绍了Redis 密码设置和查看密码的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • redis实现加锁的几种方法示例详解

    redis实现加锁的几种方法示例详解

    这篇文章主要给大家介绍了关于redis实现加锁的几种方法,加锁命令分别是INCR、SETNX和SET,文中给出了详细的示例代码,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • Redis官方ORM框架比RedisTemplate更优雅

    Redis官方ORM框架比RedisTemplate更优雅

    这篇文章主要为大家介绍了Redis官方ORM框架比RedisTemplate更优雅的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07

最新评论

?


http://www.vxiaotou.com