消息總線之zookeeper

實(shí)際上 spring cloud 的消息總線用的是 kafka,但是 kafka 依賴(lài) zookeeper 進(jìn)行集群,所以先寫(xiě)怎么配置 zookeeper,這里用的版本是 3.4.9。

zookeeper 單實(shí)例不用多說(shuō),默認(rèn)配置就能跑,這里直接上集群,集群也分真?zhèn)危热鐔螜C(jī)多實(shí)例就是一個(gè)偽集群,這是現(xiàn)在的實(shí)驗(yàn)環(huán)境。

目錄結(jié)構(gòu)如下:

kafka-HA
   |--- kafka-node0
   |         |--- config     ( kafka 根目錄的 config 文件夾復(fù)制過(guò)來(lái) )
   |         |--- log        ( kafka 配置指定的 log 文件夾 )
   |         |--- zk         ( zookeeper 根目錄 )
   |         |--- zk-data    ( zookeeper 的 dataDir 文件夾 )
   |         |--- zk-log     ( zookeeper 的 log 文件夾 )
   |
   |--- kafka-node1
   |         |--- 同上
   |
more node...

其中 config 文件夾是這樣的,真的是 kafka 的 config 復(fù)制過(guò)來(lái),騙你是小狗:

config 文件夾

開(kāi)胃菜吃完了,來(lái)點(diǎn)面包。

config 目錄下有份 zookeeper.properties ,這正是 zk 的配置,主要配置只有幾項(xiàng),下面列一列:

  • dataDir --> 指定 zk 的數(shù)據(jù)存放目錄
  • dataLogDir --> 指定 zk 的 log 目錄
  • clientPort --> 指定 zk 的端口號(hào)

重點(diǎn)來(lái)了,小兵一般都沖前鋒,比如前三個(gè)配置,不過(guò)沒(méi)了小兵,大將也不叫大將,比如如果少了 dataDir,那就等著報(bào)錯(cuò)吧。

  • tickTime --> 這是 zk 的默認(rèn)時(shí)間單元,默認(rèn)兩毫秒,后面說(shuō) N 個(gè)單位時(shí)間就是 ( tickTime * N ) 毫秒
  • initLimit --> 告訴 leader 在 initLimit 個(gè)時(shí)間單元內(nèi),如果 follower 還在躺尸就等于歇菜了
  • syncLimit ---> 告訴 leader 跟 follower 發(fā)消息的時(shí)候,如果請(qǐng)求&響應(yīng)超過(guò) syncLimit 個(gè)時(shí)間單元就等于歇菜了
  • server.A = ip:B:C ---> A 是一個(gè)數(shù)字,代表第幾號(hào)服務(wù)器,就當(dāng) id 用好了,不能重復(fù);ip 是對(duì)應(yīng)第 A 號(hào)服務(wù)器的 ip;B 是在集群中 leader 和 follower 交流信息的端口號(hào);C 是用來(lái)選舉的端口號(hào)( 風(fēng)水輪流轉(zhuǎn),leader 也可能歇菜,who know? )

納尼?no picture you say a jb?! 小弟不才,下面給大家看看:

zookeeper.propertie

這里看到圖里是用 zk-node0 之類(lèi)的 hostname ,一切為了方( bu )便( luo ),別忘了改 hosts 文件,同時(shí)在偽集群的時(shí)候,記得端口不要相同。

接下來(lái)要在 dataDir 指定的目錄下加一份名為 myid 的文件,不用帶后綴,文件內(nèi)容寫(xiě)對(duì)應(yīng)服務(wù)器的 id( 就是配置里面 server.A 的那個(gè) A ),如果你是 *nix 系統(tǒng),直接 echo 0 >> YOUR DATADIR/myid( 比如有一個(gè)第 0 號(hào)的 zk ),記得每個(gè) zk 都要這么做,最后上個(gè)圖:

myid 文件

不知不覺(jué),連正餐都吃完了,最后來(lái)份甜品。

在上述目錄中,zk 文件夾里面必須包含 zk 源文件( 就是說(shuō)不能是軟連接,硬的也不行 ),因?yàn)?zk 在運(yùn)行時(shí)會(huì)在 zkServer 的上一級(jí)目錄創(chuàng)建 pid 文件,如果是僅僅是連接,實(shí)際上你操作的是同一個(gè)文件夾,而多個(gè) zk 實(shí)例會(huì)相互覆蓋 pid,后果你懂的,我想這也是為什么 zookeeper 安裝時(shí)沒(méi)有把 zkServer 這種啟動(dòng)腳本復(fù)制到 /usr/bin 的原因 。( 逼逼那么多,反正把 zk 的源文件復(fù)制一份過(guò)來(lái)就行了 )

like this:

zookeeeper 文件夾

小杜,是時(shí)候了!

跑到每一個(gè) zk/bin 下執(zhí)行 zkServer start YOUR CONFIG PATH 就行了,這個(gè) path 一定要用絕對(duì)路徑,因?yàn)?zkServer 腳本比較神奇,相對(duì)路徑99.999%會(huì)找不到你給的文件,結(jié)果要么用了默認(rèn)的 zoo.properties 要么就直接拋錯(cuò)罷工( 沒(méi)有找到任何配置文件的情況下 ),可惜我又不會(huì) bash 的語(yǔ)法,不然一番改改改。

比如 zkServer start /Users/finally/deveEnv/kafka-HA/kafka-node0/config/zookeeper.properties 運(yùn)行 zk。

想看有沒(méi)有跑起來(lái)?zkServer status YOUR CONFIG PATH 幫到你,跑起來(lái)的話(huà)你會(huì)看到如下信息:

zk status

這里的 Mode 是說(shuō)明這個(gè) zk 實(shí)例的身份,這里是 follower。

zookeeper 到這里,就完成部署了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 1 Zookeeper概述# ZooKeeper是一個(gè)為分布式應(yīng)用所設(shè)計(jì)的分布的、開(kāi)源的協(xié)調(diào)服務(wù),它主要是用來(lái)解決...
    七寸知架構(gòu)閱讀 7,386評(píng)論 0 101
  • ZooKeeper介紹 Zookeeper 分布式服務(wù)框架是 Apache Hadoop 的一個(gè)子項(xiàng)目,它主要是用...
    Coselding閱讀 11,453評(píng)論 1 37
  • 一、入門(mén)1、簡(jiǎn)介Kafka is a distributed,partitioned,replicated com...
    HxLiang閱讀 3,448評(píng)論 0 9
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,991評(píng)論 19 139
  • 這個(gè)插件主要是為了anki添加單詞用的,不過(guò)作者用心,美化不錯(cuò),所有拿來(lái)查單詞也不錯(cuò)! 使用方法在單詞上懸停鼠標(biāo)并...
    鴨梨山大哎閱讀 3,058評(píng)論 0 5