Redis学习四:主从、哨兵、集群模式介绍


本文是学习B站狂神说的 Redis学习视频所总结的视频笔记~~~

概述

Redis拥有4种常见的运行模式,分别为:单机、主从复制、哨兵、集群模式。其中,最基础的是单机模式,它的优势即为部署简单,费用低廉,但可靠性非常差,一旦机器宕机将会影响整个服务,仅适用不需要很高的性能以及可靠性的小型业务场景。接下来,主要介绍其他三种多机器运行的模式。

主从复制

原理

就是将一台redis服务器的数据,复制到其他的redis服务器,前者称为主节点(master/leader,主节点不用配置,redis默认单机就是主节点),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。master以写为主,slave以读为主主从复制,读写分离

作用/优点

数据冗余(实现数据的热备份), 故障恢复,负载均衡(读写分离等操作,可以减缓服务器压力,架构中经常使用),高可用基石(它是哨兵与集群能够实施的基础);集群模式的最低配置应该是一主二从,三台服务器;

   在实际应用中,使用一台redis是不可能的,主要有可能发生单点故障,宕机的可能性,内存容量有限,单台redis最大使用内存不超过20G;一般至少会配置三台redis服务器,遵循一主二从的规则;只要在公司中,主从复制是必用的;

环境配置

只配置从库;

127.0.0.1:6379> info replication     # 查看当前库的信息
# Replication
role:master    # 角色  主机
connected_slaves:0    # 没有从机
master_failover_state:no-failover
master_replid:c6b086518d1138e2166e2c4d9924d799f6593f6e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

   可以只配置单机多集群环境,复制3个配置文件,然后修改对应的信息【端口、pid名字、log文件名、dump.rdb名称】即可;*默认情况下,每一台redis服务器都是主节点;*配置从机的命令:

127.0.0.1:6380> slaveof ip port

但通常命令是不永久的,需要在配置文件redis.conf中查询replication去配置,如果主机有密码,还需要配置一下密码;
主机可以写,从机不能写只能读,从机可以读取主机中存入的东西,但不能写入;当主机断开连接的时候,从机依旧连接到主机的,但无写操作,若主机回来了,从机依旧可以获取到主机中的写信息;

复制原理

当slave启动成功连接到master后会发送一个sync同步命令,master接到命令,启动后台的存盘进程,同时收集所有用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到slave,并且完成一次完全同步(全量复制);
   全量复制 —— slave服务在接收到数据库文件数据后,将其存盘并加载到内存中;
    增量复制 —— master继续将新的所有收集到的修改命令依次传给slave,完成同步;
    但只要是重新连接master,全量复制将会被自动执行,数据一定可以在从机中看到;

主从复制实现的不同方式

请添加图片描述
    当主机挂机了,能否选择一个主机呢?通常需要我们手动去调整,即谋朝篡位!

127.0.0.1:6380> slaveof no one   # 让自己变成主机

但有一个问题值得引起重视,手动调整主机非常麻烦!!!

哨兵模式

哨兵模式就是自动选取主机的方法。在上面的案例中我们使用一主二从的方式配置了redis集群,可以发现如果当主机宕机,就会存在一些问题,例如无法写数据等等,哨兵模式就是自动切换主机。哨兵默认端口26379;(自动选举主机的模式——重点!!!)

原理概述

哨兵模式是一种特殊的模式,redis提供了哨兵的命令,它是一个独立的进程,原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个redis实例;请添加图片描述

请添加图片描述

作用

  • 通过发送命令,令redis服务器返回运行状态,包括主服务器与从服务器;
  • 当哨兵检测到master宕机,会自动将slave切换到master,然后通过发布订阅模式通知其他从服务器,修改配置文件,切换主机;

    为了防止单哨兵出现问题,可以多个哨兵进行监控,哨兵之间也可以进行监控,这样就形成了多哨兵模式(起步就是6个进程,特别麻烦),哨兵模式也可以集群,如果我们配置单个哨兵来监视所有主从集群,一旦哨兵所在的主机宕机,那么哨兵也就不存在了,因此也可以配置哨兵集群,哨兵之间不仅监视redis,还要各自监视。
    假设主库宕机,哨兵1先检测到这个结果,系统并不会马上进行切换,仅仅是哨兵1认为主服务器不可用,这个现象称为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值的时候,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover(故障转移)操作。切换成功后就会通过发布订阅模式,让各个哨兵吧自己监视的从服务器切换主机,这个过程称为客观下线

