【Redis】Redis集群的三种模式——主从复制、哨兵模式、Cluster

一、主从复制模式

主数据库可进行读写,当写操作导致数据变化时会自动将数据同步到从数据库;
从数据库一般是只读的,并接受主数据库同步过来的数据

1、工作原理

在这里插入图片描述
(1)Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令
(2)Master服务主节点收到同步命令后,开始执行BGSAVE命令生成快照文件(RDB文件),并使用缓冲区记录此后执行的所有写命令
(3)Master服务主节点BGSAVE执行完后,向所有Slave从节点服务发送快照文件,并在发送期间继续记录被执行的写命令
(4)Slave从节点服务收到快照文件后丢弃所有旧数据,载入收到的快照
(5)Master服务主节点快照发送完毕后开始想Slave服务从节点发送缓冲区的写命令
(6)Slave服务从节点完成对快照的载入,开始后接收命令请求,并执行来自Master服务主节点缓冲区的写命令
(7)Master服务主节点每执行一个写命令就会向Slave服务从节点发送相同的写命令,Slave服务从节点接收并执行收到的写命令

主从刚刚连接的时候,进行全量同步,全量同步结束后,进行增量同步。
如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。但在2.8版本之后,断开重连。回见断开期间的命令传给Slave,进行增量同步。

当主服务器宕机后,需要手动把一台从服务器切换为主服务器。
这个需要人工干预,会赵成一段时间服务不可用。

2、特点

(1)读写分离,分担master的读写压力
(2)每台redis服务器存储的数据是相同的,浪费内存
(3)方便容灾恢复
(4)不具备自动容错和恢复功能,需人工介入
(5)较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂

二、哨兵模式

在这里插入图片描述

1、工作原理

(1)哨兵是一个独立的进程,会独立运行
(2)哨兵通过发送命令,让redis服务器返回监控其运行状态,包括主服务器和从服务器
(3)当哨兵检测到Master宕机,会自动将Slave切换成Master,然后通过发布订阅模式通知其他从服务器,修改配置文件,让他们切换主机
故障切换
假设Master宕机,哨兵1先检测到这个结果,系统不会马上进行failover【故障转移】过程,仅仅是哨兵1主观的认为服务器不可用,这个现象称为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。

2、特点

主从可以自动切换,具备自动容错和恢复功能

三、Cluster集群模式

在这里插入图片描述
每一个蓝色的圈都代表着一个redis的服务器节点。它们任何两个节点之间都是相互连通的。客户端可以与任何一个节点相连接,然后就可以访问集群中的任何一个节点。对其进行存取和其他操作

Cluster集群模式采用的是分片技术

1、工作原理

Redis集群引入了哈希槽,一共有哦16384个哈希槽,集群每个节点负责一部分槽,每个key通过CRC16检验后对16384取模,通过这个值,找到对应的插槽所对应的节点,然后直接自动跳转到这个对应的节点上进行存取操作。
当要增加新的节点到集群里,就把原来的节点所拥有的槽分一部分给新的节点即可,当移除一个节点是,把这个节点上的槽移给其他槽,再把没有任何槽的这个节点移除即可。

集群如何判断节点是否挂掉了
在这里插入图片描述
集群中的每个节点至少一个备用的redis服务。这个备用的redis称为从节点(slave)
(1)每一个节点都存有这个集群所有主节点以及从节点的信息
(2)它们之间通过互相的ping-pong判断是否节点可以连接上
(3)如果有一半以上的节点去ping一个节点的时候没有回应,集群就认为这个节点宕机了,然后去连接它的备用节点
(4)如果某个节点和所有从节点全部挂掉,我们集群就进入faill状态
(5)如果有一半以上的主节点宕机,那么我们集群同样进入fail状态
(6)投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时,认为当前master节点挂掉.

2、特点

每个redis节点存储不同的内容

Redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。 Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。     本课程主要讲解以下内容: 1. Redis的基本使用 2. Redis数据库的数据类型 3. Redis数据库数据管理 4. Redis主从复制 5. Redis数据库的持久性 6. Redis的高可靠性和集群 7. Redis的优化和性能测试 8. Redis服务器的维护和管理 9. Redis服务器的常见问题排错  
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页