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

返回主页

一、主从复制概念

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

主从复制的作用:

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

二、主从复制集群搭建

1、准备工作

  • 配置“一主二从”的Redis集群,需要开启三个服务端(这里只是用于测试, 就只在一台服务器上开启,生产环境应该是有多台服务器的)
  • 将Redis 安装目录下的 redis.conf 文件复制出三份, 分别用作 “一主二从” 启动时的配置文件
    我演示环境的配置文件都存放在 /etc/redisConf 下,其中 “redis6379.conf” 为“master”启动的配置文件, “redis6380.conf” 和“redis6381.conf”为 “slave” 启动的配置文件

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

  • 修改三个配置文件中的配置

    • 将 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” 改成对应端口的标识, 和上述一致
  • 修改 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]#

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

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

前面讲到,Master以写为主,Slave 以读为主,下面就来试试, 在master主机中写入数据,看slave是否可以正常的读取到数据!

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

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

4、测试宕机

假设1:主机挂了,查看从机信息,主机恢复,再次查看信息

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

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

假设2:从机挂了,查看主机信息,从机恢复,查看从机信息

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

三、哨兵模式

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

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

1、哨兵模式概述

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

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

这里的哨兵有两个作用

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

然而一个哨兵进程对Redis服务器进行监控,可能会出现”哨兵”挂掉的问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。(是不是和俄罗斯的套娃一样 )

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

2、搭建哨兵模式的准备工作

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

redis-sentinel /etc/redisConf/sentinel.conf

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

测试,master 主服务器宕机以后, 会发生什么

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

可以看到,当 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 主从复制以及哨兵模式的详细图解

可以看到,当 master 发生变化之后, 对应的 sentinel.conf 配置文件也发生了变化!

测试从新将 6379 服务器上线, 我们可以看到, 当 master 服务器宕机之后, 重新上线,角色有原来的master 变成了 slave。

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

五、总结

1、哨兵模式的优缺点

优点:

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

缺点:

  • Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。
  • 实现哨兵模式的配置也不简单,甚至可以说有些繁琐
54 预览数量 2024-03-29 11:59:08 发布 时间
目录
赞数量
评论数量
返回顶部
暂无评论

暂无评论