ZooKeeper的安裝與部署2
一、系統要求
ZooKeeper可以執行在多種系統平臺上面,表1展示了zk支援的系統平臺,以及在該平臺上是否支援開發環境或者生產環境。
表1:ZooKeeper支援的執行平臺
系統 | 開發環境 | 生產環境 |
---|---|---|
Linux | 支援 | 支援 |
Solaris | 支援 | 支援 |
FreeBSD | 支援 | 支援 |
Windows | 支援 | 不支援 |
MacOS | 支援 | 不支援 |
ZooKeeper是用Java編寫的,執行在Java環境上,因此,在部署zk的機器上需要安裝Java執行環境。為了正常執行zk,我們需要JRE1.6或者以上的版本。
對於叢集模式下的ZooKeeper部署,3個ZooKeeper服務程序是建議的最小程序數量,而且不同的服務程序建議部署在不同的物理機器上面,以減少機器宕機帶來的風險,以實現ZooKeeper叢集的高可用。
ZooKeeper對於機器的硬體配置沒有太大的要求。例如,在Yahoo!內部,ZooKeeper部署的機器其配置通常如下:雙核處理器,2GB記憶體,80GB硬碟。
二、下載
三、目錄
下載並解壓ZooKeeper軟體壓縮包後,可以看到zk包含以下的檔案和目錄:
圖1:ZooKeeper軟體的檔案和目錄
- bin目錄
zk的可執行指令碼目錄,包括zk服務程序,zk客戶端,等指令碼。其中,.sh是Linux環境下的指令碼,.cmd是Windows環境下的指令碼。 - conf目錄
配置檔案目錄。zoo_sample.cfg為樣例配置檔案,需要修改為自己的名稱,一般為zoo.cfg。log4j.properties為日誌配置檔案。 - lib
zk依賴的包。 - contrib目錄
一些用於操作zk的工具包。 - recipes目錄
zk某些用法的程式碼示例
四、單機模式
ZooKeeper的安裝包括單機模式安裝,以及叢集模式安裝。
單機模式較簡單,是指只部署一個zk程序,客戶端直接與該zk程序進行通訊。
在開發測試環境下,通過來說沒有較多的物理資源,因此我們常使用單機模式。當然在單臺物理機上也可以部署叢集模式,但這會增加單臺物理機的資源消耗。故在開發環境中,我們一般使用單機模式。
但是要注意,生產環境下不可用單機模式,這是由於無論從系統可靠性還是讀寫效能,單機模式都不能滿足生產的需求。
4.1 執行配置
上面提到,conf目錄下提供了配置的樣例zoo_sample.cfg,要將zk執行起來,需要將其名稱修改為zoo.cfg。
開啟zoo.cfg,可以看到預設的一些配置。
- tickTime
時長單位為毫秒,為zk使用的基本時間度量單位
tickTime的預設值為2000毫秒,更低的tickTime值可以更快地發現超時問題,但也會導致更高的網路流量(心跳訊息)和更高的CPU使用率(會話的跟蹤處理)。 - clientPort
zk服務程序監聽的TCP埠,預設情況下,服務端會監聽2181埠。 - dataDir
無預設配置,必須配置,用於配置儲存快照檔案的目錄。如果沒有配置dataLogDir,那麼事務日誌也會儲存在此目錄。
4.2 啟動
在Windows環境下,直接雙擊zkServer.cmd即可。在Linux環境下,進入bin目錄,執行命令
./zkServer.sh start
這個命令使得zk服務程序在後臺進行。如果想在前臺中執行以便檢視伺服器程序的輸出日誌,可以通過以下命令執行:
./zkServer.sh start-foreground
執行此命令,可以看到大量詳細資訊的輸出,以便允許檢視伺服器發生了什麼。
使用文字編輯器開啟zkServer.cmd或者zkServer.sh檔案,可以看到其會呼叫zkEnv.cmd或者zkEnv.sh指令碼。zkEnv指令碼的作用是設定zk執行的一些環境變數,例如配置檔案的位置和名稱等。
4.3 連線
如果是連線同一臺主機上的zk程序,那麼直接執行bin/目錄下的zkCli.cmd(Windows環境下)或者zkCli.sh(Linux環境下),即可連線上zk。
直接執行zkCli.cmd或者zkCli.sh命令預設以主機號 127.0.0.1,埠號 2181 來連線zk,
如果要連線不同機器上的zk,可以使用 -server 引數,例如:
bin/zkCli.sh -server 192.168.0.1:2181
- 1
五、叢集模式
單機模式的zk程序雖然便於開發與測試,但並不適合在生產環境使用。在生產環境下,我們需要使用叢集模式來對zk進行部署。
注意
在叢集模式下,建議至少部署3個zk程序,或者部署奇數個zk程序。如果只部署2個zk程序,當其中一個zk程序掛掉後,剩下的一個程序並不能構成一個quorum的大多數。因此,部署2個程序甚至比單機模式更不可靠,因為2個程序其中一個不可用的可能性比一個程序不可用的可能性還大。
5. 1 執行配置
在叢集模式下,所有的zk程序可以使用相同的配置檔案(是指各個zk程序部署在不同的機器上面),例如如下配置:
tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.229.160:2888:3888
server.2=192.168.229.161:2888:3888
server.3=192.168.229.162:2888:3888
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- initLimit
ZooKeeper叢集模式下包含多個zk程序,其中一個程序為leader,餘下的程序為follower。
當follower最初與leader建立連線時,它們之間會傳輸相當多的資料,尤其是follower的資料落後leader很多。initLimit配置follower與leader之間建立連線後進行同步的最長時間。 - syncLimit
配置follower和leader之間傳送訊息,請求和應答的最大時間長度。 - tickTime
tickTime則是上述兩個超時配置的基本單位,例如對於initLimit,其配置值為5,說明其超時時間為 2000ms * 5 = 10秒。 - server.id=host:port1:port2
其中id為一個數字,表示zk程序的id,這個id也是dataDir目錄下myid檔案的內容。
host是該zk程序所在的IP地址, - port1表示follower和leader交換訊息所使用的埠,port2表示選舉leader所使用的埠。
- dataDir
其配置的含義跟單機模式下的含義類似,不同的是叢集模式下還有一個myid檔案。myid檔案的內容只有一行,且內容只能為1 - 255之間的數字,這個數字亦即上面介紹server.id中的id,表示zk程序的id。
注意
如果僅為了測試部署叢集模式而在同一臺機器上部署zk程序,server.id=host:port1:port2配置中的port引數必須不同。但是,為了減少機器宕機的風險,強烈建議在部署叢集模式時,將zk程序部署不同的物理機器上面。
5.2 啟動
假如我們打算在三臺不同的機器 192.168.229.160,192.168.229.161,192.168.229.162上各部署一個zk程序,以構成一個zk叢集。
三個zk程序均使用相同的 zoo.cfg 配置:
tickTime=2000
dataDir=/home/myname/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.229.160:2888:3888
server.2=192.168.229.161:2888:3888
server.3=192.168.229.162:2888:3888
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
在三臺機器dataDir目錄( /home/myname/zookeeper 目錄)下,分別生成一個myid檔案,其內容分別為1,2,3。然後分別在這三臺機器上啟動zk程序,這樣我們便將zk叢集啟動了起來。
5.3 連線
可以使用以下命令來連線一個zk叢集:
bin/zkCli.sh -server 192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181
- 1
成功連線後,可以看到如下輸出:
2016-06-28 19:29:18,074 [myid:] - INFO [main:[email protected]] - Initiating client connection, connectString=192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181 sessionTimeout=30000 [email protected]
Welcome to ZooKeeper!
2016-06-28 19:29:18,146 [myid:] - INFO [main-SendThread(192.168.229.162:2181):[email protected]] - Opening socket connection to server 192.168.229.162/192.168.229.162:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2016-06-28 19:29:18,161 [myid:] - INFO [main-SendThread(192.168.229.162:2181):[email protected]] - Socket connection established to 192.168.229.162/192.168.229.162:2181, initiating session
2016-06-28 19:29:18,199 [myid:] - INFO [main-SendThread(192.168.229.162:2181):[email protected]] - Session establishment complete on server 192.168.229.162/192.168.229.162:2181, sessionid = 0x3557c39d2810029, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181(CONNECTED) 0]
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
圖2:客戶端連線zk叢集的輸出日誌
從日誌輸出可以看到,客戶端連線的是192.168.229.162:2181程序(連線上哪臺機器的zk程序是隨機的),客戶端已成功連線上zk叢集。
Zookeeper安裝和部署:
ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。
它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。
ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。
ZooKeeper包含一個簡單的原語集, 提供Java和C的介面。
ZooKeeper程式碼版本中,提供了分散式獨享鎖、選舉、佇列的介面,程式碼在zookeeper-3.4.8\src\recipes。其中分佈鎖和佇列有Java和C兩個版本,選舉只有Java版本。
2. Zookeeper原理
ZooKeeper是以Fast Paxos演算法為基礎的,Paxos 演算法存在活鎖的問題,即當有多個proposer交錯提交時,有可能互相排斥導致沒有一個proposer能提交成功,而Fast Paxos作了一些優化,通過選舉產生一個leader (領導者),只有leader才能提交proposer,具體演算法可見Fast Paxos。因此,要想弄懂ZooKeeper首先得對Fast Paxos有所瞭解。
ZooKeeper的基本運轉流程:
1、選舉Leader。
2、同步資料。
3、選舉Leader過程中演算法有很多,但要達到的選舉標準是一致的。
4、Leader要具有最高的zxid。
5、叢集中大多數的機器得到響應並follow選出的Leader。[3]
3. Zookeeper特點
在Zookeeper中,znode是一個跟Unix檔案系統路徑相似的節點,可以往這個節點儲存或獲取資料。如果在建立znode時Flag設定為EPHEMERAL,那麼當建立這個znode的節點和Zookeeper失去連線後,這個znode將不再存在在Zookeeper裡,Zookeeper使用Watcher察覺事件資訊。當客戶端接收到事件資訊,比如連線超時、節點資料改變、子節點改變,可以呼叫相應的行為來處理資料。Zookeeper的Wiki頁面展示瞭如何使用Zookeeper來處理事件通知,佇列,優先佇列,鎖,共享鎖,可撤銷的共享鎖,兩階段提交。
那麼Zookeeper能做什麼事情呢,簡單的例子:假設我們有20個搜尋引擎的伺服器(每個負責總索引中的一部分的搜尋任務)和一個總伺服器(負責向這20個搜尋引擎的伺服器發出搜尋請求併合並結果集),一個備用的總伺服器(負責當總伺服器宕機時替換總伺服器),一個web的cgi(向總伺服器發出搜尋請求)。搜尋引擎的伺服器中的15個伺服器提供搜尋服務,5個伺服器正在生成索引。這20個搜尋引擎的伺服器經常要讓正在提供搜尋服務的伺服器停止提供服務開始生成索引,或生成索引的伺服器已經把索引生成完成可以提供搜尋服務了。使用Zookeeper可以保證總伺服器自動感知有多少提供搜尋引擎的伺服器並向這些伺服器發出搜尋請求,當總伺服器宕機時自動啟用備用的總伺服器。
4. Zookeeper的下載
可以從 https://zookeeper.apache.org/releases.html 下載ZooKeeper,目前最新的穩定版本為 3.4.8 版本,使用者可以自行選擇一個速度較快的映象來下載即可。
5. Zookeeper的目錄結構
下載並解壓ZooKeeper軟體壓縮包後,可以看到zk包含以下的檔案和目錄:
ZooKeeper軟體的檔案和目錄
bin目錄
zk的可執行指令碼目錄,包括zk服務程序,zk客戶端,等指令碼。其中,.sh是Linux環境下的指令碼,.cmd是Windows環境下的指令碼。
lib目錄 zk依賴的包。
libexec目錄
一些用於操作zk的工具包。
5.單機模式
ZooKeeper的安裝包括單機模式安裝,以及叢集模式安裝。
單機模式較簡單,是指只部署一個zk程序,客戶端直接與該zk程序進行通訊。
在開發測試環境下,通過來說沒有較多的物理資源,因此我們常使用單機模式。當然在單臺物理機上也可以部署叢集模式,但這會增加單臺物理機的資源消耗。故在開發環境中,我們一般使用單機模式。
5.1 執行配置
在etc/zookeeper/目錄下提供了zoo.cfg,開啟zoo.cfg,可以看到預設的一些配置。
tickTime
時長單位為毫秒,為zk使用的基本時間度量單位。例如,1 * tickTime是客戶端與zk服務端的心跳時間,2 * tickTime是客戶端會話的超時時間。
tickTime的預設值為2000毫秒,更低的tickTime值可以更快地發現超時問題,但也會導致更高的網路流量(心跳訊息)和更高的CPU使用率(會話的跟蹤處理)。
tickTime=2000
clientPort
zk服務程序監聽的TCP埠,預設情況下,服務端會監聽2181埠。
clientPort=2181
dataDir
無預設配置,必須配置,用於配置儲存快照檔案的目錄。如果沒有配置dataLogDir,那麼事務日誌也會儲存在此目錄。
dataDir=/usr/local/var/run/zookeeper/data
dataLogDir=/usr/local/var/run/zookeeper/logs
5.2 啟動
在mac環境下,將zookeeper的bin目錄配置到環境變數中,直接執行命令
zkServer start
這個命令使得zk服務程序在後臺進行。
相關推薦
ZooKeeper的安裝與部署2
一、系統要求ZooKeeper可以執行在多種系統平臺上面,表1展示了zk支援的系統平臺,以及在該平臺上是否支援開發環境或者生產環境。表1:ZooKeeper支援的執行平臺系統開發環境生產環境Linux支援支援Solaris支援支援FreeBSD支援支援Windows支援不支援
ZooKeeper的安裝與部署
一、系統要求 ZooKeeper可以執行在多種系統平臺上面,表1展示了zk支援的系統平臺,以及在該平臺上是否支援開發環境或者生產環境。 表1:ZooKeeper支援的執行平臺 系統 開發環境 生產環境 Linux 支援 支援 Solaris
zabbix監控實戰<2>----zabbix-server的安裝與部署
第一章 zabbix-server的安裝與部署 1.1 環境部署 eth0  
Linux-7.2 下 Solr4.10.4 單機模式的安裝與部署圖文詳解
《 Linux下Solr4.10.4搜尋引擎的安裝與部署 》 瞭解Solr: Solr是來自Apache Lucene專案的流行的,快速的,開源的NoSQL搜尋平臺。它的主要功能包括強大
JAVA大資料(1)--ZooKeeper的安裝與部署
本文講述如何安裝和部署ZooKeeper。 一、系統要求 ZooKeeper可以執行在多種系統平臺上面,表1展示了zk支援的系統平臺,以及在該平臺上是否支援開發環境或者生產環境。 表1:ZooKeeper支援的執行平臺 系統 開發環境 生
Spark實踐 | spark2.2.0安裝與部署
安裝之前的準備 下載並解壓spark tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz -C ~/ mv spark-2.2.0-bin-hadoop2.7/ spark-2.2.0 安裝scala s
linux上dubbo+zookeeper的安裝與部署
官網下載 zookeeper 或者進入我的資源下載:http://download.csdn.net/download/lh2420124680/10160562 解壓 tar -zxvf zookeeper-3.4.6.tar.gz 進入解壓目錄下新建兩個資料夾data
Linux下svn的安裝與部署
myeclipse span .com 服務 點擊 svn服務器 。。 hook idt 最近工作碰到一個問題,我和一個同夥負責開發一個管理系統,基於原來的代碼上進行修改,每當他修改之後,我要再修改都要和他確定是不是最新的文件,才能進行修改。非常影響工作的效率,所以
zookeeper安裝及部署
img ise size nap alt alias 沒有 color nts 閱讀目錄 一. 單機安裝、配置 二. 集群安裝、配置 安裝及部署 回到頂部 一. 單機安裝、配置 1、下載zookeeper二進制安裝包 下載 curl -L -O http:/
Hyperledger fablic 0.6 在centos7環境下的安裝與部署
maker ber gin sudo 管理 lease nts eve blank 原文:http://blog.csdn.net/zhaoliang1131/article/details/54617274 Hyperledger Fabric超級賬本 項目約定共同遵守
Tomcat--安裝與部署(一)
實現 get original servle body public -- ont str 一、Tomcat背景 自從JSP發布之後,推出了各式各樣的JSP引擎。Apache Group在完成GNUJSP1.0的開發以後,開始考慮在SUN的JSWDK基礎上開發一個可以
ZooKeeper安裝與執行
star chapter this ons apt java mark itl init 首先從官網下載ZooKeeper壓縮包,然後解壓下載得到的ZooKeeper壓縮包,發現有“bin,conf,lib”等文件夾。“bin文件夾”中存放有執行腳本。“
OpenVAS 安裝與部署
openvas openvas安裝與配置 漏洞掃描器 51cto 00x00 參考文章 OpenVAS 安裝http://www.cnblogs.com/xuanhun/p/3972662.htmlOpenVAS 配置http://www.freebuf.com/colum
Redis Sentinel安裝與部署,實現redis的高可用
config pom else turn int 修改 align 表示 boot.s 前言 對於生產環境,高可用是避免不了要面對的問題,無論什麽環境、服務,只要用於生產,就需要滿足高可用;此文針對的是redis的高可用。 接下來會有系列文章,該系列是對spring
基於linux7的ectd安裝與部署
etcd 基於linux7的ectd安裝與部署 etcd集群 etcd安裝與部署 基於linux7的ectd安裝與部署 系統環境 iostat Linux 3.10.0-693.17.1.el7.x86_64 (swarm1) 2018年03月28日 _x86_64_ (2
Hadoop安裝與部署
hadoop1、hadoop:由java語言開發的開源的分布式計算平臺。可提供PB(100萬G)存儲。hadoop是可靠的,高效的,可伸縮的。hadoop假設計算元素和存儲會失敗,維護多個副本,確保針對失敗的節點重分布處理。文件以塊的方式存儲.2、hadoop最核心的是hdfs和mapreduce,hdfs為
CRFPP/CRF++編譯安裝與部署
CRFPP CRF++ CRFPP/CRF++編譯安裝與部署 linux crfpp CRFPP/CRF++編譯安裝與部署 下載CRF++ https://taku910.github.io/crfpp/#download 說明:在上面網站中下載CRF++ 0.58 解壓 tar zx
Zookeeper安裝與配置
16px zookeeper zoo.cfg 下載 have onf res arr arch 一、下載Zookeeper wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.0/zookeeper-
Linxu下 expect的安裝與使用2
bye emp 並且 rem 文件 out root link a* 案例 例1:從本機自動登錄到遠程機器192.168.1.200(端口是22,密碼是:PASSWORD)登錄到遠程機器後做以下幾個操作:1)useradd wangshibo2)mkdir /opt/tes
dzzoffice協同辦公平臺與onlyoffice在線協作平臺安裝與部署
study 在線 局域網訪問 解決 tar get ref sta 集成 1、安裝dzzoffice協同辦公平臺 DzzOffice是一套開源辦公套件,適用於企業、團隊搭建自己的 類似“Google企業應用套件”、“微軟Office36