网站建设客户去哪找,全国最好的加盟网站,做二手车有哪些网站有哪些手续,网站用户体验优化方案文章目录 一、单点Redis的问题二、主从架构1、概述2、集群结构3、主从数据同步原理#xff08;1#xff09;全量同步#xff08;2#xff09;增量同步 4、总结#xff08;1#xff09;全量同步和增量同步的区别#xff08;2#xff09;什么时候执行全量同步#xff08… 文章目录 一、单点Redis的问题二、主从架构1、概述2、集群结构3、主从数据同步原理1全量同步2增量同步 4、总结1全量同步和增量同步的区别2什么时候执行全量同步3什么时候执行增量同步 三、Redis哨兵1、介绍2、哨兵原理1集群结构2哨兵的作用 四、Redis分片集群1、概述2、分片集群介绍1架构2分片集群特征 一、单点Redis的问题
数据丢失问题 实现Redis数据持久化。并发能力问题 搭建主从集群实现读写分离。故障恢复问题 利用reids哨兵实现健康检查和自动恢复。存储能力问题 单键分片集群利用插槽机制实现动态扩容。
二、主从架构
1、概述
单节点Redis的并发能力是有上限的要进一步提高Redis的并发能力就需要搭建主从集群实现读写分离主要应用于读多写少的情况。
2、集群结构 3、主从数据同步原理
1全量同步
主从第一次建立连接时会执行全量同步将master节点的所有数据都拷贝到slave节点。这里有一个问题master如何得知salve是第一次来连接呢有几个概念可以作为判断依据
Replication Id 简称replid是数据集的标记id一致则说明是同一数据集。每一个master都有唯一的replidslave则会继承master节点的replid。offset 偏移量随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时也会记录当前同步的offset。如果slave的offset小于master的offset说明slave数据落后于master需要更新。判断流程 slave做数据同步必须向master声明自己的replication id 和offsetmaster才可以判断到底需要同步哪些数据。因为slave原本也是一个master有自己的replid和offset当第一次变成slave与master建立连接时发送的replid和offset是自己的replid和offset。master判断发现slave发送来的replid与自己的不一致说明这是一个全新的slave就知道要做全量同步了。master会将自己的replid和offset都发送给这个slaveslave保存这些信息。以后slave的replid就与master一致了。因此master判断一个节点是否是第一次同步的依据就是看replid是否一致。完整流程描述 slave节点请求增量同步。master节点判断replid发现不一致拒绝增量同步。master将完整内存数据生成RDB发送RDB到slave。slave清空本地数据加载master的RDB。master将RDB期间的命令记录在repl_baklog并持续将log中的命令发送给slave。slave执行接收到的命令保持与master之间的同步。
2增量同步
为什么需要增量同步 全量同步需要先做RDB然后将RDB文件通过网络传输给slave成本太高。因此除了第一次做全量同步其她大多数时候slave与master都是做增量同步。什么是增量同步 只更新slave与master存在差异的部分数据
4、总结
1全量同步和增量同步的区别
全量同步master将完整内存数据生成RDB发送RDB到slave。后续命令则记录在repl_baklog逐个发送给slave。增量同步slave提交自己的offset到mastermaster获取repl_blaklog中从offset之后的命令给slave。
2什么时候执行全量同步
slave节点第一次连接master节点时slave几点断开时间太久repl_baklog中的offset已经被覆盖。
3什么时候执行增量同步
slave节点断开又恢复并且在repl_baklog中能找到offset时。
三、Redis哨兵
1、介绍
Redis提供了哨兵Sentienl机制来实现主从集群的自动故障恢复。
2、哨兵原理
1集群结构 2哨兵的作用 监控 Sentinel会不断检查master和slave是否按预期工作 集群监控原理 Sentinel基于心跳机制监测服务状态每隔1秒向集群的每个实例发送ping命令。 主观下线 如果某sentinel节点发现某实例未在规定时间响应则认为改实例主观下线。客观下线 若超过指定数量quorum的sentinel都认为该实例主观下线则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。 自动故障恢复 如果master故障Sentinel会将一个slave提升为master。当故障实例恢复后以新的master为主集群故障恢复原理 一旦发现master故障sentinel需要在salve中选择一个作为新的master选择依据 首先会判断slave节点与master节点断开时间长短如果超过指定值down-after-millisconds * 10则会排除该slave节点。然后判断slave节点的slave-priority值越小优先级越高如果是0则永不参与选举如果slave-priority一样则判断slave节点的offset值越大说明数据越新优先级越高最后是判断slave几点的运行id大小越小优先级越高 当选出一个新的master后该如何实现切换 sentinel给备选的slave1节点发送slaveof no one命令让该节点成为master。sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令让这些slave成为新master的从节点开始从新的master上同步数据。最后sentinel将故障节点标记为slave当故障节点恢复后会自动成为新的master的slave节点。 通知 Sentinel充当Redis客户端的服务发现来源当集群发生故障转移时会将最新信息推送给Redis的客户端。
四、Redis分片集群
1、概述
主从和哨兵可以解决高并发读、高可用的问题。但是仍然有两个问题没有解决
海量数据存储问题高并发写的问题 使用分片集群可以解决上述问题。
2、分片集群介绍
1架构 2分片集群特征
集群中有多个master每个master保存不同数据。每个master都可以有多个slave节点。master之间通过ping监测彼此健康状态客户端请求可以访问集群任意节点最终都会被转发到正确的节点。