日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Zookeeper 是什么

官方文檔上這么解釋zookeeper,它是一個分布式協調框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。

上面的解釋有點抽象,簡單來說zookeeper=文件系統+監聽通知機制

1、 文件系統

Zookeeper維護一個類似文件系統的數據結構:

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

每個子目錄項如 NameService 都被稱作為 znode(目錄節點),和文件系統一樣,我們能夠自由的增加、刪除znode,在一個znode下增加、刪除子znode,唯一的不同在于znode是可以存儲數據的。

有四種類型的znode:

1、PERSISTENT-持久化目錄節點

客戶端與zookeeper斷開連接后,該節點依舊存在

2、 PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點

客戶端與zookeeper斷開連接后,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號

3、EPHEMERAL-臨時目錄節點

客戶端與zookeeper斷開連接后,該節點被刪除

4、EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點

客戶端與zookeeper斷開連接后,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號

2、 監聽通知機制

客戶端注冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增加刪除)時,zookeeper會通知客戶端。

就這么簡單,下面我們看看Zookeeper能做點什么呢?

Zookeeper 能做什么

zookeeper功能非常強大,可以實現諸如分布式應用配置管理、統一命名服務、狀態同步服務、集群管理等功能,我們這里拿比較簡單的分布式應用配置管理為例來說明。

假設我們的程序是分布式部署在多臺機器上,如果我們要改變程序的配置文件,需要逐臺機器去修改,非常麻煩,現在把這些配置全部放到zookeeper上去,保存在 zookeeper 的某個目錄節點中,然后所有相關應用程序對這個目錄節點進行監聽,一旦配置信息發生變化,每個應用程序就會收到 zookeeper 的通知,然后從 zookeeper 獲取新的配置信息應用到系統中。

 

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

 

如上,你大致應該了解zookeeper是個什么東西,大概能做些什么了,我們馬上來學習下zookeeper的安裝及使用,并開發一個小程序來實現zookeeper這個配置管理的功能

zookeeper安裝

Step1:配置JAVA環境,檢驗環境:

java -version

Step2: 下載解壓 zookeeper

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
tar -zxvf zookeeper-3.4.11.tar.gz
cd zookeeper-3.4.11

Step3: 重命名配置文件 zoo_sample.cfg

 cp zoo_sample.cfg zoo.cfg 

Step4: 啟動zookeeper

# 可以通過 bin/zkServer.sh 來查看都支持哪些參數 
bin/zkServer.sh start 

Step5: 檢測是否啟動成功

bin/zkCli.sh start 

Zookeeper使用

使用命令行操作zookeeper

1、使用 ls 命令來查看當前 ZooKeeper 中所包含的內容

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

2、創建一個新的 znode ,使用 create /zkPro myData

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

3、再次使用 ls 命令來查看現在 zookeeper 中所包含的內容:

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

4、下面我們運行 get 命令來確認第二步中所創建的 znode 是否包含我們所創建的字符串:

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

5、下面我們通過 set 命令來對 zk 所關聯的字符串進行設置:

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

6、下面我們將剛才創建的 znode 刪除

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

Stat

  • cZxid:創建znode的事務ID。
  • mZxid:最后修改znode的事務ID。
  • pZxid:最后修改添加或刪除子節點的事務ID。
  • ctime:znode創建時間。
  • mtime:znode最近修改時間。
  • dataVersion:znode的當前數據版本。
  • cversion:znode的子節點結果集版本(一個節點的子節點增加、刪除都會影響這個版本)。
  • aclVersion:表示對此znode的acl版本。
  • ephemeralOwner:znode是臨時znode時,表示znode所有者的 session ID。 如果znode不是臨時znode,則該字段設置為零。
  • dataLength:znode數據字段的長度。
  • numChildren:znode的子znode的數量。

Zookeeper集群模式安裝

本例搭建的是偽集群模式,即一臺機器上啟動三個zookeeper實例組成集群,真正的集群模式無非就是實例IP地址不同,搭建方法沒有區別

Step1:配置JAVA環境,檢驗環境:

java -version

Step2:下載并解壓zookeeper

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
tar -zxvf zookeeper-3.4.11.tar.gz
cd zookeeper-3.4.11

Step3:重命名 zoo_sample.cfg文件

 cp conf/zoo_sample.cfg conf/zoo-1.cfg

Step4:修改配置文件zoo-1.cfg,原配置文件里有的,修改成下面的值,沒有的則加上

# vim conf/zoo-1.cfg
dataDir=/usr/local/data/zookeeper-1
clientPort=2181
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

配置說明

  • tickTime:這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
  • initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗??偟臅r間長度就是 10*2000=20 秒
  • syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10秒
  • dataDir:顧名思義就是 Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
  • clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。
  • server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。

Step4:再從zoo-1.cfg復制兩個配置文件zoo-2.cfg和zoo-3.cfg,只需修改dataDir和clientPort不同即可

cp conf/zoo-1.cfg conf/zoo-2.cfg
cp conf/zoo-1.cfg conf/zoo-3.cfg
vim conf/zoo-2.cfg
dataDir=/usr/local/data/zookeeper-2
clientPort=2182
vim conf/zoo-2.cfg
dataDir=/usr/local/data/zookeeper-3
clientPort=2183

Step5:標識Server ID

創建三個文件夾/tmp/zookeeper-1,/tmp/zookeeper-2,/tmp/zookeeper-2,在每個目錄中創建文件myid 文件,寫入當前實例的server id,即1.2.3

cd /usr/local/data/zookeeper-1
vim myid
1 
cd /usr/local/data/zookeeper-2
vim myid
2 
cd /usr/local/data/zookeeper-3
vim myid
3

Step6:啟動三個zookeeper實例

bin/zkServer.sh start conf/zoo-1.cfg
bin/zkServer.sh start conf/zoo-2.cfg
bin/zkServer.sh start conf/zoo-3.cfg

Step7:檢測集群狀態,也可以直接用命令“zkCli.sh -server IP:PORT”連接zookeeper服務端檢測

兩個小時手寫了個Zookeeper分布式服務注冊中心

 

bin/zkCli.sh -server 192.168.6.134:2181

分享到:
標簽:Zookeeper
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定