1. 程式人生 > >ZooKeeper學習筆記-2---ZooKeeper部署與執行

ZooKeeper學習筆記-2---ZooKeeper部署與執行

1.環境配置

系統環境:ZooKeeper對於不同平臺都有良好的支援,可以再目前大多數主流的作業系統上正常執行,例如GUN/Linux、Sun Solaris、Win32以及MacOSX等。有一點需要注意,由於FreeBSD系統的JVM對Java的NIO Selector支援不好,所以不建議在該系統上部署ZooKeeper伺服器。

Java環境:

ZooKeeper使用Java開發,因此執行環境需要對Java環境的支援,建議使用Java1.6或者更高版本。

2.單機模式與叢集模式

ZooKeeper有兩種執行模式:單機模式和叢集模式。以下所有實驗均是在Windows7和Java1.7.0_45環境下進行的。
叢集模式:現在開始搭建包含3臺機器的ZooKeeper叢集。
2-1.準備好3臺互相聯網的Window7機器,設定他們的IP地址分別是IP1、IP2、IP3。
2-2.配置Java執行環境,確保已經安裝Java1.6或者更高版本的JDK。
2-3.下載ZooKeeper安裝包。下載地址是:

http://www.apache.org/dyn/closer.cgi/zookeeper/,建議下載stable版本。本次搭建ZooKeeper下載的是zookeeper-3.4.9.tar.gz,解壓後文件目錄結構如下圖:
這裡寫圖片描述
2-4.配置檔案zoo.cfg。初次使用ZooKeeper,開啟目錄下的conf資料夾,將目錄下zoo_sample.cfg檔案重新命名為zoo.cfg,並按照如下程式碼進行簡單配置:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.0=IP1:2888:3888    
server.1=IP2:2888:3888    
server.2=IP3:2888:3888 

2-5.建立myid檔案。在zoo.cfg配置的dataDir目錄下建立一個名為myid的檔案。該檔案的第一行寫上一個數字,要和zoo.cfg當前機器的編號對應上。myid檔案中只有一個數字,即一個ServerID。例如server.0的myid檔案內容就是0。有一點需要特別注意的是每個伺服器的myid數字必須不同,並且要和自己所在機器的ServerID一致,另外id的取值範圍是1到255。
2-6.按照上述步驟,配置其他幾臺機器的zoo.cfg和myid檔案。
2-7.開啟bin資料夾下的zkServer.cmd,啟動伺服器。啟動成功後如下圖所示:
這裡寫圖片描述
單機模式:一般情況下,沒有很多機器可用作叢集開發,ZooKeeper提供單機部署模式,可用來解決這個問題。只要啟動一臺ZooKeeper伺服器,就可以正常提供服務了。其實單機模式就是一種特殊的叢集模式—即只有一臺機器的叢集。單機模式的配置與叢集模式的配置基本一致,只是在稍稍修改zoo.cfg檔案即可。單機模式配置檔案zoo.cfg如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181

偽叢集模式:除了上述介紹的單機模式和叢集模式,ZooKeeper還支援偽叢集模式。應用場景是你有一臺效能非常好的叢集,如果用作單機模式部署,有點浪費資源,於是ZooKeeper支援在一臺機器上完成偽叢集的搭建。所謂偽叢集,就是叢集的所有機器都在一臺物理機器上,但是還是以叢集的方式進行配置及對外提供服務。這種偽叢集模式的配置與叢集模式類似,zoo.cfg檔案修改如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.0=IP1:2888:3888    
server.1=IP1:2888:3888    
server.2=IP1:2888:3888 

3.執行ZooKeeper服務

啟動ZooKeeper服務的方式有兩種:Java命令列與ZooKeeper自帶的啟動指令碼。這裡使用ZooKeeper自帶的啟動指令碼來啟動服務。ZooKeeper的bin目錄資料夾下,如下圖所示,可以使用這些指令碼來完成啟動和停止ZooKeeper服務。
這裡寫圖片描述
簡單的介紹一下每個可執行指令碼的功能:
zkCleanup—清理ZooKeeper歷史資料,包括事物日誌檔案和快照資料檔案。
zkCli—ZooKeeper的一個簡易客戶端。
zkEnv—設定ZooK的環境變數。
zkServer—ZooKeeper服務的啟動、停止和重啟指令碼。

4.常見異常

4-1.埠被佔用
這裡寫圖片描述
java.net.BindException: Address already in use這個異常時在Java開發中經常遇見,導致這個異常的通常是因為2181埠被其他程式佔用了。兩個解決方法,一是停掉使用該埠的程序,而是修改zoo.cfg檔案,可以講埠設定為2080。

4-2磁碟沒有剩餘空間
這裡寫圖片描述
該異常可以出現ZooKeeper的啟動過程中,也可以出現在ZooKeeper的正常執行過程中,一旦出現這個異常,ZooKeeper會立即執行FailOver策略,從而退出程序。遇到這個問題,通常的做法就是清理磁碟。當然為了避免再次遇到此類問題,需要加上對ZooKeeper機器的磁碟使用量監控和ZooKeeper日誌的自動清理。

4-3無法找到myid檔案
這裡寫圖片描述
對於這個錯誤,只需要在資料目錄下建立好一個myid檔案即可。

4-4叢集中其他機器Leader選舉埠未開啟
這裡寫圖片描述
這裡寫圖片描述
在叢集模式部署下伺服器逐臺啟動過程中,會出現以上異常。這是由於在啟動過程中,雖然當前機器啟動了,但是其他機器沒有完成啟動,因此無法和其他機器在對應的埠進行連線。對與這個問題,只需要快速啟動叢集中的其他機器即可。另外,異常中標明3888埠無法建立連線,這是因為ZooKeeper預設使用3888埠進行Leader選舉中的投票通訊。

相關推薦

ZooKeeper學習筆記-2---ZooKeeper部署執行

1.環境配置 系統環境:ZooKeeper對於不同平臺都有良好的支援,可以再目前大多數主流的作業系統上正常執行,例如GUN/Linux、Sun Solaris、Win32以及MacOSX等。有一點需要注意,由於FreeBSD系統的JVM對Java的NIO Se

Zookeeper學習筆記五之監控通知

監控與通知 Zookeeper通常以遠端服務的方式被訪問,如果每次訪問znode時,客戶端都需要獲得節點中的內容。這樣的代價就非常大。因為這樣會導致更高的延遲,而且Zookeeper需要做更多的操作,例如下圖中,第二次呼叫getChildren /tasks返回了相同的值,

Java學習筆記2(輸入隨機數簡單介紹)

args image public 數據類型 system double next class gpo 輸入: import java.util.Scanner; public class ScannerDemo{   public static void main(Str

c學習筆記--2變數型別基本操作

好久之前的了,學習c語言的筆記。 依舊是老套路,從基礎的變數型別,到函式定義一步步學起 #include <stdio.h> #include <string.h> //c語言的變數型別與基本操作 void test2() { //數

菜鳥SpringMVC學習筆記2——@SessionAttributes註解@RequestMapping

Session與Request區別在於,springMVC處理時,將資料放在哪個程序裡。 在瀏覽器呼叫時,會出現區別,一旦弄錯,就會獲取不到資料。 先模擬一個取資料的一個實現。 假裝USER模型是資料庫中的資料,我模擬user屬性如下: packag

loadrunner學習筆記-場景計劃方式執行模式

手工場景-計劃方式scenario :多個指令碼之間按照設定的場景計劃來統一執行。group : 多個指令碼之間按照獨立設定模式跑,各個指令碼可以單獨設定虛擬使用者,執行時間等手工執行場景-執行模式real - world schedule (實際計劃)可以通過add  ac

Kotlin學習筆記2 : 變數常量基本資料型別

一:繼承與類與方法定義: (1)繼承用一個英文冒號: extends---> : 預設的類是不可以被繼承的,只能繼承宣告為open或者abstract的類 open class Person (name: String , surname: String) { } (

llvm 學習筆記 2 : 新增 Pass 除錯

在BackendUtil.cpp 的 void EmitAssemblyHelper::EmitAssembly 函式中, if (PerFunctionPasses)  條件後 new 了自帶的 Hello pass. 重新 make 時發生以下錯誤 make[4]:

Bootstrap學習筆記2——BoostrapTable下載簡單運用

這段時間主要在Bootstrap各個元件上進行學習,通過翻閱官方API(中文文件,英文我也看不懂啦)進行簡單的Demo實操。當然,這期間我也尋找了一些元件基於Bootstrap的好用外掛,今天給大家帶來一個表格元件的外掛Bootstrap Table的簡單運用介紹,詳細內容

java大資料最全課程學習筆記(2)--Hadoop完全分散式執行模式

> 目前[CSDN](https://blog.csdn.net/weixin_42208775),[部落格園](https://home.cnblogs.com/u/gitBook/),[簡書](https://www.jianshu.com/u/da41700fde04)同步發表中,更多精彩歡迎訪問

RT-Thread學習筆記1-啟動順序執行緒建立

[toc] *** ## 1. 啟動順序 1. SystemInit() 2. $Sub$$main() 3. rtthread_startup() 4. rt_application_init() 5. main_thread_entry 6. $Super$$main使用者主函式 ## 2. 堆範圍 自

RT-Thread學習筆記2-互斥量訊號量

[toc] *** ## 1. 臨界區保護 臨界區是僅允許一個執行緒訪問的共享資源。它可以是一個具體的硬體裝置,也可以是一個變數、一個緩衝區。多個執行緒必須互斥的對他們進行訪問 ### 1.1 方法一:關閉系統排程保護臨界區 禁止排程 ``` /* 排程器商鎖,上鎖後不再切換到其他執行緒,僅響應中斷 */

zookeeper學習筆記(一)--快速入門叢集部署

一、分散式系統面臨的挑戰 什麼是分散式 分散式的特點 分散式技術 分散式面臨的問題   程序與程序之間 一、單體架構 Jvm內部呼叫 單點故障 二、叢集架構 分散式session問題》session c

Jmeter學習筆記2-原件作用域執行順序

校驗 height sse proc tro 有效 收集 技術分享 控制 1.元件的作用域 (1)配置元件(config elements):會影響其作用範圍內的所有元件。 (2)前置處理程序(per-processors):在其作用範圍內的每一個sampler元件之

ZooKeeper部署執行

     這篇博文主要介紹一下通過單機和叢集兩種方式部署一個ZooKeeper,以及如何將其順利的執行起來。      一、系統環境      通常對Java開源產品而言,在部署與執行之

Zookeeper學習筆記十二之 網路配置叢集配置

網路配置 這些配置引數可以限制伺服器和客戶端之間的通訊 zookeeper.globalOutstandingLimit: ZooKeeper中待處理請求的最大值,ZooKeeper客戶端提交請求比ZooKeeper伺服器處理請求要快很多,服務端將會對接收到的請求佇列化

ZooKeeper原始碼學習筆記(2)--Standalone模式下的ZooKeeper

Server入口 Server的啟動程式碼位於 zkServer.sh 檔案中。 zkServer.sh指令碼同 /etc/init.d/ 中的啟動指令碼比較類似,都是通過shell的case命令解析指令執行。具體指令如下: 1. start: 通過n

Zookeeper 學習筆記之 節點個數

容災 2個 工作 不必要 ade 為什麽 per 正常 lead zookeeper的節點配置的個數推薦是奇數個這是為什麽呢? 選舉機制 兩種情況無法選出leader: 整個集群只有2臺服務器(註意不是只剩2臺,而是集群的總節點數為2) 整個集群超過半數機器掛掉。

Kafka 學習筆記ZooKeeper作用

9.png lec 管理 信息 發現 ges ima cti http Kafka使用ZooKeeper 配置管理 Leader Election 服務發現 首先進入ZooKeeper客戶端: ls / 可以看到有以下節點: 查看Topic 配置信息:體現了ZooK

Zookeeper 學習筆記之 Leader Election

通知 客戶 就會 lec 搶占式 類型 二次 lead per ZooKeeper四種節點類型: Persist Persist_Sequential Ephemeral Ephemeral_Sequential 在節點上可註冊的Watch,客戶端先得到通知再得到數據,