Zookeeper知識匯總(含分布式安裝顿涣、配置)

------------ 本文來自 阿P官方博客

思考1:Zookeeper能解決大數(shù)據(jù)什么問題波闹?

一、概述

Apache提供的開源的涛碑、分布式的用于服務(wù)協(xié)調(diào)的一套框架
    這里可以不用懂精堕,隨著深入學(xué)習,我們就知道Zookeeper到底有什么用蒲障。此處只是讓大家有這個概念歹篓,后面會深入理解瘫证。
早期是根據(jù)Google關(guān)于Chubby Lock的論文來實現(xiàn)的。

二庄撮、Zookeeper分布式下的問題

什么是分布式背捌?
    一個集群中,多個節(jié)點共同組成一個系統(tǒng)洞斯≌鼻欤或者說是本來需要一個節(jié)點去處理的問題,現(xiàn)在分成了很多個節(jié)點協(xié)同處理烙如。
分布式下么抗,若每個結(jié)點都發(fā)送自己的指令,造成邏輯混亂怎么辦厅翔?
    故需提供對外接收請求提供統(tǒng)一的操作的管理節(jié)點乖坠。
若管理節(jié)點出現(xiàn)單點故障怎么辦?
    為了避免管理節(jié)點出現(xiàn)單點故障刀闷,需要設(shè)置管理節(jié)點的集群
怎么確定管理節(jié)點熊泵?
    管理集群需要設(shè)置一個主節(jié)點,需要確定一套選舉算法甸昏,選出一個主節(jié)點顽分。
管理集群中,節(jié)點出現(xiàn)問題施蜜,怎么恢復(fù)卒蘸、處理?
    管理集群需要進行崩潰恢復(fù)
    在從節(jié)點中重新選擇主節(jié)點
管理集群消息不統(tǒng)一怎么辦翻默?
    管理集群之間各個節(jié)點需要進行實時共享

四缸沃、Zookeeper特點

zookeeper樹狀結(jié)構(gòu)存儲 - Znode樹
根節(jié)點為 /
每一個子節(jié)點稱之為znode節(jié)點
所有的節(jié)點路徑,必須以根節(jié)點為起始
每一個持久節(jié)點下可以掛載節(jié)點
Znode存在磁盤和內(nèi)存中
    Znode存在內(nèi)存中的目的:查詢速度更快
    Znode存在磁盤中的目的:崩潰恢復(fù)
Znode磁盤中的存儲位置由dataDir路徑?jīng)Q定
Zookeeper存在事務(wù)概念
    對每一次的寫操作創(chuàng)建一個遞增的事務(wù)ID(Zxid)

五修械、Zookeeper-Client命令

查看節(jié)點目錄:ls 節(jié)點
創(chuàng)建:create /節(jié)點名
    -e:臨時節(jié)點
    -s:創(chuàng)建順序節(jié)點
刪除:delete /節(jié)點【必須刪除空節(jié)點】
遞歸刪除:rmr /節(jié)點
查看:get /節(jié)點
    -s:查看節(jié)點詳細信息
修改:set /節(jié)點 '內(nèi)容'

六趾牧、節(jié)點信息詳解

命令:get -s Znode
返回值:
    cZxid:創(chuàng)建事務(wù)ID
    ctime:創(chuàng)建時間
    mZxid:修改事務(wù)ID
    mtime:修改時間
    pZxid:子節(jié)點的增刪事務(wù)ID,全局
    cversion:子節(jié)點的增刪次數(shù)
    dataVersion:數(shù)據(jù)版本肯污,修改次數(shù)
    aclVersion:權(quán)限修改次數(shù)
    ephemeralOwner:是否是臨時節(jié)點翘单。持久節(jié)點固定為0。臨時節(jié)點為sessionid
    dataLength:數(shù)據(jù)字節(jié)個數(shù)
    numChildren:子節(jié)點個數(shù)

七蹦渣、Zookeeper節(jié)點類型

節(jié)點持久性劃分
    持久節(jié)點(默認節(jié)點)
    臨時節(jié)點
    客戶端退出哄芜,該結(jié)點刪除。
節(jié)點順序類型
    順序節(jié)點
    非順序節(jié)點

八柬唯、選舉機制(以leader節(jié)點掛了為例)

第一個階段:數(shù)據(jù)恢復(fù)階段
    每個節(jié)點會找尋當前節(jié)點中的最大事務(wù)id
第二個階段:選舉階段
    剛開始時认臊,在集群中每個節(jié)點都會推薦自己做leader。
    將自己的信息發(fā)送給其他節(jié)點锄奢,最后勝出的為leader失晴,失敗的做follower冤议。
        節(jié)點信息:
            最大事務(wù)ID:mzxid
            選舉編號:myid
        邏輯時鐘值:保證所有選舉在同一輪次上
        比較原則
            事務(wù)ID誰大誰勝出
            事務(wù)ID一致時,myid誰大誰勝出
            選舉的過半性:當某個結(jié)點勝過1半的節(jié)點(包括宕機的)時师坎,就會成為leader
            當集群中已經(jīng)選舉出leader,后續(xù)添加的節(jié)點堪滨,不再考慮被選舉成leader胯陋。【一個集群中袱箱,只需要啟動一半節(jié)點遏乔,就會選舉出leader】

九、節(jié)點狀態(tài)

looking/voting:選舉狀態(tài)
follower:追隨者
leader領(lǐng)導(dǎo)者
observer:觀察者

十发笔、腦裂

什么是腦裂盟萨?
    在集群中出現(xiàn)多l(xiāng)eader時,這種情況稱之為腦裂
產(chǎn)生腦裂的原因
    網(wǎng)絡(luò)隔離導(dǎo)致多l(xiāng)eader
    ledaer主機宕機后重啟了讨。
解決手段:
    過半存活性
        在zookeeper集群中,只有半數(shù)以上的節(jié)點存活前计,才會對外提供服務(wù)胞谭。
Tips:zookeeper節(jié)點一般是奇數(shù)個男杈。

十一、安裝方式

單機安裝:只在一個節(jié)點上安裝伶棒,只能提供部分功能。
偽分布式:只在一個節(jié)點上模擬集群環(huán)境
完全分布式:在集群環(huán)境中安裝【本文列出三節(jié)點集群安裝方式】

十二肤无、單機安裝(過程僅供有經(jīng)驗開發(fā)人員參考)

下載安裝JDK1.8
下載并解壓zookeeper
復(fù)制./conf/zoo_sample.cfg為zoo.cfg
修改zoo.cfg里的dataDir內(nèi)容為你想要的存儲路徑
啟動zookeeper:./bin/zkServer.sh start
注意:
    3.5.0(一說3.5.5)以后的官方版本,需要下載.bin.xxx的文件
    啟動狀態(tài)查詢:./bin/zkServer.sh status

十三舅锄、三節(jié)點zookeeper完全分布式搭建流程【傻瓜式】

虛擬機安裝配置
    利用vmware創(chuàng)建虛擬機(略)
        配置:centos7 + 1core + 1G內(nèi)存 + 20G硬盤 + NAT模式
        centos7鏡像地址(如果下載慢鞭达,可以使用NeatDownload Manager開啟多線程下載):http://mirrors.aliyun.com/centos/7.8.2003/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
        注意:
            實際的內(nèi)存皇忿、硬盤分配看你物理機的情況畴蹭。
    配置鏡像源
            參考:https://blog.csdn.net/qq_43054078/article/details/83275042
        配置靜態(tài)IP
            mac版本配置參考:https://blog.csdn.net/p01114245/article/details/94382979
        計劃三節(jié)點靜態(tài)ip分別為
            節(jié)點1:172.16.172.197(目前操作的節(jié)點)
            節(jié)點2:172.16.172.196
            節(jié)點3:172.16.172.195
        配置主機名(需要重新登錄,才會生效)
            hostnamectl set-hostname zk01
        配置hosts文件:
            vim /etc/hosts:加入以下內(nèi)容
                172.16.172.197 zk01
                172.16.172.196 zk02
                172.16.172.195 zk03
        配置ssh免密登錄
            生成秘鑰:ssh-keygen
            拷貝秘鑰到本機:ssh-copy-id root@zk01
        注意
            虛擬機安裝時鳍烁,很多可用命令未下載叨襟。例如:wget、ifconfig(net-tools)幔荒、vim等糊闽。此時可先配置靜態(tài)ip梳玫,配完后用scp命令,將下載好的鏡像源手動導(dǎo)入服務(wù)器右犹。再利用yum安裝必要的服務(wù)提澎。