配置

  1. 配置哨兵配置文件 : sentinel.conf
# sentinel monitor 被监控的主机名称 host port 1
sentinel monitor myredis 127.0.0.1 6379 1

1表示主机挂了,slave投票看让谁接替为主机,票数最多的成为主机;

  1. 启动哨兵 (bin目录下)
redis-sentinel kconfig/sentinel.conf

如果master节点断开了,此时会从从机中随机选择一个服务器指定为主机;

4484:X 09 Sep 2020 14:25:14.436 # Sentinel ID is 96d49dd51a76685defccae4a712ce14a3c5e7e7f
4484:X 09 Sep 2020 14:25:14.436 # +monitor master myredis 127.0.0.1 6379 quorum 1
4484:X 09 Sep 2020 14:25:14.436 * +slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:25:14.438 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.524 # +sdown master myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.524 # +odown master myredis 127.0.0.1 6379 #quorum 1/1
4484:X 09 Sep 2020 14:26:20.524 # +new-epoch 1
4484:X 09 Sep 2020 14:26:20.524 # +try-failover master myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.526 # +vote-for-leader 96d49dd51a76685defccae4a712ce14a3c5e7e7f 1
4484:X 09 Sep 2020 14:26:20.526 # +elected-leader master myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.526 # +failover-state-select-slave master myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.592 # +selected-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.592 * +failover-state-send-slaveof-noone slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.654 * +failover-state-wait-promotion slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.709 # +promoted-slave slave 127.0.0.1:6380 127.0.0.1 6380 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.709 # +failover-state-reconf-slaves master myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:20.782 * +slave-reconf-sent slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:21.751 * +slave-reconf-inprog slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:21.751 * +slave-reconf-done slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:21.816 # +failover-end master myredis 127.0.0.1 6379
4484:X 09 Sep 2020 14:26:21.816 # +switch-master myredis 127.0.0.1 6379 127.0.0.1 6380
4484:X 09 Sep 2020 14:26:21.816 * +slave slave 127.0.0.1:6381 127.0.0.1 6381 @ myredis 127.0.0.1 6380
4484:X 09 Sep 2020 14:26:21.816 * +slave slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
4484:X 09 Sep 2020 14:26:51.863 # +sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
4484:X 09 Sep 2020 14:29:32.130 # -sdown slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380
4484:X 09 Sep 2020 14:29:42.080 * +convert-to-slave slave 127.0.0.1:6379 127.0.0.1 6379 @ myredis 127.0.0.1 6380

如上图所示,选定了6380作为主机;如果原本的主机回来了,只能作为新主机的从机。

优点

  • 哨兵集群,基于主从复制模式,所有的主从配置优点,全有;
  • 主从可以切换,故障可以转移,系统可用性更好;
  • 哨兵模式是主从模式的升级,手动到自动,更加健壮;

缺点

  • 在线扩容不方便,集群容量一旦到达上线,在先扩容就非常麻烦;
  • 实现哨兵模式的配置其实是很麻烦的,里面有很多选择;例如:故障转移时间等;

集群模式(官方推荐)

哨兵模式虽然基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在redis3.0上加入了 Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容

原理

请添加图片描述
集群的配置:集群部署至少需要3台以上的master节点,最好使用3主3从6个节点的模式;请添加图片描述
这里的 6 台 redis 两两之间并不是独立的,每个节点都会通过集群总线(cluster bus),与其他的节点进行通信。

特点

  • 所有的redis节点彼此互联,内部使用二进制协议优化传输速度和带宽;
  • 节点的 fail 是通过集群中超过半数的节点检测失效时才生效;
  • 客户端与 Redis 节点直连,不需要中间代理层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

工作方式

   在 Redis 的每一个节点上,都有这么两个东西,一个是插槽(slot),它的的取值范围是:0-16383。还有一个就是cluster,可以理解为是一个集群管理的插件。当我们的存取的 Key到达的时候,Redis 会根据 crc16的算法得出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。

复制原理

为了保证高可用,redis-cluster集群之间引入了主从模式,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点ping一个主节点A时,如果半数以上的主节点与A通信超时,那么认为主节点A宕机了。如果主节点A和它的从节点A1都宕机了,那么该集群就无法再提供服务了。

优点

  • 实现了分布式存储,节省了内存;
  • 保留了高可用,数据冗余,负载均衡等特点。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值