文章聲明html
zookeeper介紹node
統一命名服務apache
配置管理ubuntu
集羣管理bash
共享鎖服務器
隊列分佈式
配置zookeeperspa
本文的內容主要來自Zookeeper官方文檔:https://zookeeper.apache.org/doc/r3.4.14/index.html
官方手冊有一句話對Zookeeper的描述很精確,ZooKeeper:分佈式應用程序的分佈式協調服務。
ZooKeeper容許分佈式進程經過共享的層級命名空間相互協調,該命名空間的組織方式與Linux文件系統相似,好比Linux中存在/usr/local/test這個路徑,Zookeeper的思想就是爲一個路徑賦值,好比/usr/local/test的值爲‘xxxxx',分佈式應用進程能夠在Zookeeer中建立路徑、爲路徑賦值、讀取路徑值,刪除路徑,經過這些操做來實現分佈式服務的協調。
上圖中的每個節點被稱爲一個znode,每一個znode都有本身的相關屬性(包括賦予其的value),而且每一個節點均可以建立本身的子項。
Zookeeper中節點有兩種,一種就是上圖中的每個路徑中的節點;另一種是Zookeeper集羣中,每個Zookeeper服務器也被稱爲節點。
Zookeeper雖然是對分佈式應用程序的協調服務,那麼能夠先看一下zookeeper是如何實現協調的,有哪些協調的案例。
其實Zookeeper的安裝特別簡單,也不能算安裝了,只須要將Zookeeper下載後解壓,就完成了安裝操做,可是還須要進行一些配置操做。
下載地址:http://zookeeper.apache.org/releases.html
本文所用的3.4.14版本,下載連接
su - root # 請務必切換爲root身份 wget http://www.trieuvan.com/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz tar -zxf zookeeper-3.4.14.tar.gz cp -r zookeeper-3.4.14 /usr/local/zookeeper # 建立存放數據文件的目錄 mkdir /usr/local/zookeeper/data
此時,Zookeeper就安裝成功了,只不過還須要進行一些配置才能啓動。
Zookeeper的配置文件在path-to-zookeeper/conf目錄下,文件名爲zoo.cfg。初始安裝的Zookeeper有一個zoo_sample.cfg示例文件,能夠拷貝一份,在進行修改。
root@ubuntu:/usr/local/zookeeper# cd conf/ root@ubuntu:/usr/local/zookeeper/conf# ls configuration.xsl log4j.properties zoo_sample.cfg root@ubuntu:/usr/local/zookeeper/conf# cp zoo_sample.cfg zoo.cfg root@ubuntu:/usr/local/zookeeper/conf# ls configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
修改zoo.cfg中的下面三項:
# 心跳間隔(毫秒),超過2倍tickTime將會被認爲會話超時 tickTime=2000 # 保存zookeeper數據庫快照的目錄,前面安裝zookeeper時已經建立了該目錄 dataDir=/usr/local/zookeeper/data # 監聽的端口號,用於接收客戶端請求 clientPort=2181
Zookeeper中可執行文件都存放在zookeeper安裝路徑下的bin目錄下,而對Zookeeper服務器運行狀態管理,使用的是zkServer.sh這個腳本。
經過傳入start | stop | restart | status來管理Zookeeper服務器的運行狀態。
/usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/bin/zkServer.sh restart /usr/local/zookeeper/bin/zkServer.sh stop /usr/local/zookeeper/bin/zkServer.sh status
經過命令行的方式登陸到Zookeeper服務器,可使用Zookeeper提供的zkCli.sh腳本,位於/usr/local/zookeeper/bin目錄下。
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
登陸進入Zookeeper服務器後,就能夠進行不少操做了,下面將一一列舉。
登陸到zookeeper服務器後,輸入任意字符,回車確認後就會出現不少命令:
[zk: 127.0.0.1:2181(CONNECTED) 0] info ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
其實上面的命令列表已經很明顯的展現了zookeeper中能夠操做的命令,包括他的功能都比較容易理解,下面就簡單說幾個經常使用的命令
查看path節點下有哪些子節點,不會顯示孫子及如下層級的節點,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 3] ls / [zookeeper]
該命令用來建立path節點,而且設置節點的值爲data。須要注意的是,使用create建立path時,不能嵌套建立path,好比建立/abc/xyz,那麼/abc必須是已經存在的,不能直接建立/abc/xyz。而且,使用create建立節點的時候,必須指定data,不然節點不會被建立。
[zk: 127.0.0.1:2181(CONNECTED) 4] create /abc xxxxxx Created /abc [zk: 127.0.0.1:2181(CONNECTED) 5] ls / [abc, zookeeper]
嵌套建立path時,若是上級目錄不存在,則建立失敗:
[zk: 127.0.0.1:2181(CONNECTED) 5] ls / [abc, zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 6] create /xyz/aaa 12345 Node does not exist: /xyz/aaa [zk: 127.0.0.1:2181(CONNECTED) 7] create /xyz 123 Created /xyz [zk: 127.0.0.1:2181(CONNECTED) 8] create /xyz/aaa 12345 Created /xyz/aaa
該命令用來查看path節點上值以及節點信息,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 12] get /xyz 123 cZxid = 0x1f ctime = Sun Jun 09 15:12:07 CST 2019 mZxid = 0x1f mtime = Sun Jun 09 15:12:07 CST 2019 pZxid = 0x20 cversion = 1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1
該命令用來對已經存在的path的data進行設置,須要注意的是,若是path不存在,那麼set操做就會失敗,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 13] set /xyz 321 cZxid = 0x1f ctime = Sun Jun 09 15:12:07 CST 2019 mZxid = 0x22 mtime = Sun Jun 09 15:15:18 CST 2019 pZxid = 0x20 cversion = 1 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 3 numChildren = 1 [zk: 127.0.0.1:2181(CONNECTED) 14] set /www notExists # path不存在,操做失敗 Node does not exist: /www
該命令用來刪除葉子節點,葉子節點就是沒有子節點的節點。若是刪除path下面還有其餘的子節點,那麼刪除操做就會失敗。
[zk: 127.0.0.1:2181(CONNECTED) 19] ls / [xyz, abc, zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 20] ls /xyz [aaa] [zk: 127.0.0.1:2181(CONNECTED) 21] ls /xyz/aaa [] [zk: 127.0.0.1:2181(CONNECTED) 22] delete /xyz # 刪除的path包含子節點,刪除失敗 Node not empty: /xyz [zk: 127.0.0.1:2181(CONNECTED) 23] delete /xyz/aaa # 刪除的節點沒有子節點,刪除成功
該命令用來遞歸刪除path,若是path下面有子節點,那麼子節點都會被所有刪除。
[zk: 127.0.0.1:2181(CONNECTED) 24] ls /xyz [] [zk: 127.0.0.1:2181(CONNECTED) 25] create /xyz/abc 3333 Created /xyz/abc [zk: 127.0.0.1:2181(CONNECTED) 26] rmr /xyz
用來獲取path節點的相關信息,示例以下:
[zk: 127.0.0.1:2181(CONNECTED) 29] stat /abc cZxid = 0x1d ctime = Sun Jun 09 15:10:39 CST 2019 mZxid = 0x21 mtime = Sun Jun 09 15:13:30 CST 2019 pZxid = 0x1d cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 0