zookeeper介紹及環境搭建

本文包含兩個部分,首先是對zookeeper的一個簡單介紹,以後會描述zookeeper集羣搭建的詳細過程,爲之後的實驗作準備。linux

zookeeper功能介紹

隨着業務規模發展得愈來愈大,將全部的業務單元所有放到一個計算實體上已經不能知足業務發展的要求。按照不一樣的業務領域或功能職責將整個系統拆分紅多個子系統,各個子系統經過網絡進行協做共同完成一項任務,這就是分佈式系統。
在分佈式系統中,一般將一個計算任務分解成多個計算單元並分派到多個計算機中,而後對各個計算結果進行彙總獲得最終結果。分佈式系統須要解決的核心任務是如何把衆多的計算機協同起來完成計算任務。若是多個計算機之間不能很好的協做,那麼即便增長再多的計算設備,也不會提升計算性能,還可能會產生錯誤的結果。zookeeper能夠幫助咱們解決分佈式系統中的協做問題。
zookeeper是源代碼開放的分佈式協調服務,是一個高性能的分佈式數據一致性解決方案。它將那些複雜的、容易出錯的分佈式一致性服務封裝起來。構成一個可靠的原語集,並提供一系列簡單易用的接口給用戶使用。
zookeeper能夠解決下面這些分佈式數據一致性問題:apache

  1. 順序一致性。zk能夠保證從一個客戶端發起的一系列事務請求,會嚴格按照事務發起的順序被應用到zk服務器中。
  2. 原子性。全部事務請求的處理結果,在整個集羣中全部機器的應用狀況是一致的。
  3. 單一視圖。不管客戶端鏈接的是集羣中的哪一個zk服務器,看到的數據都是同樣的。
  4. 可靠性。一個事務所引發的服務端狀態變動會一直保留下來,直到另一個事務再對其進行修改。
  5. 實時性。zk保證在一段時間內客戶端必定能從服務端讀取到最新的數據狀態。
  6. 高性能。zk具備很高的吞吐量,一個包含3節點的集羣能夠達到12W~13W的QPS。

咱們能夠經過調用zookeeper提供的接口解決分佈式中遇到的實際問題。如:服務器

  1. Naming service:按名稱區分集羣中的節點
  2. Configuration management
  3. Cluster management:實時感知集羣中節點的增減
  4. Leader election
  5. Locking and synchronization
  6. Highly reliable data registry

zookeeper集羣環境搭建

下面我將藉助virtualbox虛擬機,在fedora linux平臺上搭建一個3節點的zk集羣,爲接下來的zookeeper學習作準備。點擊這裏下載zookeeper。
以下圖所示,我用virtualbox構建了三個fedora虛擬機,這三個虛擬機的ip分別是192.168.1.10七、192.168.1.108和192.168.1.109。
圖片描述網絡

經過scp命令將下載好的zookeeper上傳到3個虛擬機服務器中:
圖片描述分佈式

使用命令tar -zxvf zookeeper-3.3.6.tar.gz解壓軟件,並用命令mv zookeeper-3.3.6 zookeeper對解壓後的目錄從新命名。
圖片描述工具

cd進入到zookeeper目錄下的conf目錄中,裏面包含了一個zookeeper的樣例配置文件——zoo_sample.cfg。不要直接修改zoo_sample.cfg的內容,在其基礎上拷貝一份新的文件zoo.cfg做爲zookeeper的配置文件。
圖片描述性能

下面是zookeeper默認配置文件的內容:
圖片描述學習

其中dataDir是zookeeper服務器存儲快照文件的目錄,clientPort是zookeeper服務器對外提供的端口號。其它配置項咱們後續再作解釋。
除了基本的配置項外,要配置zookeeper的集羣,還須要在配置文件中增長全部zk服務器節點的信息。zk服務器節點的配置項格式:server.id=host:aport:bport。其中id是一個整數,表明一個zk服務器的id。host是zk服務器的ip地址。aport是follower服務器和leader服務器的通訊端口。bport是在選舉leader服務器投票過程當中的通訊端口。
我這裏配置的zk集羣共有3個節點,配置信息以下圖所示。其中三臺zk服務器的id分別是一、二、3,follower服務器和leader服務器的通訊端口是2888,選取leader服務器投票時使用的端口是3888。除了增長zk集羣的配置信息外,我還修改了dataDir配置項的目錄地址。
圖片描述spa

完成上述配置以後還要到dataDir配置項指定的目錄中新建一個myid文件,myid文件的內容就是zk集羣配置中指定的服務器id。例如對於192.168.1.109這臺機器,它的id是1,那麼它的myid文件中的內容就是1。另外兩臺機器的myid文件內容分別是2和3。
圖片描述code

如今就已經完成了一個zk集羣的全部配置,能夠啓動zk服務器了。使用zookeeper下bin目錄中的zkServer.sh腳本執行啓動命令。./zkServer.sh start爲啓動zk服務器,./zkServer.sh stop爲中止zk服務器。
圖片描述

爲了驗證zk集羣是否啓動成功,咱們能夠經過telnet這個工具進行驗證,使用它的stat命令能夠查看zk服務器的狀態。
圖片描述

從stat命令的輸出結果中能夠看出,這個zookeeper實例沒有對外提供服務。這是由於咱們的zk集羣中一共有3個節點,可是目前才只啓動了一個節點。如今咱們再啓動另一個zk節點看看執行結果。
圖片描述

我又啓動了另一個zk服務器,如今zk集羣中已經有2個存活的zk服務器節點了。能夠看到stat的輸出結果發生了變化,192.168.1.109這個zk節點已經能夠對外提供服務了。在一個zk集羣中,只要有超過一半的zk節點能夠正常工做,那麼整個集羣就能夠正常對外提供服務。由於咱們這個集羣一共有3臺機器,目前已經有2臺機器正常工做,已經超過了半數,因此整個集羣能夠正常對外提供服務。到此爲止,咱們就配置好了一個簡單的zk集羣。

相關文章
相關標籤/搜索