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