mysql、redis、zk、kafka、es可用性 横评(详解在注释里面,图片加载需要时间)
2023-07-05 09:41:42 0 举报
AI智能生成
知识要点和原理解析,详细信息和图片均在黄色图标的注释中,鼠标移动到黄色图标上即会显示,图片加载有时较慢。
作者其他创作
大纲/内容
mysql
主从复制
MySQL支持的复制类型<br>
基于语句的复制<br>
基于行的复制<br>
混合类型的复制<br>
复制的工作过程<br>
3个线程<br>
Master的binlog dump线程<br>
Slave的IO线程<br>
Slave的SQL线程<br>
主从复制同步方式<br>
异步复制<br>
同步复制<br>
半同步复制<br>
主从同步延时<br>
原因
解决方案<br>
redis
哨兵模式
组成
哨兵节点
数据节点<br>
工作机制<br>
心跳检查<br>
<b><font color="#f44336">每隔 10 秒</font></b>,每个 Sentinel 节点会向已知的主从节点发送 info 命令获取最新的主从架构。
<b><font color="#f44336">每隔 2 秒</font></b>,Sentinel 节点都会向主从节点的 _sentinel_:hello 频道发送自己的信息。
<b><font color="#f44336">每隔一秒</font></b>,哨兵会每个主从节点、Sentinel 节点发送 PING 命令。该定时任务是哨兵心跳机制中的核心,它涉及到 Redis 数据节点的运行状态监控,哨兵领导者的选举等细节操作。当哨兵节点发送 PING 命令后,若超过 down-after-milliseconds 后,当前哨兵节点会认为该节点主观下线。
主观下线<br>
客观下线<br>
注意
Sentinel 选举<br>
故障转移<br>
哨兵机制下的数据丢失<br>
异步复制同步丢失<br>
集群产生脑裂数据丢失<br>
如何保证尽量少的数据丢失<br>
min-slaves-to-write:从节点最小数量,默认0<br>
min-slaves-max-lag:从节点最大延迟,默认10<br>
解释<br>
集群Cluster模式<br>
数据复制过程和故障转移<br>
数据复制<br>
故障检测<br>
主从故障转移<br>
1、如果只有一个slave节点<br>
2、多个slave节点<br>
3、新的主节点会撤销所有对已下线主节点的slots指派,并将这些slots全部指派给自己<br>
4、新的主节点向集群广播一条PONG消息,这条PONG消息可以让集群中的其他节点立即知道这个节点已经由从节点变成了主节点,并且这个主节点已经接管了原本由已下线节点负责处理的槽。
5、新的主节点开始接收和自己负责处理的槽有关的命令请求,故障转移完成
client 访问 数据集群的过程<br>
定位数据所在节点<br>
1、客户端连接任一实例,获取到slots与实例节点的映射关系,并<font color="#f44336"><b>将该映射关系的信息缓存在本地</b></font><br>
2、将需要访问的redis信息的key,经过CRC16计算后,再对16384<font color="#f44336"><b> 取模得到对应的 Slot 索引</b></font><br>
3、通过slot的位置进一步定位到具体所在的实例,再<b><font color="#f44336">将请求发送到对应的实例上</font></b>
zk
高性能高可用<br>
三种角色<br>
Leader(领导者)<br>
Leader在集群中只有一个节点
作用<br>
在ZAB崩溃恢复之后,消息广播之前,进行集群中的<b><font color="#f44336">数据同步</font></b>
维持与Follower的心跳,接收Follower请求消息,并据不同的消息类型,进行不同的处理<br>
消息类型<br>
PING消息<br>
REQUEST消息<br>
ACK消息<br>
REVALIDATE消息<br>
Follower(跟随者)<br>
作用<br>
与Leader保持心跳连接<br>
当Leader挂了的时候,经过投票后成为新的leader<br>
向Leader发送请求(PING请求、REQUEST消息、ACK请求、REVALIDATE消息)<br>
处理leader发来的消息与请求<br>
接收Client的请求,如果为写请求,发送给Leader<br>
返回Client请求结果<br>
Observer(观察者)<br>
作用<br>
<font color="#f44336"><b>提高zookeeper集群的读性能</b></font>
提高伸缩性,同时还不影响吞吐率
Observer不参与投票过程,只同步 leader的状态<br>
Observers 接受客户端的连接,并将写请求转发给 leader节点<br>
四个阶段<br>
选举(election)<br>
两种情况<br>
集群启动期间Leader选举<br>
集群运行期间Leader故障<br>
选举投票规则<br>
根据<font color="#f44336"><b>事务ID(zxid)</b></font><br>
zxid相同时看myId<br>
syncLimit时间限制<br>
选举算法<br>
1、每个服务器给自己投票<br>
2、比较投票<br>
3、票数是否过半<br>
步骤总结
发现(discovery)<br>
同步(sync)<br>
广播(Broadcast)<br>
Zab 模式<br>
崩溃恢复<br>
崩溃恢复模式
ZAB的保证
Zab 协议需要确保那些已经在 Leader 服务器上提交(Commit)的事务最终被所有的服务器提交。<br>
Zab 协议需要确保丢弃那些只在 Leader 上被提出而没有被提交的事务。
针对以上的两个要求,在进行 Leader 选举时,<b><font color="#f44336">只需要选举出集群中 ZXID 最大的事务 Proposal 即可</font></b>,这样就可以省去 Leader 服务器检查 Proposal 的提交和丢弃工作了。<font color="#f44336"><b>因为 Leader 服务器的事务是最大的,一切以 Leader 服务器的数据为标准即可</b></font>。
流程<br>
恢复(Recovery)<br>
数据同步策略<br>
SNAP<br>
DIFF<br>
TRUNC<br>
TRUNC+DIFF
广播模式<br>
kafka
副本同步机制<br>
高可靠性<br>
概念<br>
ISR(In-Sync Replicas)<br>
ISR是AR中的一个子集<br>
高水位<br>
作用主要<br>
定义消息可见性<br>
帮助 kafka 完成副本机制的同步<br>
三种角色<br>
leader 副本<br>
<font color="#f44336"><b>相应 clients 端读写请求的副本</b></font><br>
Follower 副本<br>
被动的备注 leader 副本的内容,<b><font color="#f44336">不能响应 clients 端读写请求</font></b><br>
ISR 副本<br>
包含了 leader 副本和所有与 leader 副本保持同步的 Followerer 副本
LEO<br>
HW
图示<br>
repcation机制<br>
ISR机制<br>
ISR (In-Sync Replicas):副本同步队列<br>
延迟
replica.lag.time.max.ms:延迟时间<br>
replica.lag.max.messages:延迟条数<br>
ISR机制选择<br>
最后选择了时间,去掉消息数差异
replica.lag.time.max.ms理解<br>
follower故障及leader故障<br>
follower故障<br>
leader故障<br>
副本不同的异常情况<br>
如果leader crash时,ISR为空怎么办?<br>
unclean.leader.election<br>
true(默认)<br>
false<br>
控制器组件(Controller)<br>
控制器是如何被选出来的?<br>
启动时选举<br>
leader异常选举<br>
控制器是做什么的?<br>
1、主题管理(创建、删除、增加分区)<br>
2、分区重分配<br>
3、Preferred 领导者选举<br>
4、集群成员管理(新增 Broker、Broker 主动关闭、Broker 宕机)<br>
5、数据服务<br>
控制器保存了什么数据?<br>
这里面比较重要的数据有<br>
所有主题信息<br>
所有 Broker 信息<br>
所有涉及运维任务的分区<br>
控制器故障转移(Failover)<br>
控制器故障转移的过程<br>
epoch防止脑裂<br>
每个和控制器交互的请求都会携带controller_epoch字段<br>
分区Leader的选举<br>
消费组Leader的选举<br>
es
节点发现方式<br>
单播(unicast)<br>
配置<br>
ping<br>
unicast<br>
通俗理解
主要步骤<br>
基于文件<br>
配置<br>
基于文件的发现插件会增强单播主机列表 elasticsearch.yml<br>
示例<br>
选举原理之Bully算法<br>
触发选举的两种情况<br>
当master-eligible(候选master)节点数量小于法定票数<br>
当主节点宕机<br>
选举流程<br>
选举时间点<br>
集群启动初始化<br>
集群的Master崩溃的时候<br>
任何一个节点发现当前集群中的Master节点没有得到n/2 + 1节点认可的时候,触发选举<br>
选举流程图<br>
1、筛选activeMasters列表<br>
从activeMasters列表选举Master节点<br>
2、筛选masterCandidates列表<br>
从masterCandidates列表选举Master节点<br>
选举流程<br>
示例<br>
Elasticsearch编号比较<br>
Master假死<br>
Elasticsearch是如何解决这个问题的呢?<br>
脑裂问题<br>
Elasticsearch脑裂解决方案-Quorum算法<br>
Master更新集群状态时的防护<br>
Master降级<br>
异常检测<br>
1、Master<br>
NodesFaultDetection事件处理<br>
2、非Master<br>
MasterFaultDetection事件处理<br>
ping参数
分片管理<br>
基本概念<br>
主分片(primary shard)<br>
副本分片(replica shard
部署
分片管理官方建议<br>
1、分片大小在 10GB 到 50GB 之间<br>
大分片需要更长的恢复时间<br>
小分片会带来更多的开销并且搜索效率较低
2、每 GB 堆内存 20 个或更少的分片<br>
3. 分配管理小结<br>
避免使用非常大的分片<br>
分片数不是越多越好<br>
分片最大容量限制<br>
当数据量可以合理预测并且变化缓慢时,具有固定时间间隔的基于时间的索引很有效。
跨索引查询<br>
为什么需要跨索引查询<br>
技术限制<br>
技术便利<br>
ES提供两个维度的拆分方式<br>
ES查询示意图:多索引+多分片<br>
跨索引查询应用场景<br>
示例1:实时数据与历史数据业务场景
示例2:大数据平台写数据到Elastic平台<br>
日志<br>
跨索引查询应用方式<br>
直接型<br>
模糊型<br>
计算型<br>
跨索引查询技术原理<br>
索引分片<br>
查询过程<br>
跨索引查询注意事项
索引与分片等价关系<br>
协调节点分离<br>
路由机制<br>
一主多副架构<br>
Primary、Replica 副本同步<br>
0 条评论
下一页