手動(dòng)集群成員調(diào)整
- 停止整個(gè)ZooKeeper現(xiàn)有集群
- 更改配置文件zoo.cfg的server.n項(xiàng)
- 啟動(dòng)新集群的ZooKeeper節(jié)點(diǎn)
問(wèn)題1:需要停止ZooKeeper服務(wù)。
問(wèn)題2:已經(jīng)提交的數(shù)據(jù)可能會(huì)被覆蓋,如下:
在quorum模式下,有三個(gè)節(jié)點(diǎn),節(jié)點(diǎn)2是leader,節(jié)點(diǎn)3數(shù)據(jù)比較舊。由于這三個(gè)節(jié)點(diǎn)性能比較低,計(jì)劃加入節(jié)點(diǎn)4和節(jié)點(diǎn)5

把節(jié)點(diǎn)1、2、3停掉之后,設(shè)置4、5節(jié)點(diǎn)。先啟動(dòng)4、5,再啟動(dòng)節(jié)點(diǎn)3。然后再啟2、1這兩個(gè)節(jié)點(diǎn)。
先啟動(dòng)的3、4、5節(jié)點(diǎn)會(huì)先形成一個(gè)quorum,選舉3為leader,開(kāi)始進(jìn)行事務(wù)的提交,產(chǎn)生事務(wù)<2,1>。

當(dāng)節(jié)點(diǎn)1、2加入新的quorum的時(shí)候,由于1、2節(jié)點(diǎn)的事務(wù)<1,3>和節(jié)點(diǎn)3(leader)的事務(wù)不一樣,會(huì)被<2,1>覆蓋,而造成數(shù)據(jù)丟失。

動(dòng)態(tài)配置
解決上面的問(wèn)題就可以使用動(dòng)態(tài)配置。
要使用動(dòng)態(tài)配置,必須啟用ZooKeeper的Authentication(認(rèn)證)
- 調(diào)用類DigestAuthencatinProvider的generateDigest函數(shù)生成digest(密鑰),輸入?yún)?shù)比如:“super:jingguo”
-
配置產(chǎn)生的密鑰
-
編輯動(dòng)態(tài)配置的配置文件zoo.reconf.cfg
dyn.cfg文件內(nèi)的內(nèi)容

最好不要省略配置文件內(nèi)的ali-1這樣的host name,ZooKeeper會(huì)讀取這些信息。如果不配置host name的話,ZooKeeper會(huì)使用默認(rèn)名字。對(duì)客戶端來(lái)說(shuō),不知道這些默認(rèn)名字是什么。
-
啟動(dòng)節(jié)點(diǎn)
- 啟動(dòng)cli,由于只在ali-1啟用了super機(jī)制,只能連ali-1節(jié)點(diǎn),才能算是經(jīng)過(guò)認(rèn)證。
zkCli.sh -server ali-1:2181
// 添加digest
addauth digest super:jingguo
查看配置config
配置集群成員reconfig, 比如移除3號(hào)節(jié)點(diǎn)reconfig -remove 3


