1.zookeeper中任意節點收到寫請求,如果是follower節點,則會把寫請求轉發給leader,如果是leader節點就直接進行下一步。
2.leader生成一個新的事務並為這個事務生成一個唯一的ZXID
3.leader將這個事務發送給所有的follows節點
4.follower節點將收到的事務請求加入到歷史隊列(history queue)中,並返回ack確認包.
5.當leader收到半數以上的follower的ack消息,leader就進行寫入操作,並且發送給所有follower 進行這個寫request 持久化操作的commit(也帶有這個zxid),當follower接收到commit還會進行一次check(隊列中zxid和commit中的zxid比較),正確則進行寫入操作,否則去sync leader數據.
即leader接受到寫請求(標記為zxid)就會發送proposal給所有follower,follower接受到請求先把zxid寫入到隊列中並返回ack確認包,當leader收到超過半數follower回傳的ack后就進行寫入操作,並且發送給所有follower 進行這個寫request 持久化操作的commit(也帶有這個zxid),當follower接收到commit還會進行一次check(隊列中zxid和commit中的zxid比較),正確則進行寫入操作,否則去sync leader數據