Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如果发生master切换,如何保证新 master 的数据是最新的? #193

Open
kong123456 opened this issue May 10, 2021 · 2 comments

Comments

@kong123456
Copy link

看phxkv的Get逻辑实现,直接从 master 的 db 里读取数据,请问如何保证 master 的数据是最新的?

如果master发生切换,新 master 是一个数据比较落后的机器,这台机器不一定有最新的数据。
选举过程没有考虑各机器的数据新旧情况,采用basic paxos 实现选主,选举后也没马上同步最新数据才开始服务的逻辑。
请问这里是怎么保证新 master 的数据是最新的?谢谢

@kong123456
Copy link
Author

比如初始状态: A, B, C 三台机器,A 是 master,都有数据 val = null

  1. 客户端请求 val = 123
  2. A,B 两台机都成功 accept/写入数据成功, C 机异常
  3. 此时 A, B 两机的数据是 val = 123,C 机 val = null
  4. A 机发生异常离线,重新选主后新 master 是 C 机
  5. 客户端马上请求读取 val 的值,读取到 C 机存储的 val = null

实际上 val 应该读到是 123,这种情况下会得到 val = null,一个比较旧的值?

@lynncui00
Copy link
Collaborator

选主也是一个 basic paxos 的过程,当一台机能完成一次 basic paxos,那说明这台机的数据已经是最新的了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants