ZooKeeper學習第二期–ZooKeeper安裝配置
ZooKeeper學習第二期–ZooKeeper安裝配置
一、Zookeeper的搭建方式
Zookeeper安裝方式有三種,單機模式和叢集模式以及偽叢集模式。
■ 單機模式:Zookeeper只執行在一臺伺服器上,適合測試環境;
■ 偽叢集模式:就是在一臺物理機上執行多個Zookeeper 例項;
■ 叢集模式:Zookeeper運行於一個叢集上,適合生產環境,這個計算機叢集被稱為一個“集合體”(ensemble)
Zookeeper通過複製來實現高可用性,只要集合體中半數以上的機器處於可用狀態,它就能夠保證服務繼續。為什麼一定要超過半數呢
1.1 Zookeeper的單機模式搭建
下載ZooKeeper:http://pan.baidu.com/s/1pJlwbR9
解壓: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
clientPort=2181
配置環境變數:為了今後操作方便,我們需要對Zookeeper的環境變數進行配置,方法如下在/etc/profile檔案中加入如下內容:
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=.:
ZOOKEEPER_HOME/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) minSessionTimeout和maxSessionTimeout
即最小的會話超時和最大的會話超時時間。在預設情況下,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) myid和zoo.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安裝配置 一、Zookeeper的搭建方式 Zookeeper安裝方式有三種,單機模式和叢集模式以及偽叢集模式。 ■ 單機模式:Zookeeper只執行在一臺伺服器上,適合測試環
ZooKeeper學習第三期---zookeeper常用配置
基本配置 clientPort 該引數無預設值,必須配置,不支援系統屬性方式配置。引數clientPort用於配置當前伺服器對外的伺服器埠,客戶端會通過該埠和Zookeeper伺服器建立連線,一般設定為2181。每臺Zookeeper伺服器都可以配置任意可用的埠,同時,叢集
ZooKeeper學習第三期---Zookeeper命令操作
一、Zookeeper的四字命令 Zookeeper支援某些特定的四字命令字母與其的互動。他們大多數是查詢命令,用來獲取Zookeeper服務的當前狀態及相關資訊。使用者在客戶端可以通過telnet或nc向Zookeeper提交相應的命令。Zookeeper常用的四字命令見下圖所示。 下圖,是Zoo
ZooKeeper學習第三期—Zookeeper命令操作
ZooKeeper學習第三期—Zookeeper命令操作 一、Zookeeper的四字命令 Zookeeper支援某些特定的四字命令字母與其的互動。他們大多數是查詢命令,用來獲取Zookeeper服務的當前狀態及相關資訊。使用者在客戶端
ZooKeeper學習第一期—Zookeeper簡單介紹
ZooKeeper學習第一期—Zookeeper簡單介紹 一、分散式協調技術 在給大家介紹ZooKeeper之前先來給大家介紹一種技術——分散式協調技術。那麼什麼是分散式協調技術?那麼我來告訴大家,其實分散式協調技術主要用來解決分散式
ZooKeeper學習第二期--ZooKeeper安裝配置
一、Zookeeper的搭建方式 Zookeeper安裝方式有三種,單機模式和叢集模式以及偽叢集模式。 ■ 單機模式:Zookeeper只執行在一臺伺服器上,適合測試環境; ■ 偽叢集模式:就是在一臺物理機上執行多個Zookeeper 例項; ■ 叢集模式:Zookeepe
(轉載)ZooKeeper學習第二期--ZooKeeper安裝配置
[轉載: 鄔興亮 ZooKeeper學習第二期–ZooKeeper安裝配置](http://www.cnblogs.com/wuxl360/p/5817489.html) 一、Zookeeper的搭建方式 Zo
ZooKeeper學習第七期--ZooKeeper一致性原理
一、ZooKeeper 的實現 1.1 ZooKeeper處理單點故障 我們知道可以通過ZooKeeper對分散式系統進行Master選舉,來解決分散式系統的單點故障,如圖所示。 圖 1.1 ZooKeeper解決單點故障 那麼我們繼續分析一下,ZooKeeper通過Master選舉來幫助分散
ZooKeeper學習第八期——ZooKeeper伸縮性
一、ZooKeeper中Observer 1.1 ZooKeeper角色 經過前面的介紹,我想大家都已經知道了在ZooKeeper叢集當中有兩種角色Leader和Follower。Leader可以接受client 請求,也接收其他Server轉發的寫請求,負責更新系統狀態。 Follower也可以接收
ZooKeeper學習第六期---ZooKeeper機制架構
一、ZooKeeper許可權管理機制 1.1 許可權管理ACL(Access Control List) ZooKeeper 的許可權管理亦即ACL 控制功能,使用ACL來對Znode進行訪問控制。ACL的實現和Unix檔案訪問許可非常相似:它使用許可位來對一個節點的不同操作進行允許或禁止的權 限
ZooKeeper學習第五期--ZooKeeper管理分散式環境中的資料
引言 本節本來是要介紹ZooKeeper的實現原理,但是ZooKeeper的原理比較複雜,它涉及到了paxos演算法、Zab協議、通訊協議等相關知 識,理解起來比較抽象所以還需要藉助一些應用場景,來幫我們理解。由於內容比較多,一口氣吃不成胖子,得慢慢來一步一個腳印,因此我對後期 ZooKeeper的學習規
ZooKeeper學習第四期---構建ZooKeeper應用
一、配置服務 配置服務是分散式應用所需要的基本服務之一,它使叢集中的機器可以共享配置資訊中那些公共的部分。簡單地說,ZooKeeper可以作為一個具有高可用性的配置儲存器,允許分散式應用的參與者檢索和更新配置檔案。使用ZooKeeper中的觀察機制,可以建立一個活躍的配置服務,使那些感興趣的客戶端能夠獲得
ZooKeeper學習筆記-CentOS7.5安裝ZooKeeper
ZooKeeper學習筆記-CentOS7.5安裝ZooKeeper 安裝java環境 下載 解壓並配置環境變數 安裝ZooKeeper 下載安裝配置 啟動ZooKeeper ZooKeeper技術交
zookeeper學習(三):配置zookeeper叢集
安裝zookeeper的條件: scp命令可以正常使用,jdk,mysql。 CentOS6.7 zookeeper-3.4.5 (1) 機器部署 安裝到3臺虛擬機器上 安裝好JDK (2) 上傳 上傳用工具。 (3) 解壓 tar -zxvf zookee
zookeeper的簡單介紹及安裝配置
1.zookeeper應用場景 資料釋出與訂閱(配置中心) 負載均衡 命名服務 分散式通知/協調 叢集管理與Master選舉 分散式鎖 分散式佇列 2.zookeeper問題排查大致方向 tickTi
ZooKeeper-3.3.4叢集安裝配置
ZooKeeper分散式模式安裝(ZooKeeper叢集)也比較容易,這裡說明一下基本要點。 首先要明確的是,ZooKeeper叢集是一個獨立的分散式協調服務叢集,“獨立”的含義就是說,如果想使用ZooKeeper實現分散式應用的協調與管理,簡化協調與管理,任何分散式應用都可以使用,這就要歸功於Zookee
ZooKeeper學習第七期–ZooKeeper一致性原理
ZooKeeper學習第七期–ZooKeeper一致性原理 <div class="postBody"> <div id="cnblogs_post_body" class="blogpost-body"><h2
ZooKeeper學習第六期—ZooKeeper機制架構
ZooKeeper學習第六期—ZooKeeper機制架構 一、ZooKeeper許可權管理機制 1.1 許可權管理ACL(Access Control List) ZooKeeper 的許可權管理亦即ACL 控制功能,使用
ZooKeeper學習第五期–ZooKeeper管理分散式環境中的資料
ZooKeeper學習第五期–ZooKeeper管理分散式環境中的資料 引言 本節本來是要介紹ZooKeeper的實現原理,但是ZooKeeper的原理比較複雜,它涉及到了paxos演算法、Zab協議、通訊協議等相關知識,理解起來比較抽
ZooKeeper學習第四期—構建ZooKeeper應用
ZooKeeper學習第四期—構建ZooKeeper應用 一、配置服務 配置服務是分散式應用所需要的基本服務之一,它使叢集中的機器可以共享配置資訊中那些公共的部分。簡單地說,ZooKeeper可以作為一個具有高可用性的配置儲存器,允許分