您好,登錄后才能下訂單哦!
這篇文章主要介紹了 Zookeeper如何安裝配置,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
一、簡介
Zookeeper 是分布式服務(wù)框架,主要是用來解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項(xiàng)的管理等等。
ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。
ZooKeeper包含一個(gè)簡單的原語集, [1] 提供Java和C的接口。
ZooKeeper代碼版本中,提供了分布式獨(dú)享鎖、選舉、隊(duì)列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分布鎖和隊(duì)列有Java和C兩個(gè)版本,選舉只有Java版本。
二、工作原理
Zookeeper的核心是廣播,這個(gè)機(jī)制保證了各個(gè)Server之間的同步。實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫做Zab協(xié)議。Zab協(xié)議有兩種模式,它們分別是恢復(fù)模式(選主)和廣播模式(同步)。當(dāng)服務(wù)啟動(dòng)或者在領(lǐng)導(dǎo)者崩潰后,Zab就進(jìn)入了恢復(fù)模式,當(dāng)領(lǐng)導(dǎo)者被選舉出來,且大多數(shù)Server完成了和leader的狀態(tài)同步以后,恢復(fù)模式就結(jié)束了。狀態(tài)同步保證了leader和Server具有相同的系統(tǒng)狀態(tài)。為了保證事務(wù)的順序一致性,zookeeper采用了遞增的事務(wù)id號(hào)(zxid)來標(biāo)識(shí)事務(wù)。所有的提議(proposal)都在被提出的時(shí)候加上了zxid。實(shí)現(xiàn)中zxid是一個(gè)64位的數(shù)字,它高32位是epoch用來標(biāo)識(shí)leader關(guān)系是否改變,每次一個(gè)leader被選出來,它都會(huì)有一個(gè)新的epoch,標(biāo)識(shí)當(dāng)前屬于那個(gè)leader的統(tǒng)治時(shí)期。低32位用于遞增計(jì)數(shù)。
每個(gè)Server在工作過程中有三種狀態(tài):
LOOKING:當(dāng)前Server不知道leader是誰,正在搜尋。
LEADING:當(dāng)前Server即為選舉出來的leader。
FOLLOWING:leader已經(jīng)選舉出來,當(dāng)前Server與之同步。
三、基本配置
zookeeper的安裝和之前的一樣,也是有3種安裝方式。分為單機(jī)、偽集群和集群模式。
1、首先去apache官網(wǎng)下載zookeeper,目前最新版是3.4.8 ,http://www.apache.org/dyn/closer.cgi/zookeeper/
2、解壓到你需要安裝的目錄,例如我是放在/home/admin1/下載/zookeeper-3.4.8下面。
3、在conf目錄在做配置:
zoo.cfg
(1)如果你是單機(jī)模式的話,就需要做如下配置就可以了。
tickTime=2000 dataDir=/home/admin1/下載/zookeeper-3.4.8/data dataLogDir=/home/admin1/下載/zookeeper-3.4.8/logs clientPort=2181
(2) 如果你是偽分布模式的話,則需要做如下配置:zoo.cfg
所謂偽集群, 是指在單臺(tái)機(jī)器中啟動(dòng)多個(gè)zookeeper進(jìn)程, 并組成一個(gè)集群. 以啟動(dòng)3個(gè)zookeeper進(jìn)程為例.
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/home/admin1/下載/zookeeper-3.4.8/tmp/zookeeper clientPort=2181 server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389
1 initLimit: zookeeper集群中的包含多臺(tái)server, 其中一臺(tái)為leader, 集群中其余的server為follower. initLimit參數(shù)配置初始化連接時(shí), follower和leader之間的最長心跳時(shí)間. 此時(shí)該參數(shù)設(shè)置為10, 說明時(shí)間限制為10倍tickTime, 即10*2000=20000ms=20s.2 syncLimit: 該參數(shù)配置leader和follower之間發(fā)送消息, 請(qǐng)求和應(yīng)答的最大時(shí)間長度. 此時(shí)該參數(shù)設(shè)置為5, 說明時(shí)間限制為5倍tickTime, 即10000ms.3 server.X=A:B:C 其中X是一個(gè)數(shù)字, 表示這是第幾號(hào)server. A是該server所在的IP地址. B配置該server和集群中的leader交換消息所使用的端口. C配置選舉leader時(shí)所使用的端口. 由于配置的是偽集群模式, 所以各個(gè)server的B, C參數(shù)必須不同.參照zookeeper0/conf/zoo.cfg, 配置zookeeper1/conf/zoo.cfg, 和zookeeper2/conf/zoo.cfg文件. 只需更改dataDir, dataLogDir, clientPort參數(shù)即可.在之前設(shè)置的dataDir中新建myid文件, 寫入一個(gè)數(shù)字, 該數(shù)字表示這是第幾號(hào)server. 該數(shù)字必須和zoo.cfg文件中的server.X中的X一一對(duì)應(yīng)./home/admin1/下載/zookeeper1/data/myid文件中寫入1,/home/admin1/下載/zookeeper2/data/myid文件中寫入2,/home/admin1/下載/zookeeper3/data/myid文件中寫入3.分別進(jìn)入/home/admin1/下載//zookeeper1/bin, /home/admin1/下載//zookeeper2/bin, /home/admin1/下載//zookeeper3/bin三個(gè)目錄, 啟動(dòng)server.
bin/zkServer.sh start
關(guān)閉就是后面是stop.
啟動(dòng)成功后用jps查看進(jìn)程,
有ZooKeeperMain就是對(duì)的(若沒有配置其他
機(jī)器的情況下)
可以啟動(dòng)客戶端測試下:
bin/zkCli.sh -server localhost:2181
(注:如果是遠(yuǎn)程連接,把localhost換成指定的IP即可)
然后,就可以用一些基礎(chǔ)命令,比如 ls ,create ,delete ,get 來測試了(關(guān)于這些命令,大家可以查看文檔)
(3) 集群模式的配置和偽集群基本一致.
由于集群模式下, 各server部署在不同的機(jī)器上, 因此各server的conf/zoo.cfg文件可以完全一樣.
四、開發(fā)測試
測試連接,我們可以有3種方法。
4.1 zkCli.sh
可以使用幫組命令進(jìn)入各種操作。
4.2、在eclipse上操作:
新建java工程,需要導(dǎo)入zookeeper里面的jar包 ,zookeeper-3.4.8.jar。
新建createSession.java
public class CreateSession implements Watcher { private static ZooKeeper zookeeper; public static void main(String[] args) throws IOException, InterruptedException { zookeeper = new ZooKeeper("localhost:2181",5000,new CreateSession()); System.out.println(zookeeper.getState()); Thread.sleep(Integer.MAX_VALUE); } private void doSomething(){ System.out.println("do something"); } @Override public void process(WatchedEvent event) { System.out.println("收到事件:"+event); if (event.getState()==KeeperState.SyncConnected){ if (event.getType()==EventType.None && null==event.getPath()){ doSomething(); } } } }
還需要一個(gè)接口:
MyWatcher.java
public class MyWatcher implements Watcher { @Override public void process(WatchedEvent event) { // TODO Auto-generated method stub } }
運(yùn)行結(jié)果如下:代表連接成功了。
4.3 使用ZKClient
在github中下載源碼包,https://github.com/sgroschupf/zkclient
在新建的eclipse項(xiàng)目中添加庫依賴,就可以了。
測試代碼
import org.I0Itec.zkclient.ZkClient; import org.I0Itec.zkclient.serialize.SerializableSerializer; public class CreateSession { public static void main(String[] args) { ZkClient zc = new ZkClient("localhost",10000,10000,new SerializableSerializer()); System.out.println("conneted ok!"); } }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“ Zookeeper如何安裝配置”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。