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硬盤。

二、下載

可以從 https://zookeeper.apache.org/releases.html 下載ZooKeeper,目前最新的穩定版本為 3.4.8 版本,用戶可以自行選擇一個速度較快的鏡像來下載即可。

三、目錄

下載并解壓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
1
這個命令使得zk服務進程在后臺進行。如果想在前臺中運行以便查看服務器進程的輸出日志,可以通過以下命令運行:

./zkServer.sh start-foreground
1
執行此命令,可以看到大量詳細信息的輸出,以便允許查看服務器發生了什么。

使用文本編輯器打開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 = 30000WATCHER::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集群。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249700.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249700.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java基礎1之java語言基礎1

一、常量的概述和使用 A:什么是常量 * 在程序執行的過程中其值不可以發生改變 B:Java中常量的分類 * 字面值常量 * 自定義常量(面向對象部分講) C:字面值常量的分類 * 字符串常量 用雙引號括起來的內容 * 整數常量 所有整數 * 小數常量 所有小數 * 字符常量 …

w3c 跨域請求規范

w3c 官方跨域請求規范地址:https://www.w3.org/TR/cors/ 前段時間開發的一個api在IE8/9瀏覽器不能正常響應跨域請求,以下是解決問題中對跨域請求新的認識 1.復雜跨域 post請求在發送請求之前,會先發送options 請求,有的服務器拒絕…

python爬取豆瓣前25個影片內容的正則表達式練習

通過python正則表達式獲取豆瓣top250的第一頁的25個影片排名,影片名字,影片連接,導演,主演,上映日期,國家,劇情,評分,評價人數的內容 網頁html內容: 1 <ol class"grid_view">2 <li>3 <div class"item">4 …

JavaScript 面向對象的程序設計1

一、理解對象 1.創建一個對象&#xff0c;然后給這個對象新建屬性和方法。 ①常見的創建方式 var person new Object(); //創建一個Object 對象person.name XIE; //創建一個name 屬性并賦值person.age 20; //創建一個age 屬性并賦值person.sayName function () { //創建…

Zookeeper 使用

安裝和配置詳解 本文介紹的 Zookeeper 是以 3.2.2 這個穩定版本為基礎&#xff0c;最新的版本可以通過官網 http://hadoop.apache.org/zookeeper/來獲取&#xff0c;Zookeeper 的安裝非常簡單&#xff0c;下面將從單機模式和集群模式兩個方面介紹 Zookeeper 的安裝和配置。 單…

Asp.Net Core 工作單元 UnitOfWork UOW

Asp.Net Core 工作單元示例 來自 ABP UOW 去除所有無用特性 代碼下載 &#xff1a; 去除所有無用特性版本&#xff0c;原生AspNetCore實現 差不多 2278 行代碼&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1NoEIDSAPNr46xNHYEx9KCA 提取碼&#xff1a;570i 包含C…

網站性能優化--CRP

網站性能優化–CRP 為了把HTML、CSS和JavaScript轉化成活靈活現、絢麗多彩的網頁&#xff0c;瀏覽器需要處理一系列的中間過程&#xff0c;優化性能其實就是了解這個過程中發生了什么-即CRP(Critical Rendering Path&#xff0c;關鍵渲染路徑)。首先&#xff0c;我們從頭開始快…

Dubbo+zookeeper基礎講解

一、dubbo是什么&#xff1f; 1&#xff09;本質&#xff1a;一個Jar包,一個分布式框架,&#xff0c;一個遠程服務調用的分布式框架。 既然是新手教學&#xff0c;肯定很多同學不明白什么是分布式和遠程服務調用&#xff0c;為什么要分布式&#xff0c;為什么要遠程調用。我簡…

What Are You Talking About HDU1075

一開始我也想用map 但是處理不好其他字符。。 看了題解 多多學習&#xff01; 很巧妙 就是粗暴的一個字符一個字符的來 分為小寫字母和非小寫字母兩個部分 一但單詞結束的時候就開始判斷。 #include<bits/stdc.h> using namespace std;int main() {string a,b;map&l…

開通博客第一天

今天是開通博客第一天&#xff0c; 第一次寫博客&#xff0c;也不知道寫什么&#xff0c; 以后寫點技術文&#xff0c;把我的經驗分享給大家&#xff0c; 不對的地方請大家指正&#xff0c;一起進步。我要把我每遇到的難題以及學到的知識和技術為大家踩坑&#xff0c; 做研究。…

學習File API用于前端讀取文件

1. File API簡介 File API對于某些專門的網站的不可或缺的。現在常用它實現對文件的預覽等功能。 File API規定怎么從硬盤上提取文件&#xff0c;直接交給在網頁中運行中的Javascript代碼。然后代碼可以打開文件探究數據&#xff0c;無論是本地文件還是其他文件。注意&#x…

kafka筆記1

Kafka是一款基于發布和訂閱的消息系統。一般被稱為分布式提交日志或分布式流平臺。 Kafka系統是按照一定的順序持久化保存的&#xff0c;可以按需讀取。 Kafka的數據單元被稱為消息。類似于數據庫中表的一行記錄&#xff0c;消息由字節組成&#xff0c;所以沒有特別的格式和含義…

Dubbo入門教程

服務端&#xff08;dubbo-server&#xff09; 1. pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaL…

NSAssert和NSParameterAssert

2016.05.05 18:34* 字數 861 閱讀 5127評論 0喜歡 17https://www.jianshu.com/p/3072e174554fNSAssert和NSParameterAssert在開發環境中經常被使用&#xff0c;調試和驗證代碼參數的完整性&#xff0c;斷言為真&#xff0c;則表明程序運行正常&#xff0c;而斷言為假&#xff0…

【PAT】B1070 結繩(25 分)

此題太給其他25分的題丟人了&#xff0c;只值15分 注意要求最終結果最長&#xff0c;而且向下取整 #include<stdio.h> #include<algorithm> using namespace std; float arr[10005]; int main(){int N;scanf("%d",&N);for(int i0;i<N;i)//輸入數據…

Java代碼實現負載均衡五種算法

前言&#xff1a; 負載均衡是為了解決并發情況下&#xff0c;多個請求訪問&#xff0c;把請求通過提前約定好的規則轉發給各個server。其中有好幾個種經典的算法。在用java代碼編寫這幾種算法之前&#xff0c;先來了解一下負載均衡這個概念。 1.概念 負載&#xff0c;從字面…

使用Nodejs發送郵件

嘗試用了Nodemailer來發送郵件&#xff0c;結果成功了&#xff0c;雖然是相對比較簡單的&#xff0c;但還是記錄一下吧。 Nodemailer 是 Node.js 應用程序的一個模塊&#xff0c;可以方便地發送電子郵件。 使用 # 初始化 pageage.json 文件 $ npm init # 安裝依賴 $ npm ins…

HTTP同源策略

同源策略是web安全策略中的一種&#xff0c;非常重要。 同源策略明確規定&#xff1a;不同域的客戶端在沒有明確授權的情況下&#xff0c;不能讀寫對方的資源。 簡單說來就是web瀏覽器允許第一個頁面的腳本訪問訪問第二個頁面的數據&#xff0c;但是也只有在兩個頁面有相同的…

Spring Cloud 微服務架構

一、分布式服務框架的發展 1.1 第一代服務框架   代表&#xff1a;Dubbo(Java)、Orleans(.Net)等 特點&#xff1a;和語言綁定緊密 1.2 第二代服務框架   代表&#xff1a;Spring Cloud等 現狀&#xff1a;適合混合式開發&#xff08;例如借助Steeltoe OSS可以讓ASP.Ne…

JZOJ 4421. aplusb

4421. aplusb Time Limits: 1000 ms Memory Limits: 524288 KB Detailed Limits Goto ProblemSetDescription SillyHook要給小朋友出題了&#xff0c;他想&#xff0c;對于初學者&#xff0c;第一題肯定是ab 啊&#xff0c;但當他出完數據后神奇地發現.in不見了&#xff0c…