1. 程式人生 > >(轉載)ZooKeeper學習第二期--ZooKeeper安裝配置

(轉載)ZooKeeper學習第二期--ZooKeeper安裝配置

[轉載: 鄔興亮 ZooKeeper學習第二期–ZooKeeper安裝配置](http://www.cnblogs.com/wuxl360/p/5817489.html)

一、Zookeeper的搭建方式

Zookeeper安裝方式有三種,單機模式叢集模式以及偽叢集模式

單機模式:Zookeeper只執行在一臺伺服器上,適合測試環境;
 偽叢集模式:就是在一臺物理機上執行多個Zookeeper 例項;
 叢集模式:Zookeeper運行於一個叢集上,適合生產環境,這個計算機叢集被稱為一個“集合體”(ensemble)

Zookeeper通過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。為什麼一定要超過半數呢?這跟Zookeeper的複製策略有關:zookeeper確保對znode 樹的每一個修改都會被複制到集合體中超過半數的機器上。

1.1 Zookeeper的單機模式搭建

解壓tar -zxvf zookeeper-3.4.5.tar.gz 重新命名mv zookeeper-3.4.5 zk

配置檔案:在conf目錄下刪除zoo_sample.cfg檔案,建立一個配置檔案zoo.cfg。

tickTime=2000
dataDir=/usr/local/zk/data
dataLogDir=/usr/local/zk/dataLog        
clientPort=2181

配置環境變數:為了今後操作方便,我們需要對Zookeeper的環境變數進行配置,方法如下在/etc/profile檔案中加入如下內容:

export ZOOKEEPER_HOME=/usr/local/zk
export PATH=.:

HADOOPHOME/bin:ZOOKEEPER_HOME/bin:JAVAHOME/bin:PATH

啟動ZooKeeper的Server:zkServer.sh start;關閉ZooKeeper的Server:zkServer.sh stop

1.2 Zookeeper的偽叢集模式搭建

Zookeeper不但可以在單機上執行單機模式Zookeeper,而且可以在單機模擬叢集模式 Zookeeper的執行,也就是將不同節點執行在同一臺機器。我們知道偽分佈模式下Hadoop的操作和分散式模式下有著很大的不同,但是在叢集為分佈 式模式下對Zookeeper的操作卻和叢集模式下沒有本質的區別。顯然,叢集偽分散式模式為我們體驗Zookeeper和做一些嘗試性的實驗提供了很大 的便利。比如,我們在實驗的時候,可以先使用少量資料在叢集偽分佈模式下進行測試。當測試可行的時候,再將資料移植到叢集模式進行真實的資料實驗。這樣不 但保證了它的可行性,同時大大提高了實驗的效率。這種搭建方式,比較簡便,成本比較低,適合測試和學習,如果你的手頭機器不足,就可以在一臺機器上部署了 3個server。

1.2.1. 注意事項

在一臺機器上部署了3個server,需要注意的是在叢集為分散式模式下我們使用的每個配置文件模擬一臺機器,也就是說單臺機器及上執行多個Zookeeper例項。但是,必須保證每個配置文件的各個埠號不能衝突,除了clientPort不同之外,dataDir也不同。另外,還要在dataDir所對應的目錄中建立myid檔案來指定對應的Zookeeper伺服器例項。

■ clientPort埠:如果在1臺機器上部署多個server,那麼每臺機器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183

■ dataDir和dataLogDir:dataDir和dataLogDir也需要區分下,將資料檔案和日誌檔案分開存放,同時每個server的這兩變數所對應的路徑都是不同的

■ server.X和myid: server.X 這個數字就是對應,data/myid中的數字。在3個server的myid檔案中分別寫入了0,1,2,那麼每個server中的zoo.cfg都配 server.0 server.2,server.3就行了。因為在同一臺機器上,後面連著的2個埠,3個server都不要一樣,否則埠衝突

下面是我所配置的叢集偽分佈模式,分別通過zoo1.cfg、zoo2.cfg、zoo3.cfg來模擬由三臺機器的Zookeeper叢集,程式碼清單 zoo1.cfg如下:

複製程式碼
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/usr/local/zk/data_1 # the port at which the clients will connect clientPort=2181 #the location of the log file dataLogDir=/usr/local/zk/logs_1 server.0=localhost:2287:3387 server.1=localhost:2288:3388 server.2=localhost:2289:3389 複製程式碼

程式碼清單  zoo2.cfg如下:

複製程式碼
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/usr/local/zk/data_2 # the port at which the clients will connect clientPort=2182 #the location of the log file dataLogDir=/usr/local/zk/logs_2 server.0=localhost:2287:3387 server.1=localhost:2288:3388 server.2=localhost:2289:3389 複製程式碼

程式碼清單 zoo3.cfg如下:

複製程式碼
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/usr/local/zk/data_3 # the port at which the clients will connect clientPort=2183 #the location of the log file dataLogDir=/usr/local/zk/logs_3 server.0=localhost:2287:3387 server.1=localhost:2288:3388 server.2=localhost:2289:3389 複製程式碼

1.2.2 啟動

在叢集為分散式下,我們只有一臺機器,按時要執行三個Zookeeper例項。此時,如果在使用單機模式的啟動命令是行不通的。此時,只要通過下面三條命令就能執行前面所配置的Zookeeper服務。如下所示:

zkServer.sh start zoo1.sh
zkServer.sh start zoo2.sh
zkServer.sh start zoo3.sh

啟動過程,如下圖所示:

 啟動結果,如下圖所示:

在執行完第一條指令之後,會出現一些錯誤異常,產生異常資訊的原因是由於Zookeeper 服務的每個例項都擁有全域性配置資訊,他們在啟動的時候會隨時隨地的進行Leader選舉操作。此時,第一個啟動的Zookeeper需要和另外兩個 Zookeeper例項進行通訊。但是,另外兩個Zookeeper例項還沒有啟動起來,因此就產生了這的異樣資訊。我們直接將其忽略即可,待把圖中“2 號”和“3號”Zookeeper例項啟動起來之後,相應的異常資訊自然會消失。此時,可以通過下面三條命令,來查詢。

 zkServer.sh status zoo1.cfg
 zkServer.sh status zoo2.cfg
 zkServer.sh status zoo3.cfg

Zookeeper服務的執行狀態,如下圖所示:

 

1.3  Zookeeper的叢集模式搭建

為了獲得可靠地Zookeeper服務,使用者應該在一個機群上部署Zookeeper。只要機群上大多數的Zookeeper服務啟動了,那麼總的 Zookeeper服務將是可用的。叢集的配置方式,和前兩種類似,同樣需要進行環境變數的配置。在每臺機器上conf/zoo.cf配置檔案的引數設定 相同

1.3.1 建立myid

在dataDir(/usr/local/zk/data)目錄建立myid檔案

Server0機器的內容為:0
Server1機器的內容為:1
Server2機器的內容為:2

1.3.2 編寫配置檔案

在conf目錄下刪除zoo_sample.cfg檔案,建立一個配置檔案zoo.cfg,如下所示,程式碼清單  zoo.cfg中的引數設定

複製程式碼
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial # synchronization phase can take initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. dataDir=/usr/local/zk/data # the port at which the clients will connect clientPort=2183 #the location of the log file dataLogDir=/usr/local/zk/log server.0=hadoop:2288:3388 server.1=hadoop0:2288:3388 server.2=hadoop1:2288:3388 複製程式碼

1.3.3 啟動

分別在3臺機器上啟動ZooKeeper的Server:zkServer.sh start;

二、Zookeeper的配置

Zookeeper的功能特性是通過Zookeeper配置檔案來進行控制管理的(zoo.cfg).這樣的設計其實有其自身的原因,通過前面對Zookeeper的配置可以看出,在對Zookeeper叢集進行配置的時候,它的配置文件是完全相同的。叢集偽分佈模式中,有少部分是不同的。這樣的配置方式使得在部署Zookeeper服務的時候非常方便。如果伺服器使用不同的配置檔案,必須確保不同配置檔案中的伺服器列表相匹配。

在設定Zookeeper配置文件時候,某些引數是可選的,某些是必須的。這些必須引數就構成了Zookeeper配置文件的最低配置要求。另外,若要對Zookeeper進行更詳細的配置,可以參考下面的內容。

2.1 基本配置

下面是在最低配置要求中必須配置的引數:

(1) client:監聽客戶端連線的埠。
(2) tickTime:基本事件單元,這個時間是作為Zookeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,每隔tickTime時間就會發送一個心跳;最小 的session過期時間為2倍tickTime   
dataDir:儲存記憶體中資料庫快照的位置,如果不設定引數,更新食物的日誌將被儲存到預設位置。

應該謹慎的選擇日誌存放的位置,使用專用的日誌儲存裝置能夠大大提高系統的效能,如果將日誌儲存在比較繁忙的儲存裝置上,那麼將會很大程度上影像系統性能。

2.2 高階配置

下面是高階配置引數中可選配置引數,使用者可以使用下面的引數來更好的規定Zookeeper的行為:

(1) dataLogdDir

這個操作讓管理機器把事務日誌寫入“dataLogDir”所指定的目錄中,而不是“dataDir”所指定的目錄。這將允許使用一個專用的日誌裝置,幫助我們避免日誌和快照的競爭。配置如下:

# the directory where the snapshot is stored
   dataDir=/usr/local/zk/data 

(2) maxClientCnxns

這個操作將限制連線到Zookeeper的客戶端數量,並限制併發連線的數量,通過IP來區分不同的客戶端。此配置選項可以阻止某些類別的Dos攻擊。將他設定為零或忽略不進行設定將會取消對併發連線的限制。

例如,此時我們將maxClientCnxns的值設為1,如下所示:

# set maxClientCnxns
   maxClientCnxns=1

啟動Zookeeper之後,首先用一個客戶端連線到Zookeeper伺服器上。之後如果有第二個客戶端嘗試對Zookeeper進行連線,或者有某些隱式的對客戶端的連線操作,將會觸發Zookeeper的上述配置。

(3) minSessionTimeoutmaxSessionTimeout

即最小的會話超時和最大的會話超時時間。在預設情況下,minSession=2*tickTime;maxSession=20*tickTime。

2.3 叢集配置

(1) initLimit

此配置表示,允許follower(相對於Leaderer言的“客戶端”)連線並同步到Leader的初始化連線時間,以tickTime為單位。當初始化連線時間超過該值,則表示連線失敗。

(2) syncLimit

此配置項表示Leader與Follower之間傳送訊息時,請求和應答時間長度。如果follower在設定時間內不能與leader通訊,那麼此follower將會被丟棄。

(3) server.A=B:C:D

A:其中 A 是一個數字,表示這個是伺服器的編號;
B:是這個伺服器的 ip 地址;
C:Leader選舉的埠;
D:Zookeeper伺服器之間的通訊埠。

(4) myidzoo.cfg

除了修改 zoo.cfg 配置檔案,叢集模式下還要配置一個檔案 myid,這個檔案在 dataDir 目錄下,這個檔案裡面就有一個數據就是 A 的值,Zookeeper 啟動時會讀取這個檔案,拿到裡面的資料與 zoo.cfg 裡面的配置資訊比較從而判斷到底是那個 server。

三、搭建ZooKeeper伺服器叢集

搭建要求:

(1) zk伺服器叢集規模不小於3個節點
(2) 要求各伺服器之間系統時間要保持一致。

3.1 安裝配置ZK

(1) 使用WinScp將Zk傳輸到Hadoop主機上的/usr/local,我用的版本是zookeeper-3.4.5.tar.gz。

(2) 在hadoop的/usr/local目錄下,解壓縮zk….tar.gz,設定環境變數

 解壓縮:在/usr/local目錄下,執行命令:tar -zxvf zookeeper-3.4.5.tar.gz,如下圖所示:

重新命名:解壓後將資料夾,重新命名為zk,執行命令: mv zookeeper-3.4.5 zk,如下圖所示:

相關推薦

轉載ZooKeeper學習第二--ZooKeeper安裝配置

[轉載: 鄔興亮 ZooKeeper學習第二期–ZooKeeper安裝配置](http://www.cnblogs.com/wuxl360/p/5817489.html) 一、Zookeeper的搭建方式 Zo

ZooKeeper學習第二--ZooKeeper安裝配置

一、Zookeeper的搭建方式 Zookeeper安裝方式有三種,單機模式和叢集模式以及偽叢集模式。 ■ 單機模式:Zookeeper只執行在一臺伺服器上,適合測試環境; ■ 偽叢集模式:就是在一臺物理機上執行多個Zookeeper 例項; ■ 叢集模式:Zookeepe

轉載ZooKeeper學習第一---Zookeeper簡單介紹

一、分散式協調技術 在給大家介紹ZooKeeper之前先來給大家介紹一種技術——分散式協調技術。那麼什麼是分散式協調技術?那麼我來告訴大家,其實分散式協調技術 主要用來解決分散式環境當中多個程序之間的同步控制,讓他們有序的去訪問某種臨界資源,防止造成”髒資料”的後果。這時,有人可能會說這個簡單,寫一個調 度

ZooKeeper學習第一---Zookeeper簡單介紹

ted 命名空間 不同之處 分布式系統 ast margin .html 為我 找到 一、分布式協調技術 在給大家介紹ZooKeeper之前先來給大家介紹一種技術——分布式協調技術。那麽什麽是分布式協調技術?那麽我來告訴大家,其實分布式協調技術主要用來解決分布式環境當中多

轉載Actor 生命周

函數 con advance tsp dup kobject 整潔 行程 多個 Actor 生命周期 本頁面的內容: 生命周期詳解 從磁盤加載 Play in Editor 生成 延遲生成 生命走向終點 在遊戲進程中 垃圾回收 高級垃圾回收 此文檔是

轉載深度學習基礎1——感知器

原文地址:https://zybuluo.com/hanbingtao/note/581764 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!! 深度學習是什麼?   在人工智慧領域,有一個方法叫機器學習。在機器學習這個方法裡,有一類演算法叫神經網路。神經網路如下圖所示:   上圖的每

轉載深度學習基礎3——神經網路和反向傳播演算法

原文地址:https://www.zybuluo.com/hanbingtao/note/476663 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在上一篇文章中,我們已經掌握了機器學習的基本套路,對模型、目標函式、優化演算法這些概念有了一定程度的理解,而且已經會訓練單個的感知器或者

轉載Numpy學習1——陣列填充np.pad()函式的應用

  【時間】2018.11.02 【題目】(轉載)Numpy學習——陣列填充np.pad()函式的應用 概述 本文轉載自 http://www.th7.cn/Program/Python/201712/1284487.shtml ,主要講述了陣

轉載深度學習基礎7——遞迴神經網路

原文地址:https://zybuluo.com/hanbingtao/note/626300 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在前面的文章中,我們介紹了迴圈神經網路,它可以用來處理包含序列結構的資訊。然而,除此之外,資訊往往還存在著諸如樹結構、圖結構等更復雜的結構。對於

轉載深度學習2——線性單元和梯度下降

原文地址:https://www.zybuluo.com/hanbingtao/note/448086 轉載在此的目的是自己做個筆記,日後好複習,如侵權請聯絡我!!   在上一篇文章中,我們已經學會了編寫一個簡單的感知器,並用它來實現一個線性分類器。你應該還記得用來訓練感知器的『感知器規則』。然而,我們並沒有

ElasticSearch筆記整理:簡介、REST與安裝配置

大數據 ElasticSearch ELK [TOC] ElasticSearch簡介 ElasticSearch是一款基於Apache Lucene構建的開源搜索引擎,它采用Java編寫並使用Lucene構建索引、提供搜索功能,ElasticSearch的目標是讓全文搜索變得簡單,開發者可以通

Linux下Hadoop2以上版本安裝配置

Linux下Hadoop2以上版本安裝配置 對於初學者的我來說,不適用linux命令配置hadoop,所以用的是linux桌面,這是我還不容易配置成功的一次,趕快記錄下來: 確認IP是否設定正常 安裝 VM tools 安裝hadoop 配置環境變數 Ha

k8s1.4.3安裝實踐記錄1-etcd、docker、flannel安裝配置

由於剛開始學習k8s,本次軟體的安裝,我們都採用最簡單的方式,能用yum 安裝的儘量採用yum安裝 1、ETCD安裝 ETCD官方文件:https://github.com/coreos/etcd/blob/master/Documentation/docs.md

Day16.高效能RPC設計 學習筆記4 - Zookeeper轉載

Zookeeper ZooKeeper 是一個為分散式應用所設計的分佈的、開源的協調服務。可以解決分散式應用中出現常規問題: 同步配置、選舉、分散式鎖、服務命名分組,記住這些問題雖然zookeeper可以幫助使用者解決,並不意味著使用者不需要寫程式碼。使用者如果想使用zookeepe

ZookeeperZookeeper底層客戶端架構實現原理轉載

一次 描述 綁定 機制 一個 ini fin 源碼 receive Zookeeper的Client直接與用戶打交道,是我們使用Zookeeper的interface。了解ZK Client的結構和工作原理有利於我們合理的使用ZK,並能在使用中更早的發現問題。本文將在研究源

第二篇:基於深度學習的人臉特徵點檢測 - 資料與方法轉載

https://yinguobing.com/facial-landmark-localization-by-deep-learning-data-and-algorithm/ 在上一篇博文中,我們瞭解了人臉檢測與面部特徵點檢測的背景,並提到了當前技術方案存在特徵點位置不穩定的缺點,需要新的解決

Oracle學習筆記—Db_name、Db_domain、Global_name、Service_name、Instance_name和Oracle_SID轉載

安全 文件中 分布 好處 避免 名稱 detail 數據庫安全 自動 轉載自: Oracle中DB_NAME,SID,DB_DOMAIN,SERVICE_NAME等之間的區別 Db_name:對一個數據庫(Oracle database)的唯一標識。這種表示對於單個數據

機器學習入門之四:機器學習的方法-神經網絡轉載

轉載 bsp 圖像 src nbsp 加速 數值 str 我們   轉自 飛鳥各投林   神經網絡      神經網絡(也稱之為人工神經網絡,ANN)算法是80年代機器學習界非常流行的算法,不過在90年代中途衰落。現在,攜著“深度學習”之勢,神

Dubbo學習配置轉載

ext.get 訂閱 這樣的 內存 com 消費者 list() 增加 引用 轉載自: 簡單了解下Dubbo 1. Dubbo是什麽? Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服

機器學習算法基礎概念學習總結轉載

原則 不清楚 tof 條件 cnblogs 偽代碼 相關關系 什麽 最近鄰   來源:lantian0802的專欄   blog.csdn.net/lantian0802/article/details/38333479      一、基礎概念