phxpaxos
phxpaxos copied to clipboard
如果发生master切换,如何保证新 master 的数据是最新的?
看phxkv的Get逻辑实现,直接从 master 的 db 里读取数据,请问如何保证 master 的数据是最新的?
如果master发生切换,新 master 是一个数据比较落后的机器,这台机器不一定有最新的数据。 选举过程没有考虑各机器的数据新旧情况,采用basic paxos 实现选主,选举后也没马上同步最新数据才开始服务的逻辑。 请问这里是怎么保证新 master 的数据是最新的?谢谢
比如初始状态: A, B, C 三台机器,A 是 master,都有数据 val = null
- 客户端请求 val = 123
- A,B 两台机都成功 accept/写入数据成功, C 机异常
- 此时 A, B 两机的数据是 val = 123,C 机 val = null
- A 机发生异常离线,重新选主后新 master 是 C 机
- 客户端马上请求读取 val 的值,读取到 C 机存储的 val = null
实际上 val 应该读到是 123,这种情况下会得到 val = null,一个比较旧的值?
选主也是一个 basic paxos 的过程,当一台机能完成一次 basic paxos,那说明这台机的数据已经是最新的了。