既然 mysql 可以靠 binlog 达成多副本共识,那为什么还需要 Paxos、Raft 等共识算法?

2024-02-05 11:09:06 +08:00
 xiyy02
RT ,最近在看 Paxos 、Raft 等共识算法,Paxos 没怎么看明白,Raft 看了整个流程,相较于 Paxos 好理解许多;
有些疑问想要请教下 V 友们:
我了解过 mysql 的副本同步机制,mysql 通过 binlog 来完成副本同步,为了保证 redolog 和 binlog 不发生一致性问题,还专门做了两段式提交:
阶段一:主库写 redolog 但不提交;
阶段二:主库写 binlog ,然后标记相关 redolog 为提交状态
当且仅当 binlog 写成功时,redolog 里相关改动才算提交,这样可以保证多副本最终一定会按照 binlog 可靠的达成共识(一致?)

在这个过程中,mysql 既没有实现 Paxos ,也没有依赖 Raft ,最终还是达成了多副本的共识(一致?),那为什么还专门提出来 Paxos 这类复杂的共识算法来完成多副本一致性呢?

PS:在此期间还看到有人纠正:共识和一致不是一回事;但我理解共识算法的目的也是为了多副本就一份数据达成一致吧?所以一致性还是最终的目的,总之我被绕晕了😭
5019 次点击
所在节点    MySQL
41 条回复
xiyy02
2024-02-17 14:06:04 +08:00
@Jasonhhh 之前看过这块内容,似乎 Redis 对于 Raft 的应用并不是直接作用到主从节点的,而是作用在 Sentinel 上的,而且基本上只是用 raft 的投票思想来做主节点客观下线和 Sentinel Leader 选举,被选举出的 Sentinel Leader 节点再去做故障转移(向同步数据 offset 最大的从节点发送 slaveof on one ,让其变成主节点,然后向其他从节点发送 slaveof 新主节点 ip+port 简历新的主从关系,从节点再发起 psync 同步,旧 master 若恢复就变成从节点,故障转移成功);
所以这个过程中 redis 主从节点间的数据同步其实也是简单的复制同步( psync+挤压缓冲区);

不过经过大家的回复我现在似乎已经理解了我所问的问题,感谢耐心回复~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1014337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX