python zookeeeper 學習和操作


1.zookeeeper介紹

  ZooKeeper是一個為分布式應用所設計的分布的、開源的協調服務,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,簡化分布式應用協調及其管理的難度,提供高性能的分布式服務。ZooKeeper本身可以以Standalone模式安裝運行,不過它的長處在於通過分布式ZooKeeper集群(一個Leader,多個Follower),基於一定的策略來保證ZooKeeper集群的穩定性和可用性,從而實現分布式應用的可靠性。ZooKeeper是作為分布式協調服務,是不需要依賴於Hadoop的環境,也可以為其他的分布式環境提供服務。

2.安裝偽集群 zookeeeper

  所謂 “偽分布式集群” 就是在,在一台PC中,啟動多個ZooKeeper的實例。“完全分布式集群” 是每台PC,啟動一個ZooKeeper實例。

(1)下載zookeeeper 並解壓

  在官網http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz下載zookeeeper,解壓三次,並更名目錄。

 

(2)修改配置文件conf/zoo.cfg

  在每個zookeeeper-x 中conf 下更名文件(mv和cp都可以),cp conf/zoo_sample.cfg conf/zoo.cfg

     修改:dataDir,clientPort
   增加:集群的實例,server.X,”X”表示每個目錄中的myid的值

  vim /usr/local/zookeeper/zookeeper-1/conf/zoo.cfg

 vim /usr/local/zookeeper/zookeeper-2/conf/zoo.cfg

 vim /usr/local/zookeeper/zookeeper-3/conf/zoo.cfg

注意:因為是在同一台機器上面,所以clientport不能相同

3.啟動zookeeeper 服務

分別在 /usr/local/zookeeper/zookeeper-x/bin/ 下,./zkServer start

要是QuorumPeerMain,才是成功啟動的

查看節點狀態,在/usr/local/zookeeper/zookeeper-x/bin/ 下,./zkServer status

由於zookeeeper集群的穩定性,必須要啟動兩個以上的服務,zookeeeper才能成功啟動

 

4.安裝 zkpython

在官網下載,解壓安裝即可

https://pypi.python.org/packages/14/38/a761465ab0a154405c11f7e5d6e81edf6e84584e114e152fddd340f7d6d3/zkpython-0.4.2.tar.gz

若import zookeeeper無錯誤,就表示成功安裝

 

5.zookeeeper命令行操作  

我們通過客戶端連接ZooKeeper的集群,我們可以任意的zookeeper是進行連接。

 

集群已連接,下面我們要使用一下,ZooKeeper的命令行操作。

命令行操作(通過help打印命令行幫助)

ZooKeeper的結構,很像是目錄結構,我們看到了像ls這樣熟悉的命令。

 

 

6.python連接和操作zookeeeper

這時可以新開一個shell頁面,在python中再初始化一個連接,可以獲取前面set的數據“hello"

 

  創建節點說明:

 zookeeper.create(self.handle, path, data, [acl2], flags) zk創建節點的api,flags可以為EPHEMERAL SEQUENCE 或0,如果設置為EPHEMERAL ,這個節點只會短暫存在,即過期就好被刪除,過期的時間為session的時間,SEQUENCE a unique monotonically increasing sequence number is appended to the path name ,可能是排序的意思。

zookeeper.create(handler,"/zkpython_create_node","mydata1",[{"perms":0x1f,"scheme":"world","id":"anyone"}]),0);

第一個參數就是我們剛才建立的鏈接,第二個參數是創建的節點的路徑,第三個是創建的節點的數據,第四個是acl(zookeeper中的訪問控制列表),第五個是創建的節點的類型(0表示持久化的,1表示持久化+序號,2表示瞬時的,3表示瞬時加序號型的)

acl的描述為什么是這樣的,首先第一個參數是perms,這個代表了控制這個節點的權限,具體值參考如下:

int READ = 1 << 0;
int WRITE = 1 << 1;
int CREATE = 1 << 2;
int DELETE = 1 << 3;
int ADMIN = 1 << 4;

也就是說,這是一個數字,而我們例子中為什么是1f呢?實際上就是 READ | WRITE | CREATE | DELETE | ADMIN的結果。后面還有兩個參數,實際上現在java和c的api中定義的值只有兩種,除了例子中的還有一種是 "scheme":"auth","id":""組合的,但是實際上,官方的文檔中是有四種的。

  監聽器說明:

我們先要定義一個watch方法,比如這里的myWatch方法,之后在調用get方法的時候,把這個watch傳遞進去就可以了。

各個參數的意思:

handler:就是我們創建連接之后的返回值,我試了下,發現好像指的是連接的一個索引值,以0開始

type:事件類型,-1表示沒有事件發生,1表示創建節點,2表示節點刪除,3表示節點數據被改變,4表示子節點發生變化

state:客戶端的狀態,0:斷開連接狀態,3:正常連接的狀態,4認證失敗,-112:過期啦

path:這個狀態就不用解釋了,znode的路徑 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM