1. 程式人生 > >ZooKeeper叢集部署詳解

ZooKeeper叢集部署詳解


一、ZooKeeper簡介

ZooKeeper是一個分散式的,開放原始碼的協調服務,是Chubby一個開源的實現,是HadoopHbase的重要元件。ZooKeepe提供了協調分散式應用的基本服務,它向外部應用暴露一組通用服務——分散式同步(Distributed Synchronization)、命名服務(NamingService)、叢集維護(Group Maintenance)等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的介面和效能高效、功能穩定的系統提供給使用者。ZooKeeper包含一個簡單的原語集,提供JavaC的介面。ZooKeeper程式碼版本中,提供了分散式獨享鎖、選舉、佇列的介面,程式碼在

zookeeper-3.4.8\src\recipes。其中分佈鎖和佇列有JavaC兩個版本,選舉只有Java版本。ZooKeeper本身可以以Standalone模式安裝執行,不過它更強大之處在於通過分散式ZooKeeper叢集(一個Leader和多個Follower),基於一定的策略來保證ZooKeeper叢集的穩定性和可用性,從而實現分散式應用的可靠性。

二、ZooKeeper Standalone模式(ZooKeeper獨立式)

首先我們從Apache官網http://zookeeper.apache.org/下載ZooKeeper軟體包,我們以版本3.4.8(zookeeper-3.4.8.tar.gz)為例子,單獨一臺伺服器部署非常簡單,只需要解壓縮後,簡單配置一下即可以啟動ZooKeeper伺服器程序。

將zookeeper-3.4.8/conf目錄下面的zoo_sample.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.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/usr/local/zookeeper-3.4.8/conf

# the port at which the clients will connect

clientPort=2181

# the maximum number of client connections.

# increase this if you need to handle more clients

#maxClientCnxns=60

各個引數的含義上邊都有註釋,大家可以理解下。

下面啟動ZooKeeper伺服器程序:

cd /usr/local/zookeeper-3.4.8/bin
zkServer.shstart

通過jps命令可以檢視ZooKeeper伺服器程序,名稱為QuorumPeerMain。

在客戶端連線ZooKeeper伺服器,命令如下:

zkCli.sh-server kinder:2181

上面kinder為主機名,如果在本機執行,則可執行如下命令:

zkCli.sh

可檢視客戶端連線資訊。

可使用help檢視Zookeeper客戶端的基本操作命令。

三、ZooKeeper Distributed模式(ZooKeeper分散式)

ZooKeeper的分散式部署也稱叢集部署,也相對的簡單。

ZooKeeper叢集是一個獨立的分散式協調服務叢集,“獨立”的含義就是說,如果想使用ZooKeeper實現分散式應用的協調與管理,簡化協調與管理,任何分散式應用都可以使用,這就要歸功於Zookeeper的資料模型(DataModel)和層次名稱空間(HierarchicalNamespace)結構。詳細可以參考:

http://zookeeper.apache.org/doc/trunk/zookeeperOver.html

在設計分散式應用協調服務時,首要的就是考慮如何組織層次名稱空間。

下面說明分散式模式的安裝配置,過程如下所示:

第一步:主機名稱到IP地址對映配置

ZooKeeper叢集中具有兩個關鍵的角色:Leader和Follower。叢集中所有的結點作為一個整體對分散式應用提供服務,叢集中每個結點之間都互相連線,所以,在配置的ZooKeeper叢集的時候,每一個結點的host到IP地址的對映都要配置上叢集中其它結點的對映資訊。

例如,ZooKeeper叢集中每個結點的配置,以zoo1為例,/etc/hosts內容如下所示:

192.168.1.111 zoo1
192.168.1.112 zoo2
192.168.1.113 zoo3
192.168.1.114 zoo4
192.168.1.115 zoo5

ZooKeeper採用一種稱為Leaderelection的選舉演算法。在整個叢集執行過程中,只有一個Leader,其他的都是Follower,如果ZooKeeper叢集在執行過程中Leader出了問題,系統會採用該演算法重新選出一個Leader。因此,各個結點之間要能夠保證互相連線,必須配置上述對映。

ZooKeeper叢集啟動的時候,會首先選出一個Leader,在Leaderelection過程中,某一個滿足選舉算的結點就能成為Leader。整個叢集的架構可以參考:

第二步:修改ZooKeeper配置檔案

先在一臺機器zoo1上,解壓縮zookeeper-3.4.8.tar.gz,修改配置檔案conf/zoo.cfg,內容如下所示:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.8/conf
server.1=zoo1:2888:3888 
server.2=zoo2:2888:3888 
server.3=zoo3:2888:3888
server.4=zoo4:2888:3888 
server.5=zoo5:2888:3888
clientPort=2181

上述配置內容說明,可以參考:

第三步:遠端複製分發安裝檔案

上面已經在一臺機器zoo1上配置完成ZooKeeper,現在可以將該配置好的安裝檔案遠端拷貝到叢集中的各個結點對應的目錄下:

cd /usr/local
scp -rzookeeper-3.4.8/ [email protected]:/usr/local/
scp -rzookeeper-3.4.8/ [email protected]:/usr/local/
scp -rzookeeper-3.4.8/ [email protected]:/usr/local/
scp -rzookeeper-3.4.8/ [email protected]:/usr/local/

第四步:設定myid

在我們配置的dataDir指定的目錄下面,建立一個myid檔案,裡面內容為一個數字,用來標識當前主機,conf/zoo.cfg檔案中配置的server.X中X為什麼數字,則myid檔案中的內容就是什麼數字。比如zoo1中myid內容為1,zoo2中myid內容為2 …

第五步:啟動ZooKeeper叢集

在ZooKeeper叢集的每個結點上,執行啟動ZooKeeper服務的指令碼:

cd /usr/local/zookeeper-3.4.8/bin
zkServer.shstart

啟動後可檢視zookeeper.out的日誌。

啟動的順序是zoo1> zoo2>zoo3> zoo4> zoo5,由於ZooKeeper叢集啟動的時候,每個結點都試圖去連線叢集中的其它結點,除了zoo5能連線所有節點,其它的都存在啟動時後邊的節點還沒啟動,所以會出現異常的日誌,這是正常的。啟動選出一個Leader後,最後穩定了。

第六步:安裝驗證

可以通過ZooKeeper的指令碼來檢視啟動狀態,包括叢集中各個結點的角色(或是Leader,或是Follower),如下所示,是在ZooKeeper叢集中的每個結點上查詢的結果:

cd /usr/local/zookeeper-3.4.8/bin
zkServer.shstatus

會得到以下內容:

1個Mode:leader
4個Mode:follower

通過上面狀態查詢結果可見,zoo1是叢集的Leader,其餘4個的結點是Follower。

另外,可以通過客戶端指令碼,連線到ZooKeeper叢集上。對於客戶端來說,ZooKeeper是一個整體(ensemble),連線到ZooKeeper叢集實際上感覺在獨享整個叢集的服務,所以,你可以在任何一個結點上建立到服務叢集的連線。

四、補充說明


主機名對映的ip與必須與實際配置的一致,叢集中各個結點之間才能正常建立鏈路,整個ZooKeeper叢集啟動才能成功。修改每個結點的/etc/hosts檔案,將ZooKeeper叢集中所有結點主機名到IP地址的對映配置上。

五、參考連結

可參考以下網址學習更多zookeeper知識

The end!


相關推薦

ZooKeeper叢集部署

一、ZooKeeper簡介 ZooKeeper是一個分散式的,開放原始碼的協調服務,是的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。ZooKeepe提供了協調分散式應用的基本服務,它向外部應用暴露一組通用服務——分散式同步(Distributed

Storm叢集部署

1.叢集規劃 cdh0      storm zookeeper cdh1      storm zookeeper cdh2      storm zookeeper 2.

hdfs偽分散式叢集搭建和部署

    大家好,這是我的第一篇技術部落格,也是第一篇部落格,請大家多多支援。我寫部落格的初衷無非是對所學知識的回顧和總結,同時能與廣大的讀者一起探討,共同進步,這是一件非常令人開心的事。     部落格的內容大都是大資料技術相關,今天要說的是hadoop,以後會可能還會更新

Rainbond部署Mysql主從叢集應用

Mysql主從同步原理 1)在Slave 伺服器上執行sart slave命令開啟主從複製開關,開始進行主從複製。 2)此時,S

zabbix3.0之server端部署

