Redis之哨兵与集群

目录

一、单点服务器带来的问题

二、Redis集群

1. Redis集群概述

2. Redis集群的优点

三、Redis集群模式

1.Redis集群模式分类

2.主从复制

3. 主从复制流程

四、哨兵

1. 哨兵结构

2. 哨兵模式的功能

3. 哨兵的核心知识

4. 哨兵作用

5. 哨兵模式下的故障迁移

五、Cluster集群

1. Redis-Cluster集群的作用

2. Redis集群的数据分片

3. Redis集群的主从复制模型

4. Redis Cluster的工作原理

六、主从复制实验

七、哨兵部署

八、搭建Redis 群集模式


一、单点服务器带来的问题

  • 单点故障,服务不可用
  • 无法处理大量的并发数据
  • 数据丢失----大灾难
  • 开启多Redis进程
  • Redis默认单进程
  • 开启多进程导致CPU压力过大
  • 对于服务器(纵向)消耗服务器硬件性能CPU

解决方法

搭建Redis集群

二、Redis集群

1. Redis集群概述

  • Redis集群是一个提供在多个Redis间节点间共享数据的程序集
  • Redis集群并不支持处理多个keys的命令,因为这需要在不同节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误
  • Redis集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下可继续处理命令

2. Redis集群的优点

  • 自动分割数据到不同的节点上
  • 整个句群的部分节点失败或者不可达的情况下能够继续处理命令

三、Redis集群模式

1.Redis集群模式分类

主从同步、复制

主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复

缺陷

故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制

哨兵模式

在主从复制的基础上,哨兵实现了自动化的故障修复。

缺陷

写操作无法负载均衡;存储能力收到单机的限制;哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作

cluster集群

通过集群,Redis解决了写操作无法负载均衡,以及存储能力收到单机限制的问题,实现了较为完善的高可用方案

2.主从复制

1)主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复

缺陷

故障恢复无法自动化,写操作无法负载均衡,存储能力受到单机的限制

2)通过持久化功能,redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中的数据保存到硬盘上,重启会从硬盘上加载数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务,为此,redis提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。

3)在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据(slave)。主数据可以进行读写操作,当写操做导致数据变化时自动把数据同步给从数据库,而从数据库一般是只读的,并接收主数据同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库

主从复制的作用:

数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余的方式

故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复:实际上是一种服务的冗余

负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载:尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务的并发量

高可用基石:除了上述作用意外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础

3. 主从复制流程

① 若启动一个Slave机器进程,则它会向Master机器发送一个"sync_command"命令,请求同步连接

② 无论是第一次连接还是重新连接,Master机器都会启动一个后台进程,将数据快照(RDB)保存到数据文件中(执行rdb操作),同时Master还会记录修改数据的所有命令并缓存在数据文件中。

③ 后台进程完成缓存操作之后,Master机器就会向Slave机器发送数据文件,Slave端机器将数据文件保存到硬盘上,然后将其加载到内存中,接着Master机器就会将修改数据的所有操作一并发送给Slave端机器。若Slave出现故障导致宕机,则恢复正常后会自动重新连接。

④ Master机器收到slave端机器的连接后,将其完整的数据文件发送给Slave端机几器,如果Mater同时收到多个slave发来的同步请求则Master会在后台启动一个进程以保存数据文件,然后将其发送给所有的Slave端机器,确保所有的Slave端机器都正常。

四、哨兵

哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题

1. 哨兵结构

哨兵节点

数据节点

2. 哨兵模式的功能

  • 集群监控:负责监控Redis的master和slave进程是否正常工作
  • 消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为告警通知给管理员
  • 故障转移:如果master node(master角色)挂掉了,会自动转移到slave node上
  • 配置中心:如果故障转移发生了,通知client客户端新的master地址
  • 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控在主节点出现故障的情况下,能将从节点中的一个从节点角色升级为主节点,进行故障转义,保证系统的可用性

核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移

3. 哨兵的核心知识

  • 哨兵至少需要 3 个实例,来保证自己的健壮性。
  • 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性

对于哨兵 + redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。

4. 哨兵作用

监控

不断的检查master和slave是否正常运行

master存活检测master与slave运行情况检测

通知(提醒)

当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知

自动故障转移

断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端地址

哨兵模式会监控所有的redis工作节点是否正常,当master出现问题的时候,因为其他节点与主节点失去联系,因此会投票,投票过半就认为这个master的确出现问题,然后会通知哨兵间,然后从slaves中选取一个作为新的master

通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器

当哨兵监测到Redis主机宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他服务器,修改配置文件,让他们换主机

5哨兵模式下的故障迁移

  • 主观下线

