ZooKeeper入門教程(一)

想必大家都對(duì)分布式系統(tǒng)有所耳聞,大部分人對(duì)分布式都能侃侃而談,但到了真正實(shí)施的時(shí)候,才發(fā)現(xiàn)其中的不易。今天帶大家一起了解一款開源軟件,ZooKeeper。它通過一些簡(jiǎn)單好用的API,來解決分布式系統(tǒng)設(shè)計(jì)與開發(fā)中的難點(diǎn)。

ZooKeeper

這篇文章主要從下幾個(gè)部分介紹:

  • 什么是分布式系統(tǒng)和它的特性
  • 分布式系統(tǒng)難在哪里
  • ZooKeeper簡(jiǎn)介
  • 下載安裝ZooKeeper
  • 客戶端操作ZooKeeper
  • ZooKeeper集群配置

分布式系統(tǒng)定義

A distributed system is de ned as a software system that is composed of independent computing entities linked together by a computer network whose components communicate and coordinate with each other to achieve a common goal.
分布式系統(tǒng)是由獨(dú)立的計(jì)算機(jī)通過網(wǎng)絡(luò)連接在一起,并且通過一些組件來相互交流和協(xié)作來完成一個(gè)共同的目標(biāo)。

想要更好的判斷是否為好的分布式系統(tǒng),可以看這些特性:

  • 資源共享,例如存儲(chǔ)空間,計(jì)算能力,數(shù)據(jù),和服務(wù)等等
  • 擴(kuò)展性,從軟件和硬件上增加系統(tǒng)的規(guī)模
  • 并發(fā)性 多個(gè)用戶同時(shí)訪問
  • 性能 確保當(dāng)負(fù)載增加的時(shí)候,系統(tǒng)想要時(shí)間不會(huì)有影響
  • 容錯(cuò)性 盡管一些組件暫時(shí)不可用了,整個(gè)系統(tǒng)仍然是可用的
  • API抽象 系統(tǒng)的獨(dú)立組件對(duì)用戶隱藏,僅僅暴露服務(wù)

有了ZooKeeper,開發(fā)者可以很輕松的實(shí)現(xiàn):

  • 配置管理
  • 命名服務(wù)
  • 分布式鎖
  • 集群關(guān)系操作,檢測(cè)節(jié)點(diǎn)的加入和離開

分布式系統(tǒng)的難點(diǎn)

可以想象,假如一臺(tái)計(jì)算機(jī)的出錯(cuò)概率為0.1%,那么1000臺(tái)服務(wù)器的出錯(cuò)概率呢?一旦計(jì)算機(jī)的數(shù)量增多,出錯(cuò)的概率就大大的增加。

  1. 多個(gè)相互獨(dú)立的計(jì)算機(jī),假設(shè)集群的配置信息在某個(gè)Master節(jié)點(diǎn)上,其余的節(jié)點(diǎn)從Master節(jié)點(diǎn)下載配置信息。假如Master節(jié)點(diǎn)掛了呢?假設(shè)Master節(jié)點(diǎn)是故障冗余的,但是配置信息是動(dòng)態(tài)的傳遞給所有的其余節(jié)點(diǎn)的,而不是直接傳過去。所有節(jié)點(diǎn)之間的信息如何保證一致呢?

  2. 服務(wù)發(fā)現(xiàn)的問題,為了增加系統(tǒng)的可靠性,我們一般會(huì)在系統(tǒng)中增加更多的服務(wù)器。讓其它機(jī)器知道新加入的節(jié)點(diǎn)在集群中的關(guān)系和服務(wù),這個(gè)設(shè)計(jì)也需要非常周到的考慮

  3. 機(jī)器數(shù)目眾多,更容易出現(xiàn) 機(jī)器故障,軟件崩潰,網(wǎng)絡(luò)延遲,拓?fù)涓淖兊鹊?,而這些類型的錯(cuò)誤沒有規(guī)律可循,因此在分布式系統(tǒng),想實(shí)現(xiàn)高容錯(cuò)性是很難的。

當(dāng)然了..ZooKeeper被設(shè)計(jì)出來的目的就是解決這種類型的問題.

ZooKeeper介紹

zookeeper實(shí)際上是yahoo開發(fā)的,用于分布式中一致性處理的框架。最初其作為研發(fā)Hadoop時(shí)的副產(chǎn)品。由于分布式系統(tǒng)中一致性處理較為困難,其他的分布式系統(tǒng)沒有必要費(fèi)勁重復(fù)造輪子,故隨后的分布式系統(tǒng)中大量應(yīng)用了zookeeper,以至于zookeeper成為了各種分布式系統(tǒng)的基礎(chǔ)組件,其地位之重要,可想而知。著名的hadoop、kafka、dubbo 都是基于zookeeper而構(gòu)建。

安裝ZooKeeper

有關(guān)分布式的理論也很重要,我們放到下此再講,首先有一個(gè)可以運(yùn)行的Demo,在看理論的時(shí)候才更明白是怎么回事,因?yàn)閆ooKeeper的簡(jiǎn)單易用,幾分鐘內(nèi)就可以做出一個(gè)小demo。

  1. 從ZooKeeper官網(wǎng)下載
    下載地址:https://archive.apache.org/dist/zookeeper/

  2. 解壓配置

tar -xf /usr/local/src/zookeeper-3.4.9.tar.gz -C /usr/local/src/
ln -sv /usr/local/src/zookeeper-3.4.9/ /usr/local/zookeeper
cd /usr/local/zookeeper/
  1. 配置ZooKeeper
vim zoo.cfg
# zoo.cfg文件中內(nèi)容如下
tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
  • tickTime 單位為微秒,用于session注冊(cè)和客戶端和ZooKeeper服務(wù)的心跳周期。session超時(shí)時(shí)長(zhǎng)最小為 tickTime的兩倍
  • dataDir ZooKeeper的狀態(tài)存儲(chǔ)位置,看名字就知道書數(shù)據(jù)目錄。在你的系統(tǒng)中檢查這個(gè)目錄是否存在,如果不存在手動(dòng)創(chuàng)建,并且給予可寫權(quán)限。
  • clientPort 客戶端連接的端口。不同的服務(wù)器可以設(shè)置不同的監(jiān)聽端口,默認(rèn)是2181
  1. 啟動(dòng)ZooKeeper
# 這里命令寫的長(zhǎng)是為了便于知道ZooKeeper是如何使用配置文件的。
/usr/local/zookeeper/bin/zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg  

# 查看ZooKeeper是否運(yùn)行
ps –ef | grep zookeeper 
# 也可以使用jps ,可以看到j(luò)ava進(jìn)程中有QuorumPeerMain列出來。

# 查看ZooKeeper的狀態(tài)
zkServer.sh status

# 常用的ZooKeeper用法,這個(gè)屬于Linux基礎(chǔ)的部分,就不過多說明了
./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
  1. 使用zkCli連接ZooKeeper
/usr/local/zookeeper/bin/zkCli.sh -server localhost:2181

連接成功后可以使用如下命令:


ZooKeeper命令演示

ZooKeeper集群配置

ZooKeeper的集群相對(duì)比較簡(jiǎn)單,這里不涉及過多的篇幅,但會(huì)列出大概的步驟。

  1. 創(chuàng)建配置文件
cd /usr/local/zookeeper
touch zoo1.cfg zoo2.cfg zoo3.cfg
集群的配置

注意 端口不要沖突,dataDir不要相同

  1. 配置數(shù)據(jù)目錄與數(shù)據(jù)存放目錄內(nèi)容
cd /tmp/zookeeper
mkdir {zoo1,zoo2,zoo3}
echo 1 > zoo1/myid
echo 2 > zoo2/myid
echo 3 > zoo3/myid

這里的myid文件中一定要對(duì)應(yīng)上面配置文件中server.[id]的數(shù)字,不然ZooKeeper啟動(dòng)會(huì)出錯(cuò)。

  1. 啟動(dòng)ZooKeeper
zkServer.sh start /usr/local/zookeeper/conf/zoo1.cfg
zkServer.sh start /usr/local/zookeeper/conf/zoo2.cfg
zkServer.sh start /usr/local/zookeeper/conf/zoo3.cfg
  1. 查看效果

使用ps -ef | grep zoo可以看到有三個(gè)zookeeper啟動(dòng)起來了。
連接ZooKeeper

# 192.168.8.250是ZooKeeper服務(wù)器的地址
zkCli.sh -server 192.168.8.250:2181,192.168.8.250:2182,192.168.8.250:2183
集群連接效果

可以看到連接成功,也就是集群配置成功了。

最后

這篇文章,主要介紹了一下什么是分布式系統(tǒng)和分布式系統(tǒng)的的基本特性,然后又做了ZooKeeper的簡(jiǎn)單Demo,希望幫助大家入門ZooKeeper。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 一、ZooKeeper的背景 1.1 認(rèn)識(shí)ZooKeeper ZooKeeper---譯名為“動(dòng)物園管理員”。動(dòng)物...
    algernoon閱讀 9,326評(píng)論 1 106
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,272評(píng)論 0 5
  • 以前我信奉『工作就去創(chuàng)業(yè)公司,機(jī)會(huì)多,成長(zhǎng)快』,后來稱不上飽經(jīng)滄桑,但我更想說『如果可以,請(qǐng)別輕易去創(chuàng)業(yè)公司』,原...
    會(huì)開花的蘑菇閱讀 650評(píng)論 0 0
  • 把你的信息刪了又加,加了又刪,反反復(fù)復(fù)不知道何時(shí)是終點(diǎn)。一直都處在猶豫不決的狀態(tài)中,沒有走出來。就連想不想走出來這...
    小小羊_閱讀 225評(píng)論 0 0

友情鏈接更多精彩內(nèi)容