非关系型数据库技术课程 第七周作业 (Redis的主从复制和哨兵模式实验)

一、实验要求

要求:完成 Redis 哨兵结构的搭建,具体要求如下:
(1)搭建一主二从的主从复制的结构;
(2)搭建三个哨兵节点;
(3)进行主从数据同步的测试;
(4)模拟主节点出现故障,哨兵节点自动转移故障;

二、知识总结

1. 主从复制

1.1 什么是主从复制

主从复制,是将多台数据库服务器分为主节点(master)和从节点(slaver),主节点数据更新后会根据配置和策略,自动同步到从节点上,从而保证主从节点中存有相同的数据。主从复制常见结构如下。
在这里插入图片描述

1.2 主从复制的作用

有了主从复制,数据可以有多份副本,这就带来了很多好处:

  • 提升数据库系统的请求处理能力 单个节点能够支撑的读流量有限。部署多个节点,并构成主从关系,主从节点一起提供服务。
  • 默认实现读写分离机制,Master 以写为主,Slave 以读为主,提升系统的缓存读写性能
  • 容灾快速恢复,提升整个系统的可用性
    因为从节点中有主节点数据的副本,当主节点宕机后,可以立刻提升其中一个从节点为主节点,继续提供服务。

1.3 Redis 的主从复制原理

主从复制,直观的做法是主节点产生一份数据的快照发送给从节点,以快照数据为基准,将之后增量的数据变更同步给从节点,保证主从数据的一致。总体来看,主从复制一般包含全量数据同步、增量同步两个阶段。

  • 全量数据同步 :主节点产生一份全量数据的快照,即 RDB 文件,并将此快照发送给从节点。且从产生快照时刻起,记录新接收到的写命令。当快照发送完成后,将累积的写命令发送绐从节点,从节点执行这些写命令。一般用于主从节点首次数据同步,完成基准数据。
  • 增量同步(命令传播) :全量数据同步完成后,主节点将执行过的写命令源源不断地发送给从节点,从节点执行这些命令,保证主从节点中数据有相同的变更,保证主从节点数据的一致。

在这里插入图片描述

2. 哨兵模式

2.1 哨兵模式的结构和作用

哨兵(Sentinel)是 Redis 官方提供的一种高可用方案,它可以监控多个 Redis 服务实例的运行情况。本质上,Sentinel 也是一个运行在特殊模式下的 Redis 服务器。主从复制模式下,一般会配置多个 Sentinel 节点,通过互相协作来实现系统的高可用。
在这里插入图片描述

2.2 哨兵模式

Sentinel 模式的作用如下:

  • 监控:Sentinel 不断的检查主服务和从服务器是否按照预期正常工作;
  • 提醒:被监控的 Redis 出现问题时,Sentinel 会通知管理员或其他应用程序;
  • 自动故障转移:监控的主 Redis 不能正常工作,Sentinel 会自动进行故障迁移操作。即将一个从服务器升级新的主服务器,并让其他从服务器挂到新的主服务器,同时向客户端提供新的主服务器地址。

2.3 Sentinel 监控原理

Sentinel 基于心跳机制监测服务状态,每隔 1 秒向集群的每个实例发送 ping 命令:

  • 主观下线:如果某 sentinel 发现某实例未在规定时间响应,则认为该实例主观下线。
  • 客观下线:若超过指定数量(quorum)的 sentinel 都认为该实例主观下线,则该实例客观下线。quorum 值最好超过 Sentinel 实例数量的一半。

quorum在配置文件中如下配置:
sentinel monitor 参数及配置
格式:Sentinel monitor <name> <masterIP> <masterPort> <Quorum投票数>
作用:监控主服务器, 并根据 Master 的配置自动监控 Master 的 Slave 节点
参数说明:

  • name:主从结构的名字
  • masterIP:主服务器的 IP
  • masterPort:主服务器的端口号
  • Quorum:判断主节点失效时,需要的哨兵节点的投票数
    例如:在这里插入图片描述

三、实验具体流程

准备配置文件

(1) 三个 Redis 主从服务的 IP 和配置文件如下:

主节点(master):端口号为 6379 完整 IP:127.0.0.1 6379
配置文件:redis.windows_6379.conf
从节点 1(slave1):端口号为 6380 完整 IP:127.0.0.1 6380
配置文件:redis.windows_6380.conf
从节点 2(slave2):端口号为 6381 完整IP:127.0.0.1 6381
配置文件:redis.windows_6381.conf

(2) 三个 Sentinel 节点配置如下:

