主从同步(复制)


主从同步是Redis高可用服务的基石,其将主要存储数据的服务器成为主服务器(master),把对主服务器进行复制的服务器成为从服务器(slave)。

且从节点还可以是其他服务器的主节点,并且拥有属于自己的从节点

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_数据库


通过主从模式来进行读写的分离,主服务器进行写操作,然后将数据同步给从服务器,让从服务器来进行读操作,通过这种模式来分摊主服务器的压力。

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

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

Redis的复制功能主要分为同步(sync)与命令传播(command propagate) 两个操作

同步
同步操作用于将从服务器的数据库状态更新至主服务器当前的数据库状态。

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_Redis_02

从服务器对主服务器进行复制之前,需要先将从服务器的数据库状态更新至主服务器的服务器状态

命令传播

命令传播操作用于在主服务器的数据库状态发生变化(执行写命令),导致主从服务器的数据库状态不一致时,让主从服务器的数据库重新回到一致状态。

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_Redis_03


当客户端对主服务器进行写操作后,此时主从服务器的数据库状态就会不一致。为了能够再次让主从服务器的数据库状态恢复一致,此时主服务器会将同一命令发送给从服务器,当从服务器执行完改命令时,数据库状态再次恢复一致。

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_数据库_04


优点

性能方面:可以实现读写的分离,由主服务器来进行写操作,并将写的结果同步至从服务器,由从服务器来进行读操作,这样就能将压力分摊到各个服务器上
高可用:当主服务器宕机之后,可以通过故障转移机制将从节点提升为主节点,快速的进行服务器的宕机恢复。
防止数据丢失:当主服务器的磁盘损坏或者数据丢失后,因为从服务器还保留相关的数据,不至于导致数据全部丢失
缺点

由于主从同步需要人工管理,主节点崩溃后需要人工进行从节点的提升才能恢复Redis的正常使用

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式

从上面可以看到,主从同步并没有一个自动的管理机制,当出现主服务器宕机的情况,需要人工干预来进行恢复,但是如果主从服务器数量庞大,又或是因为高并发导致的大量崩溃,这时需要的时间和难度都是非常大的,于是Redis中又引入了**哨兵模式(Sentinel)**来作为解决方案,将管理由人工转向哨兵,使得Redis具有自动容灾恢复的能力


哨兵


哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_Redis_05


这里的哨兵有两个作用

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

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

然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式


集群


集群(Cluster)是Redis多机运行中最完美的方案 ,它的出现甚至可以让我们抛弃掉主从同步和哨兵来实现Redis多机的运行。

集群是无代理模式去中心化的运行模式,客户端发送的绝大多数命令会直接交给相关节点执行,大部分情况下请求命令不需要转发,或者仅仅只需要转发一次就能完成请求和响应。所以集群中的单个节点的性能与单机Redis服务器的性能非常接近,并且通过水平拓展能够使得性能进行翻倍,所以集群的性能非常的高

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_redis_06

握手

每个节点其实就是运行在集群模式下的Redis服务器,而这些节点在一开始时都是互相独立的,它们都处于一个只包含自己的集群中,要组建一个真正可以工作的集群,我们就必须要将各个独立的节点通过握手的方式连接起来。

主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_主备模式集群架构和主从模式集群架构区别_07


主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_数据库_08


主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_服务器_09


主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_主备模式集群架构和主从模式集群架构区别_10


主备模式集群架构和主从模式集群架构区别 主从集群的功能是什么_redis_11


分片

集群通过分片的方式来保存数据库中的键值对。

集群的整个数据库被分为个16384个槽,并且将一个或者多个槽指派给某个节点,让这个节点来负责管理这个槽中的数据以及相关命令,通过这种方法就能很好的进行压力的分摊。

节点之间会互相转递指派槽的信息
对于发送来的命令,会通过其所在的槽来分配至对应的节点,如果分配错误,也会通过转向操作来转交给至正确的节点