原創:轉載請:http://my.oschina.net/u/1760714/blog/655124分佈式
經過查看從PAXOS到ZOOKEEPER分佈式一致性原理與實踐以及閱讀相關源碼,今天終於知道爲何會失敗。.net
科普zookeeper領導者選舉的過程:server
zookeeper進行領導者選舉,主要依賴zxid以及myid來定,當集羣裏有myid分別爲1,2,3臺機器,會先根據zxid來定(大的選爲leader),再根據myid來定(myid大的選爲leader)。 blog
緣由是:當我zk1中建立完,生成test節點,加入到test2,3,4集羣中,此集羣裏已經有leader,zk1一定成爲follower,同時leader會通知zk1刪除zxid大於zk2的zxid的值。因此zk1中沒有數據。get
這是個人操做步驟:源碼
啓動zk1test
zk1裏建立以及獲取到了test節點集羣
啓動zk2,3,4原理
集羣連接 2,3,4zookeeper
修改zk1的zoo.cfg文件以及建立myid
重啓zk1.集羣 zk1,2,3,4
最後:原來zk1的test節點沒了
請問爲何會這樣,正確的步驟該怎麼弄
boss已幫解決:大體原理就是
1. zk1單例開啓,建立節點test
2.zk2,3,4開啓,裏面的zoo.cfg包含server.1/2/3/4
3.zk1 修改zoo.cfg,包含server.1/2/3/4,建立dataDir下面的myid。重啓zk1.
4.啓動zk2,3,4,。
5.集羣1,2,3,4. 查看是否有test節點,我如今能獲得test節點,說明集羣中有了。
6.zk2,3,4的zoo.cfg都刪除server.1,而且重啓zk2,3,4.
7,關閉zk1,
8.集羣鏈接zk2,3,4,查看集羣是否有test節點,有表示數據遷移成功,我操做了一遍,能夠了。具體的命令過程看附件,我會上傳的