zookeeper初探
大資料解決方案裡面有一個元件是zookeeper,最開始看到這個的時候,腦海裡不由得閃現出一個職業,動物園管理員。開啟Apache裡面的專案介紹,發現和我想的也差不多,看裡面的測試目錄確實都是各種動物,得管管了。
現在談到大資料,必然會談到分散式,zookeeper就是分散式裡面的一種解決方案,主要面向分散式應用程式協調服務,是Google的Chubby一個開源的實現,
ZooKeeper的目標比較單純,就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。
zookeeper的技術基因很不錯,是以Fast Paxos演算法為基礎的,而我們熟知的MySQL Group Replication是基於Paxos實現,所以從長遠來說,高可用方案我很看好MGR,儘管目前InnoDB Cluster也在改進,MGR自身也在改進,方向是光明的。就如同zookeeper如今已從原本的子專案剝離出來,成為了Apache的頂級專案之一。
如果對zookeeper一無所知,需要對它有一個整體的認識是很重要的。我們就通過一個簡單的小示例來說一下。
首先就是老生常談的安裝部署了。基本就是解壓和簡單的配置。
關於版本的選擇,3.5還是alpha版本,所以基本不考慮,往前退一個版本,那就是3.4.9
解壓後的目錄結構還是比較清晰的。我們直接到conf目錄下,做個配置。
加入下面的配置,生成配置檔案zoo.cfg。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/root/zookeeper/zookeeper-3.4.9/data
clientPort=2181
server.1=192.168.253.129:2888:3888
server.2=192.168.253.128:2888:3888
server.3=192.168.253.131:2888:3888
其中data目錄是自己需要手工建立的,下面的3個節點server.1-server.3是我們模擬測試的3套環境。客戶端訪問的預設埠為2181,其他的網路埠為2888,3888,需要提前開通。zookeeper可以支援單機也可以支援叢集,我們測試的是叢集的環境,最少需要3個節點。
使用如下的方式啟動zookeeper
$ ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/xxx/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
啟動之後ps -ef|grep zoo是可以看到對應的程式的,或者使用netstat來看看網路服務是否正常。
$ echo ruok | nc localhost 2181
imok
如果現實為imok就證明I am ok了。
在節點1上面這樣部署,節點2,節點3上面也是如法炮製。安裝目錄很IAO,所以整個過程還是比較簡單的。
我們可以根據zkServer.sh staus來看到每個節點的角色,比如領導者(leader),選舉者(follower)
# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
說幾個安裝部署中的簡單錯誤吧。
2017-10-08 04:11:37,671 [myid:] - WARN [main:QuorumPeerConfig@305] - No server failure will be tolerated. You need at least 3 servers.
這裡的原因是需要最少3個節點。
Caused by: java.lang.IllegalArgumentException: /root/zookeeper/zookeeper-3.4.9/data/myid file is missing
這裡的原因是在data目錄下需要有一個myid的檔案,就和MySQL裡面的server-id差不多。
Caused by: java.lang.IllegalArgumentException: serverid this is a test is not a number
這裡的原因是myid是整數,不能配置字元等。
使用zkCli.sh登入客戶端,我們通過這種方式連線到任意的節點,還能保持資料的同步,這也是zookeeper的魅力所在。
比如./zkCli.sh -server 192.168.253.128
檢視根目錄下的目錄情況。
[zk: 192.168.253.128(CONNECTED) 1] ls /
[zookeeper, mgr]
檢視mgr目錄的結構,可以看到lion和tiger
[zk: 192.168.253.128(CONNECTED) 6] ls /mgr
[lion, tiger]
目錄mgr的標籤對應的資料是test
[zk: 192.168.253.128(CONNECTED) 7] get /mgr
test
cZxid = 0x100000002
ctime = Tue Oct 10 08:55:41 CST 2017
mZxid = 0x100000002
mtime = Tue Oct 10 08:55:41 CST 2017
pZxid = 0x10000000c
cversion = 2
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 2
檢視/mgr/tiger目錄的標籤資料,是tiger_test,當然還有其他豐富的屬性。
[zk: 192.168.253.128(CONNECTED) 9] get /mgr/tiger
tiger_test
cZxid = 0x100000009
ctime = Tue Oct 10 09:03:35 CST 2017
mZxid = 0x100000009
mtime = Tue Oct 10 09:03:35 CST 2017
pZxid = 0x100000009
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 10
numChildren = 0
我們建立一個目錄money,對應的值為money_test
[zk: 192.168.253.128(CONNECTED) 11] create /mgr/monkey monkey_test
Created /mgr/monkey
得到的值為,在其他任意的節點上檢視都會看到同樣的資料,這些資料很小巧,都在記憶體裡面。
[zk: 192.168.253.128(CONNECTED) 13] get /mgr/monkey
monkey_test
cZxid = 0x300000007
ctime = Tue Oct 10 09:59:06 CST 2017
mZxid = 0x300000007
mtime = Tue Oct 10 09:59:06 CST 2017
pZxid = 0x300000007
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
至於後續的補充,那就值得深入實踐了,保證技術的可控。
當然zookeeper實現的功能資料的同步只是其中之一,還有很多不錯的選擇,比如在併發中如果解決鎖的問題等,這些都是zookeeper稱為一個實用專案的考驗。
個人微信公眾號,歡迎掃碼關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2146217/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Apache ZooKeeper - 事件監聽機制初探Apache事件
- 搞懂分散式技術3:初探分散式協調服務zookeeper分散式
- Zookeeper-Zookeeper clientclient
- 【zookeeper】zookeeper分散式鎖分散式
- 【Zookeeper】zookeeper叢集安裝
- 【zookeeper之七】Zookeeper客戶端客戶端
- Zookeeper之Zookeeper的Client的分析client
- Zookeeper原始碼分析(二) —– zookeeper日誌原始碼
- ZooKeeper 系列(一)—— ZooKeeper核心概念詳解
- zookeeper學習04 zookeeper收尾+dubbo前瞻
- ZooKeeper 06 - ZooKeeper 的常用命令
- Zookeeper系列一:Zookeeper基礎命令操作
- Zookeeper原始碼分析(二) ----- zookeeper日誌原始碼
- ZooKeeper管理員指南——部署與管理ZooKeeper
- zookeeper理解
- Zookeeper流程
- zookeeper原理
- zookeeper:spark-project專案的zookeeper配置SparkProject
- 【Zookeeper】zookeeper客戶端KeeperErrorCode = ConnectionLoss客戶端Error
- [Zookeeper-01]什麼是zookeeper?& Linux / Windows Zookeeper安裝和部署(單點)LinuxWindows
- ZooKeeper筆記(1):ZooKeeper特性與基本概念筆記
- ZooKeeper系列(4):ZooKeeper的配置檔案詳解
- ZooKeeper系列(2):ZooKeeper命令列工具zkCli.sh命令列
- zookeeper入門(2)解讀zookeeper的配置項
- Deno 初探
- ELK初探
- Nginx 初探Nginx
- Mobx 初探
- jQuery初探jQuery
- 初探IndexedDBIndex
- 初探PWA
- Puppeteer 初探
- Redis初探Redis
- 初探Firewalld
- Serverless初探Server
- Promise初探Promise
- Quantum 初探
- 初探TCPTCP