下載安裝 JDK1.8
    yum install -y java-1.8.0-openjdk.x86_64
    yum install -y java-1.8.0-openjdk-devel.x86_64
    Tips:查看jdk安裝目錄命令:ls -lrt /etc/alternatives/java
Zookeeper安裝、解壓念链、配置
    下載:wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8.bin.tar.gz
    解壓安裝:
        tar -zxvf apache-zookeeper-3.5.8.bin.tar.gz -CP /usr/local
        mv /usr/local/apache-zookeeper-3.5.8 /usr/local/zookeeper
    配置命令:
        cd /usr/local/zookeeper/conf
        cp zoo_sample.cfg zoo.cfg
        vim zoo.cfg:加入或修改以下四行
            dataDir=/data/zookeeper/tmp
            server.1=zk01:2888:3888
            server.2=zk02:2888:3888
            server.3=zk03:2888:3888
        vim /data/zookeeper/tmp/myid:加入以下內(nèi)容
            1
    測試:
        啟動:../bin/zkServer.sh start
        jps 
            查看是否有QuorumPeerMain進程出現(xiàn)盼忌。
    注意:
        請記住這個url(https://www.apache.org/),如果你記不住這個地址掂墓,請不要再繼續(xù)學(xué)了谦纱,趕緊回家種地吧。
        3.5.5及以后的版本君编,必須下載.bin.tar.gz才能使用跨嘉。下載的.tar.gz只是源碼。
克隆三臺虛擬機
    zk01 關(guān)機吃嘿。完全克隆
    修改節(jié)點2祠乃、3的網(wǎng)卡配置
    分別修改兩節(jié)點 /etc/sysconfig/network-scripts/ifcfg-ens33 里的IPADDR 為我們剛剛計劃的ip(略)
        重啟網(wǎng)卡:systemctl restart network
    修改節(jié)點2、3的Zookeeper配置
    只需要修改 /data/zookeeper/tmp/myid文件下的對應(yīng)編號為本機器編號
        分別啟動節(jié)點2唠椭、3的zookeeper(略)
    修改節(jié)點2跳纳、3的主機名為zk02、zk03
        hostnamectl set-hostname 主機名
        exit:退出用戶重新登錄
    關(guān)閉三臺機器的防火墻(有條件的贪嫂,可以配置防火墻策略)
        systemctl stop firewalld
測試
    /usr/local/zookeeper/bin/zkServer.sh status 
        會看到三節(jié)點哪個是follower和leader
    在節(jié)點1上操作
        /usr/local/zookeeper/bin/zkCli.sh
        create /zoo_test
    在節(jié)點2或者節(jié)點3上操作
        /usr/local/zookeeper/bin/zkCli.sh
        ls /
            會看的節(jié)點2寺庄、3都有 zoo_test
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市力崇,隨后出現(xiàn)的幾起案子斗塘,更是在濱河造成了極大的恐慌,老刑警劉巖亮靴,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馍盟,死亡現(xiàn)場離奇詭異,居然都是意外死亡茧吊,警方通過查閱死者的電腦和手機贞岭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搓侄,“玉大人瞄桨,你說我怎么就攤上這事⊙茸伲” “怎么了芯侥?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我柱查,道長廓俭,這世上最難降的妖魔是什么唉工? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任淋硝,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赋焕。我一直安慰自己,他們只是感情好犬庇,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布臭挽。 她就那樣靜靜地躺著咬腕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纽帖。 梳的紋絲不亂的頭發(fā)上举反,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音室囊,去河邊找鬼魁索。 笑死,一個胖子當著我的面吹牛懦铺,可吹牛的內(nèi)容都是我干的支鸡。 我是一名探鬼主播趁窃,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼醒陆,長吁一口氣:“原來是場噩夢啊……” “哼刨摩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起澡刹,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤罢浇,失蹤者是張志新(化名)和其女友劉穎沐祷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胞锰,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嗅榕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年吵聪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片案怯。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘲碱,死狀恐怖局蚀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琅绅,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布料祠,位于F島的核電站,受9級特大地震影響敛苇,放射性物質(zhì)發(fā)生泄漏顺呕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一来涨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扫夜,春花似錦驰徊、人聲如沸堕阔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽时呀。三九已至,卻和暖如春谨娜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背漠畜。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工坞靶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瘾敢。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓簇抵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355