server 安裝 zabbix yum 配置 下載yum配置rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 安裝依賴包[[email

codis-3.2.8集群部署

zookeeper redis集群 codis codis集群 codis-3.2.8集群部署詳解一、概要Codis 是一個分布式 Redis 解決方案, 對於上層的應用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有明顯的區別 (不支持的命令列表htt

搜索引擎系列八:solr-部署(solr兩種部署模式介紹、獨立服務器模式、SolrCloud分布式集群模式

nod 為什麽 用途 serve creat 復制 stand 數據 變量名 一、solr兩種部署模式介紹 Standalone Server 獨立服務器模式:適用於數據規模不大的場景 SolrCloud 分布式集群模式:適用於數據規模大,高可靠、高可用、高並發的場景 二

weblogic 安裝部署

ont inf projects 技術 集群 middle 完成 密碼 ase 0x01 weblogic下載安裝 去Oracle官網下載Weblogic 10.3.6,選擇Generic版本,各版本選擇下載地址:http://www.oracle.com/technet

Windows 7/8/10 系統下Laravel框架的開發環境安裝及部署(Vagrant + Homestead)

所在 ntc 報錯 ould intel protoc aliyun manual linux 註意! laravel/homestead box項目地址已經不再是原來的 https://atlas.hashicorp.com/laravel/boxes/homestea

ELK部署--elasticsearch

distrib gcd nal trigger epo author pid nat xca #Elasticsearch 是一個實時的分布式搜索和分析引擎,它可以用於全文搜索,結構化搜索以及分析。它是一個建立在全文搜索引擎 Apache Lucene 基礎上的搜索引擎,使

ELK部署--logstash

type try exp star mark nbsp password var inf logstash.yml # Settings file in YAML## Settings can be specified either in hierarchical form

專屬小白們的Zabbix部署

柔軟 type ring 通知機制 oot multi bec 輸入 兩臺 簡介:zabbix是一個基於WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。zabbix能監視各種網絡參數,保證服務器系統的安全運營;並提供靈活的通知機制以讓系統管理員快速定位

Flume NG高可用叢集搭建(基於flume-1.7.0)

1、Flume NG簡述 Flume NG是一個分散式,高可用,可靠的系統,它能將不同的海量資料收集,移動並存儲到一個數據儲存系統中。輕量,配置簡單,適用於各種日誌收集,並支援 Failover和負載均衡。並且它擁有非常豐富的元件。Flume NG採用的是三層架構:Agent層,Collecto

DC/OS安裝部署

1. 前言 對於容器編排系統,前段時間主要研究kubernetes,現在實驗室要用dcos,所以在實驗室叢集上搭建了該系統,dcos版本為1.8.6。 使用的系統為centos7.2,機器使用情況如下表所示,實驗室叢集沒有聯外網。 機器ip 作用

VS2012程式打包部署

上篇部落格把收費系統的總體設計進行了一遍講解,講解的同時摻雜了些有關.NET編譯機制的總結。程式編寫測試完成後接下來我們要做的是打包部署程式,但VS2012讓人心痛的是沒有了打包工具。不知道出於什麼原因微軟沒有將打包工具整合在開發環境中,但是我知道總會有解決辦法的。   &nbs

自動化運維工具Puppet服務安裝和部署

puppet簡介 puppet是一種基於ruby語言開發的Lnux、Unix、windows平臺的集中配置管理系統。它使用自有的puppet描述語言,可管理配置檔案file、使用者user、cron任務、軟體包、系統服務等系統實體。 puppet依賴於C/S(客戶端/伺服器)的部署架構。它需要在p

laravel Windows 7/8/10 系統下Laravel框架的開發環境安裝及部署(Vagrant + Homestead)

  注意! laravel/homestead box專案地址已經不再是原來的 https://atlas.hashicorp.com/laravel/boxes/homestead 而已經變更成 https://app.vagrantup.

分散式Zookeeper安裝搭建

一、下載zookeeper安裝包 在官網中下載,對於在牆內的使用者,並不推薦該方式下載速度可能比較慢 推薦方式:在cloudera倉庫進行下載,相較於官網下載更加穩定快速,地址http://archive.cloudera.com/cdh5/cdh/5/,選擇需要版本下載tar.

轉發【VMWARE-三種網絡卡配製方式及實驗部署

轉發【VMWARE-三種網絡卡配置方式及實驗部署詳解】 參考:https://blog.csdn.net/babyxue/article/details/80970526 我的測試環境 VMWare12 ConetOS7 測試結

MySQL高可用方案-PXC(Percona XtraDB Cluster)環境部署

Percona XtraDB Cluster簡稱PXC。Percona Xtradb Cluster的實現是在原mysql程式碼上通過Galera包將不同的mysql例項連線起來,實現了multi-master的叢集架構。下圖中有三個例項,組成了一個叢集,而這三個節點與普通的主從架構不同,它們都可以作為主節點