七、Redis 主从复制以及哨兵模式的详细图解

Redis 主从复制以及哨兵模式的详细图解

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据的复制是单向的,只能由主节点到从节点。Master以写为主,Slave 以读为主。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的作用主要包括:

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  2. 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  3. 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  4. 高可用:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

一、准备工作(修改配置文件搭建集群)

  1. 配置“一主二从”的Redis集群,需要开启三个服务端(这里只是用于测试, 就只在一台服务器上开启,生产环境应该是有多台服务器的)
  2. 将Redis 安装目录下的 redis.conf 文件复制出三份, 分别用作 “一主二从” 启动时的配置文件
    我演示环境的配置文件都存放在 /etc/redisConf 下,其中 “redis6379.conf” 为“master”启动的配置文件, “redis6380.conf” 和“redis6381.conf”为 “slave” 启动的配置文件
    七、Redis 主从复制以及哨兵模式的详细图解_第1张图片
  3. 修改三个配置文件中的配置
    • 将 redis6380.conf 和 redis6381.conf 中的 “port 6379” 改成 “port 6380”、“port 6381”
    • 将“daemonize no” 改成 “daemonize yes” (启用后台进程运行)
    • 将“pidfile /var/run/redis_6379.pid” 改成对应的端口名称(例如:redis6380.conf配置文件改成 pidfile /var/run/redis_6380.pid
    • 将“logfile “”” 改成对应端口的标识, 和上述一致
    • 将“dbfilename dump.rdb” 改成对应端口的标识, 和上述一致
  4. 修改 redis6380.conf 和 redis6381.conf 的 replicaof
    七、Redis 主从复制以及哨兵模式的详细图解_第2张图片

二、根据配置文件启动三个Redis 服务

[root@TR redisConf]# redis-server redis6379.conf
[root@TR redisConf]# redis-server redis6380.conf
[root@TR redisConf]# redis-server redis6381.conf
[root@TR redisConf]# ps -ef |  grep redis
root       70069       1  0 19:55 ?        00:00:06 redis-server 127.0.0.1:6379
root       70192       1  0 21:14 ?        00:00:00 redis-server 127.0.0.1:6380
root       70199       1  0 21:14 ?        00:00:00 redis-server 127.0.0.1:6381
root       70207   69768  0 21:15 pts/1    00:00:00 grep --color=auto redis
[root@TR redisConf]#

三、启动三个客户端、测试

七、Redis 主从复制以及哨兵模式的详细图解_第3张图片
前面讲到,Master以写为主,Slave 以读为主,下面就来试试, 在master主机中写入数据,看slave是否可以正常的读取到数据!
七、Redis 主从复制以及哨兵模式的详细图解_第4张图片
七、Redis 主从复制以及哨兵模式的详细图解_第5张图片

测试

1.主机挂了,查看从机信息,主机恢复,再次查看信息
七、Redis 主从复制以及哨兵模式的详细图解_第6张图片
七、Redis 主从复制以及哨兵模式的详细图解_第7张图片

2.从机挂了,查看主机信息,从机恢复,查看从机信息
七、Redis 主从复制以及哨兵模式的详细图解_第8张图片

哨兵模式

从上面两个测试可以看出, 当master 宕机之后,另外两台服务器的状态依旧是 slave 角色 ,这个模式是存在一些问题的。 因为我们都知道,master 主要负责写入数据, 而 slave 主要是用来读取数据,当 master 宕机后,就会出现, 只能读数据,没办法写数据。如果是生产环境,可能会导致所有业务都有问题。

思考:
能不能当master宕机之后,在slave 中随机选择一个服务器,赋予 master 的角色呢? (就好比古代的皇帝如果驾崩了, 肯定会是“储君”上位, 否则国家会发生动乱。)答案是可以的, 这里就需要用到 哨兵模式

哨兵模式概述

主从切换技术的方法是:当主服务器(master)宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel(哨兵) 架构来解决这个问题。“储君”上位 的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

七、Redis 主从复制以及哨兵模式的详细图解_第9张图片

这里的哨兵有两个作用

  • 监控(Monitoring)Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

然而一个哨兵进程对Redis服务器进行监控,可能会出现"哨兵"挂掉的问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。(我称之为 套娃模式
七、Redis 主从复制以及哨兵模式的详细图解_第10张图片
七、Redis 主从复制以及哨兵模式的详细图解_第11张图片

假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover[故障转移]操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线

哨兵模式准备工作

首先, 还是和配置Redis服务的时候一样, 复制出一份sentinel.conf 配置文件到 /etc/redisConf 下。因为 sentinel.conf 默认是一 127.0.0.1 6379master 主服务, 所以这里就不需要更改了。

执行命令

redis-sentinel /etc/redisConf/sentinel.conf

七、Redis 主从复制以及哨兵模式的详细图解_第12张图片
测试,master 主服务器宕机以后, 会发生什么
七、Redis 主从复制以及哨兵模式的详细图解_第13张图片
可以看到,当 6379 主服务器宕机以后,哨兵会通过投票,将 6381 服务器选举为新的“master”服务器,并且另外一个 6380 的从服务器也自动归属在 6381 服务器下。

查看我们复制出的 sentinel.conf 文件的内容

[root@TR ~]# cd /etc/redisConf
[root@TR redisConf]# ls
6379.log  6381.log      dump6380.rdb  redis6379.conf  redis6381.conf
6380.log  dump6379.rdb  dump6381.rdb  redis6380.conf  sentinel.conf
[root@TR redisConf]# vim sentinel.conf 

七、Redis 主从复制以及哨兵模式的详细图解_第14张图片
可以看到,当 master 发生变化之后, 对应的 sentinel.conf 配置文件也发生了变化!

测试从新将 6379 服务器上线, 我们可以看到, 当 master 服务器宕机之后, 重新上线,角色有原来的master 变成了 slave
七、Redis 主从复制以及哨兵模式的详细图解_第15张图片

总结

哨兵模式的优缺点

优点

  1. 哨兵集群模式是基于主从模式的,所有主从的优点,哨兵模式同样具有。
  2. 主从可以切换,故障可以转移,系统可用性更好。
  3. 哨兵模式是主从模式的升级,系统更健壮,可用性更高。

缺点

  1. Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
  2. 实现哨兵模式的配置也不简单,甚至可以说有些繁琐

都看到这里了, 确定不要点 赞、评论 + 收藏 吗~~~

Redis 系列文章

Linux、windows 下安装Redis图文教程
一、为什么要是用Redis?
二、Redis五大数据类型详细讲解
三、Redis.conf 配置文件详细介绍
四、Redis 的持久化(RDB、AOF)
五、Redis事务的详细介绍
七、Redis 主从复制以及哨兵模式的详细图解
八、Sentinel.conf 配置文件详细介绍
九、Redis的缓存穿透和雪崩问题,以及解决方案
整理了一些关于 Redis的高频面试题【建议收藏】

你可能感兴趣的:(Redis,redis,数据库)