1. 程式人生 > >JAVA大資料(1)--ZooKeeper的安裝與部署

JAVA大資料(1)--ZooKeeper的安裝與部署

本文講述如何安裝和部署ZooKeeper。

一、系統要求

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使用的基本時間度量單位。例如,1 * tickTime是客戶端與zk服務端的心跳時間,2 * tickTime是客戶端會話的超時時間。
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

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

在三臺機器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

成功連線後,可以看到如下輸出:

2016-06-28 19:29:18,074 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=192.168.229.160:2181,192.168.229.161:2181,192.168.229.162:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@770537e4
Welcome to ZooKeeper!
2016-06-28 19:29:18,146 [myid:] - INFO  [main-SendThread(192.168.229.162:2181):ClientCnxn$SendThread@975] - 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):ClientCnxn$SendThread@852] - 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):ClientCnxn$SendThread@1235] - 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:客戶端連線zk叢集的輸出日誌

從日誌輸出可以看到,客戶端連線的是192.168.229.162:2181程序(連線上哪臺機器的zk程序是隨機的),客戶端已成功連線上zk叢集。

—————————————————————————————————————————————————–

java架構師專案實戰,高併發叢集分散式,大資料高可用視訊教程,共760G

下載地址:

https://item.taobao.com/item.htm?id=555888526201

01.高階架構師四十二個階段高
02.Java高階系統培訓架構課程148課時
03.Java高階網際網路架構師課程
04.Java網際網路架構Netty、Nio、Mina等-視訊教程
05.Java高階架構設計2016整理-視訊教程
06.架構師基礎、高階片
07.Java架構師必修linux運維繫列課程
08.Java高階系統培訓架構課程116課時
+
hadoop系列教程,java設計模式與資料結構, Spring Cloud微服務, SpringBoot入門

內容詳情:

【入門篇】
J2SE的Socket網路程式設計應用
J2SE的反射機制高階應用
J2SE高深講解
JAVA程式設計思想 中級教程
JAVA程式設計思想 初級教程
JAVA程式設計思想 高階教程
基於J2SE的QQ聊天工具開發
我來說說面向物件
【進階篇】
CRM專案
Eclipse
Hibernate
JAVA WEB開發視訊
JAVAWEB開發實戰經典-高階案例篇
JAVAWEB
JAVA執行緒併發教程
java網上線上支付實戰視訊
java設計模式
jdbc
junit
mybatis
spring mvc
SpringMvc+Spring+MyBatis+Maven整合視訊
SpringMVC
Spring
Struts2 開發實戰講解
Struts2+Spring3+Hibernate4+Maven+EasyUI整合入門視訊
Struts
SVN
tomcat
weblogic
WebService從入門到上手企業開發
企業系統OA辦公自動化
手機進銷存系統
資料結構和演算法視訊
設計模式系列
【高階篇】
Cas單點登入
Extjs4.1+Spring3.2+hibernate4.1+MySql5商城
Git權威指南
groovy入門視訊
Java 8新特性
Lucene
Mongodb
node.js
Nutch相關框架
OA辦公自動化系統
Quartz Job定時任務
Solr高階應用視訊
Spring Security許可權控制
Spring原始碼解讀與設計詳析
Struts2原始碼剖析與架構指導
大型CMS內容管理系統專案
微信入門視訊
深入JVM核心—原理、診斷與優化
深入淺出微信公眾平臺實戰開發(微網站、LBS雲、Api介面呼叫、服務號高階介面)
銀行介面資料
【架構篇】
ActiveMQ實戰
Apache-Tomcat叢集搭建
Linux叢集
Linux高階架構架構方案及實現指南
Memcached分散式叢集
Mysql特級優化課程
Nginx+Tomcat+Memcached群集配置軟體包
Nginx伺服器搭建
Nginx網站架構實戰(Web伺服器負載均衡與反向代理)
SOA Dubbo
storm入門到精通
storm叢集的搭建
storm專案實戰
UML建模
網際網路公司技術架構系列
京東B2C平臺推薦搜尋的實踐和思考
京東大資料分析與創新應用
京東大規模儲存持續研發
京東電商海量訂單處理OFC系統的關鍵技術
優米網架構設計方案
基於SOA 思想下的百萬資料架構
大型網站提速之MySQL優化
大型網站架構設計
大資料高併發架構實戰案例
資料優化技術Redis
資料庫高併發原理
深入Java程式效能調優
深入淺出MongoDB應用實戰叢集及系統架構
深度揭祕伺服器端內幕
電商網站之Solr應用
系統架構設計師
阿里分散式資料庫服務實踐
—————————————————————————————————————————————————–