zookeeper集群的安裝


  顧名思義zookeeper就是動物園管理員,他是用來管hadoop(大象)、Hive(蜜蜂)pig(小豬)的管理員, Apache Hbase和 Apache Solr 的分布式集群都用到了zookeeperZookeeper:是一個分布式的、開源的程序協調服務,是hadoop項目下的一個子項目

  一、zookeeper主要功能如下:

  1配置管理

  在我們的應用中除了代碼外,還有一些就是各種配置。比如數據庫連接等。一般我們都是使用配置文件的方式,在代碼中引入這些配置文件。但是當我們只有一種配置,只有一台服務器,並且不經常修改的時候,使用配置文件是一個很好的做法,但是如果我們配置非常多,有很多服務器都需要這個配置,而且還可能是動態的話使用配置文件就不是個好主意了。這個時候往往需要尋找一種集中管理配置的方法,我們在這個集中的地方修改了配置,所有對這個配置感興趣的都可以獲得變更。比如我們可以把配置放在數據庫里,然后所有需要配置的服務都去這個數據庫讀取配置。但是,因為很多服務的正常運行都非常依賴這個配置,所以需要這個集中提供配置服務的服務具備很高的可靠性。一般我們可以用一個集群來提供這個配置服務,但是用集群提升可靠性,那如何保證配置在集群中的一致性呢? 這個時候就需要使用一種實現了一致性協議的服務了。Zookeeper就是這種服務,它使用Zab這種一致性協議來提供一致性。現在有很多開源項目使用Zookeeper來維護配置,比如在HBase中,客戶端就是連接一個Zookeeper,獲得必要的HBase集群的配置信息,然后才可以進一步操作。還有在開源的消息隊列Kafka中,也使用Zookeeper來維護broker的信息。在Alibaba開源的SOA框架Dubbo中也廣泛的使用Zookeeper管理一些配置來實現服務治理。

  2、名字服務

  名字服務這個就很好理解了。比如為了通過網絡訪問一個系統,我們得知道對方的IP地址,但是IP地址對人非常不友好,這個時候我們就需要使用域名來訪問。但是計算機是不能是別域名的。怎么辦呢?如果我們每台機器里都備有一份域名到IP地址的映射,這個倒是能解決一部分問題,但是如果域名對應的IP發生變化了又該怎么辦呢?於是我們有了DNS這個東西。我們只需要訪問一個大家熟知的(known)的點,它就會告訴你這個域名對應的IP是什么。在我們的應用中也會存在很多這類問題,特別是在我們的服務特別多的時候,如果我們在本地保存服務的地址的時候將非常不方便,但是如果我們只需要訪問一個大家都熟知的訪問點,這里提供統一的入口,那么維護起來將方便得多了。

  3、分布式鎖

  其實在第一篇文章中已經介紹了Zookeeper是一個分布式協調服務。這樣我們就可以利用Zookeeper來協調多個分布式進程之間的活動。比如在一個分布式環境中,為了提高可靠性,我們的集群的每台服務器上都部署着同樣的服務。但是,一件事情如果集群中的每個服務器都進行的話,那相互之間就要協調,編程起來將非常復雜。而如果我們只讓一個服務進行操作,那又存在單點。通常還有一種做法就是使用分布式鎖,在某個時刻只讓一個服務去干活,當這台服務出問題的時候鎖釋放,立即fail over到另外的服務。這在很多分布式系統中都是這么做,這種設計有一個更好聽的名字叫Leader Election(leader選舉)。比如HBaseMaster就是采用這種機制。但要注意的是分布式鎖跟同一個進程的鎖還是有區別的,所以使用的時候要比同一個進程里的鎖更謹慎的使用。

  4、集群管理

  在分布式的集群中,經常會由於各種原因,比如硬件故障,軟件故障,網絡問題,有些節點會進進出出。有新的節點加入進來,也有老的節點退出集群。這個時候,集群中其他機器需要感知到這種變化,然后根據這種變化做出對應的決策。比如我們是一個分布式存儲系統,有一個中央控制節點負責存儲的分配,當有新的存儲進來的時候我們要根據現在集群目前的狀態來分配存儲節點。這個時候我們就需要動態感知到集群目前的狀態。還有,比如一個分布式的SOA架構中,服務是一個集群提供的,當消費者訪問某個服務時,就需要采用某種機制發現現在有哪些節點可以提供該服務(這也稱之為服務發現,比如Alibaba開源的SOA框架Dubbo就采用了Zookeeper作為服務發現的底層機制)。還有開源的Kafka隊列就采用了Zookeeper作為Cosnumer的上下線管理。

  二、zookeeper集群安裝

  1.下載安裝包

  http://apache.fayea.com/zookeeper/zookeeper-3.4.6/

  2.解壓壓縮包

  

  3.創建solrclude文件夾,將解壓的zookeeper包拷貝到solrclude文件夾中

  

  4.將zookeeper-3.4.6拷貝到/usr/local/solrcloud下,復制三份分別並將目錄名改為zookeeper1zookeeper2zookeeper3

  

   5.進入zookeeper1文件夾,創建data目錄。並在data目錄中創建一個myid文件內容為“1”(echo 1 >> data/myid)。

  

  6.進入conf文件夾,把zoo_sample.cfg改名為zoo.cfg

  

  7.修改zoo.cfg

 

  dataDir=/usr/local/solrcloud/zookeeper1/data

 

  clientPort=2181zookeeper2中為2182zookeeper3中為2183

 

  添加:

 

  server.1=192.168.198.130:2881:3881

 

  server.2=192.168.198.130:2882:3882

 

  server.3=192.168.198.130:2883:3883

  

  8.對zookeeper23中的設置做第二步至第四步修改。

  zookeeper2

    myid內容為2

    dataDir=/usr/local/solrcloud/zookeeper2/data

    clientPort=2182

  Zookeeper3

    myid內容為3

    dataDir=/usr/local/solrcloud/zookeeper3/data

    clientPort=2183

  9.啟動三個zookeeper,查看狀態

啟動三個zookeeper
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh start
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh start
查看集群狀態:
/usr/local/solrcloud/zookeeper1/bin/zkServer.sh status
/usr/local/solrcloud/zookeeper2/bin/zkServer.sh status
/usr/local/solrcloud/zookeeper3/bin/zkServer.sh status

    

     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM