背景
Pika 当前的 sentinel 会在主节点挂掉后进行备升主,但是挂掉后起来的主节点起来后依然是主,需要优化,当前的 sentinel 会每个 5s 检查一次所有主从状态,每1 秒检查预离线主机状态,决定是否自动主从切换。
改进方案
对于已经掉线的主节点,我们进行逻辑删除,让其 ReplicaGroup 置为 false,使其流量不再打到旧主节点上
问题
在不考虑 Codis 的情况下,如果有一个一主三从的 Pika 集群,手动 kill 掉主节点,会自动触发从节点升主吗?
不会
在考虑 Codis 的情况下,在一个 Group 中有一主三从的 Pika 集群,如果手动把主节点 kill 掉,此时 sentinel 会自动触发从节点升主吗?如果会的话这时候旧主节点重新连上来是什么状态?其他从节点需要手动执行 slaveof 才能同步数据吗?
会自动触发从节点升主,旧主节点重新连上来是 Master 状态,Codis 通过执行命令让其他节点执行 slaveof 命令,不需要人手动执行
如果 Codis 能自动实现切主操作并且不考虑这个 Group 此时有新加进节点的情况,那么在触发从节点同步新主数据的时候,是不是唯独没同步的就是之前旧主的节点?
是的
是因为旧主的 info replication 的 role 是 Master 所以不能同步吗?
是的
但是有个问题是旧主的 role 依然是 Master,这个需要在哪里进行改变身份呢?(Pika 层面还是 Codis 层面)
Codis 层面,Codis 发送 slaveof 命令给 Pika 让其实现旧主的 role 切换成 salve
为什么不用 codis 自带的 fe 上有 sentinel 按钮的方案?
Codis 自带的 sentinel 比较被动,目前我们实现的 sentinel 每隔 5 秒会主动对 Group 中的节点进行检测
切主过程中怎么从从节点中选主?是 offset 最大的作为新主吗?
检测节点的健康状态和 offset 最大节点作为新的主节点