哨兵 1(sentinel1):端口号为 26380 完整 IP:127.0.0.1 26380
配置文件:sentinel_26380.conf
哨兵 2(sentinel2):端口号为 26381 完整 IP:127.0.0.1 26381
配置文件:sentinel_26381.conf
哨兵 3(sentinel2):端口号为 26382 完整IP:127.0.0.1 26382
配置文件:sentinel_26382.conf

注意:
以上配置文件较多,实验中将这些配置文件统一放在了 D:\redis\Redis-x64-3.0.504\master_slave下:
在这里插入图片描述

(3)配置CONF文件的内容
配置文件:redis.windows_6379.conf

port 6379

配置文件:redis.windows_6380.conf

port 6380
slaveof 127.0.0.1 6379

配置文件:redis.windows_6381.conf

port 6381
slaveof 127.0.0.1 6379

配置文件:sentinel_26380.conf

#当前Sentinel服务运行的端口
port 26380

#Sentinel去监视一个名为mymaster的主redis实例
sentinel monitor mymaster 127.0.0.1 6379 1

#指定了Sentinel认为Redis实例已经失效所需的毫秒数
sentinel down-after-milliseconds mymaster 5000

配置文件:sentinel_26381.conf

port 26381

sentinel monitor mymaster 127.0.0.1 6379 1

sentinel down-after-milliseconds mymaster 5000

配置文件:sentinel_26382.conf

port 26382

sentinel monitor mymaster 127.0.0.1 6379 1

sentinel down-after-milliseconds mymaster 5000

(1)搭建一主二从的主从复制的结构:

启动主从三个Redis 服务

启动服务的方法:
在cmd中进入到redis文件的目录下

小技巧:
可以直接在文件管理器中对应的目录里输入cmd回车后快速地打开对应文件位置的cmd窗口:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分别打开三个对应位置的cmd窗口后分别输入以下命令:

redis-server.exe .\master_slave\redis.windows_6379.conf
redis-server.exe .\master_slave\redis.windows_6380.conf
redis-server.exe .\master_slave\redis.windows_6381.conf

6379:
在这里插入图片描述
6380:
在这里插入图片描述
6381:
在这里插入图片描述

(2)搭建三个哨兵节点:

启动 3 个Sentine服务

同理分别打开三个对应位置的cmd窗口后分别输入以下命令:

redis-server.exe .\master_slave\sentinel_26380.conf --sentinel
redis-server.exe .\master_slave\sentinel_26381.conf --sentinel
redis-server.exe .\master_slave\sentinel_26382.conf --sentinel

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看主从结构和哨兵结构的信息

使用命令:info replication显示主从复制的相关信息。
打开一个对应位置的cmd窗口输入redis-cli.exe启动客户端连接到主节点上
在这里插入图片描述
执行 info replication 命令。master 主节点信息如下:
在这里插入图片描述
启动客户端连接到任意一台哨兵节点上,执行 info sentinel 命令:
命令:redis-cli.exe -p 26380
在这里插入图片描述

(3)进行主从数据同步的测试:

用三个 redis-cli.exe 客户端分别连接到三台服务器上:
在这里插入图片描述
向 Master 主节点中写入数据:
在这里插入图片描述
在两个从节点上都可以到读主 Master 的数据,实现了主从数据同步:
在这里插入图片描述
从节点不能写数据实验:
在这里插入图片描述

(4)模拟主节点出现故障,哨兵节点自动转移故障:

将Master主节点停止,模拟故障:
在主节点对应的客户端执行shutdown
在这里插入图片描述
哨兵节点已监视到6379故障,自动把6381提升为主节点:

这个可能会将不同的从节点提升到主节点,不一定是6381,也可能是6380

在这里插入图片描述
连接到 6381 节点,可以发现它已成为 master:

在这里插入图片描述

现在的主从(Master/Slave)关系为:
Master是6381服务器,
Slave是6380服务器,可以继续处理用户的请求。

故障机6379服务器重启后,哨兵会自动将它设置为6381的从节点
重启6379服务器:
在这里插入图片描述
原来的 6379 主节点重新工作后,查询它的状态如下,可以看到它已成为从节点:
在这里插入图片描述
最后,主从结构为如下:
在这里插入图片描述
可见,哨兵机制自动对故障进行了转移处理,实现了高可用。

现在的Master/Slaver 结构是:

  • Master: 6381 服务器
  • Slave: 6380 和 6379 服务器

版权声明:本文为GCTTTTTT原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。