哨兵(Sentinel)节点会每秒一次的频率向建立了命令连接的实例发送PING命令,如果在down-after-milliseconds毫秒内没有做出有效响应包括(PONG/ LOADING/MASTERDOWN)以外的响应,哨兵就会将该实例在本结构体中的状态标记为SRI_s_DOWN主观下线

  • 客观下线

当一个哨兵节点发现主节点处于主观下线状态是,会向其他的哨兵节点发出询问,该节点是不是已经主观下线了。如果超过配置参数quorum个节点认为是主观下线时,该哨兵节点就会将自己维护的结构体中该主节点标记为SRIO DOWN客观下线询问命令SENTINEL is-master-down-by-addr

  • master选举

在认为主节点客观下线的情况下,哨兵节点节点间会发起一次选举,命令为:SENTINEL is-master-down-by-addr只是runid这次会将自己的runid带进去, 希望接受者将自己设置为主节点。如果超过半数以上的节点返回将该节点标记为leacer的情况下,会有该leader对故障进行迁移

五、Cluster集群

集群,即Redis Cluster,是Redis 3.0开始引入的分布式存储方案。

集群由多个节点(Node)组成,Redis的数据分布在这些节点中。集群中的节点分为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制

1. Redis-Cluster集群的作用

(1)数据分区:数据分区(或称数据分片)是集群最核心的功能。集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力。Redis单机内存大小受限问题,在介绍持久化和主从复制时都有提及:例如,如果单机内存太大,bgsave和bgrewriteaof 的:保存操作可能导致主进程阻塞,主从环境下主机切换时可能导致从节点长时间无法提供服务,全量复制阶段主节点的复制缓冲区可能溢出。

(2)高可用:集群支持主从复制和主节点的自动故障转移〈与哨兵类似)﹔当任一节点发生故障时,集群仍然可以对外提供服务。

2. Redis集群的数据分片

Redis集群引入了哈希槽的概念

Redis集群有16384个哈希槽(编号0-16383)集群的每个节点负责部分哈希槽

每个Key通过CRc16校验后对16384取余来决定放置哪个哈希槽,通过这个值,去找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作

#以3个节点组成的集群为例:

节点A包含0到5460号哈希槽

节点B包含5461到10922号哈希槽

节点C包含10923到16383号哈希槽

3. Redis集群的主从复制模型

集群中具有A、B、C三个节点,如果节点B失败了,整个集群就会因缺少5461-10922这个范围的槽而不可以用。

为每个节点添加一个从节点A1、B1、C1整个集群便有三个Master节点和三个slave 节点组成,在节点B失败后,集群选举:一位为主节点继续服务。当B和B1都失败后,集群将不可用。

4. Redis Cluster的工作原理

在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题,即单机redis写入性能受限于单机的内存大小、并发数量、网卡速率等因素。

六、主从复制实验

---------------------- 搭建Redis 主从复制 ----------------------------------------
Master节点: 192.168.174.10
Slave1节点: 192.168.174.20
Slave2节点: 192.168.174.30

安装gcc gcc-c++编译器--------------------三台都要安装Redis

 解压安装包

 编译安装

 执行install——server.sh脚本

 优化路径

 查看服务

 -----修改 Redis 配置文件(Master节点操作)-----

 #70行,修改监听地址为0.0.0.0

 启动Redis

 -----修改 Redis 配置文件(Slave节点操作)-----

 开启Redis功能

-----验证主从效果----- 

在Master节点上看日志:

 在Master节点上验证从节点:

七、哨兵部署

---------------------- 搭建Redis 哨兵模式 ----------------------------------------

Master节点: 192.168.174.10
Slave1节点: 192.168.174.20
Slave2节点: 192.168.174.30

-----修改 Redis 哨兵模式的配置文件(所有节点操作)-----

 -----启动哨兵模式-----

 先启master,再启slave

 -----查看哨兵信息-----

 这里主sentinel_masters:1

从slaves=2,

哨兵sentinels=3

八、搭建Redis 群集模式

环境:Redis

三台主服务器

                  master1:192.168.174.10

                  master2 :  192.168.174.30

                  master3:192.168.174.50

三台从服务器

                 slave1:  192.168.174.20

                 slave2:192.168.174.40

                 slave3: 192.168.174.60   

redis的集群一般需要6个节点,3主3从。方便起见,这里所有节点在同一台服务器上模拟:

以端口号进行区分:3个主节点端口号:6001/6002/6003,对应的从节点端口号:6004/6005/6006。

---------------------- 搭建Redis 群集模式 ----------------------------------------

#开启群集功能:
#其他5个文件夹的配置文件以此类推修改,注意6个端口都要不一样。

 #启动redis节点

分别进入那六个文件夹,执行命令:redis-server redis.conf ,来启动redis节点

查看服务状态

猜你喜欢

转载自blog.csdn.net/Guo_youyou/article/details/131981074