zookeeper集群

zookeeper有兩種工作模式,一種是單機(jī)方式,另一種是集群方式.

Zookeeper作為一個(gè)服務(wù),它本身也可能發(fā)生故障,所以我們需要將Zookeeper進(jìn)行集群添忘,避免單點(diǎn)故障問題察皇,以保證zookeeper本身的高可用性

Zookeeper集群特點(diǎn)
Zookeeper集群有三個(gè)角色,一個(gè)leader(領(lǐng)導(dǎo)者)旅掂,一個(gè)follower(跟隨者)赏胚,一個(gè)observer(觀察者);
集群中只要有 超過半數(shù) 的機(jī)器是正常工作的商虐,那么整個(gè)集群對(duì)外就是可用的觉阅;
也就是說如果有2個(gè)zookeeper,那么只要有1個(gè)故障了秘车,zookeeper就不能用了典勇,因?yàn)?沒有過半,所以2個(gè)zookeeper不是高可用的叮趴,因?yàn)椴荒苋萑倘魏?臺(tái)發(fā)生故障割笙;


zookeeper集群配置
1、下載安裝3個(gè)Zookeeper
2疫向、3個(gè)zookeeper中conf目錄下的zoo_sample.cfg復(fù)制一份咳蔚,改為zoo.cfg并配置:
dataDir=/usr/local/apache-zookeeper-3.5.5-bin-01/data
clientPort=2181

server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

如果是在三個(gè)linux上搭建:(端口可以重復(fù))
server.1=linux1IP:2888:3888
server.2=linux2IP:2888:3888
server.3=linux3IP:2888:3888

zookeeper內(nèi)嵌的server服務(wù)器的端口,默認(rèn)是8080

admin.serverPort=3181

格式:
server.A = B:C:D:
server.serverid = serverhost:leader_listent_port:quorum_port
A是一個(gè)數(shù)字,表示這個(gè)是第幾號(hào)服務(wù)器,
B是這個(gè)服務(wù)器的ip地址
C該端口用于集群成員的信息交換,表示的是該服務(wù)器與集群中的Leader服務(wù)器交換信息的端口
D是在leader掛掉時(shí)專門用來進(jìn)行選舉leader端口
3搔驼、創(chuàng)建三個(gè)dataDir目錄
/usr/local/apache-zookeeper-3.5.5-bin-01/data
/usr/local/apache-zookeeper-3.5.5-bin-02/data
/usr/local/apache-zookeeper-3.5.5-bin-03/data
每個(gè)data目錄中都創(chuàng)建一個(gè)名為myid的文件谈火,3個(gè)文件的內(nèi)容分別寫1、2舌涨、3糯耍;
如果你這個(gè)dataDir目錄下有原來運(yùn)行產(chǎn)生的數(shù)據(jù),最好是刪除一下囊嘉;
這個(gè)1温技、2、3是對(duì)應(yīng)前面的server.1扭粱、 server.2舵鳞、 server.3
至此一個(gè)zookeeper的集群就搭建完成;
注:admin.serverPort=3181 (zookeeper從3.5.x版本開始會(huì)占用8080端口琢蛤,通過此配置修改掉默認(rèn)的8080蜓堕,避免和tomcat端口沖突)
驗(yàn)證集群:
./zkServer.sh status
Mode: leader
Mode: follower


zookeeper集群選舉leader

Leader選舉是保證分布式數(shù)據(jù)一致性的關(guān)鍵所在抛虏,當(dāng)Zookeeper集群中的一臺(tái)服務(wù)器出現(xiàn)以下兩種情況之一時(shí),需要進(jìn)入Leader選舉套才。
(1) 服務(wù)器初始化啟動(dòng)的時(shí)候迂猴;
(2) 服務(wù)器運(yùn)行期間無法和Leader保持連接;

下面就兩種情況進(jìn)行分析講解背伴。
1沸毁、服務(wù)器啟動(dòng)初始化的時(shí)候Leader選舉
進(jìn)行Leader選舉的基礎(chǔ)條件是至少需要有兩個(gè)zookeeper,下面我們以3臺(tái)機(jī)器組成的zookeeper集群為例傻寂。
在集群初始化階段息尺,當(dāng)有一臺(tái)服務(wù)器zookeeper1啟動(dòng)時(shí),其單獨(dú)無法進(jìn)行和完成Leader選舉疾掰;
當(dāng)?shù)诙_(tái)服務(wù)器zookeeper2啟動(dòng)時(shí)掷倔,此時(shí)兩臺(tái)機(jī)器(超過半數(shù))可以相互通信,每臺(tái)機(jī)器都試圖找到Leader个绍,于是進(jìn)入Leader選舉過程,選舉過程如下:
(1) 每個(gè)zookeeper發(fā)出一個(gè)投票浪汪,由于是啟動(dòng)初始情況巴柿,zookeeper1和zookeeper2都會(huì)將自己作為L(zhǎng)eader服務(wù)器來進(jìn)行投票,每次投票會(huì)包含所推選的服務(wù)器的myid和ZXID死遭,使用 (ZXID,myid) 來表示广恢,此時(shí)zookeeper1的投票為 (0, 1),zookeeper2的投票為 (0, 2)呀潭,然后各自將這個(gè)投票信息發(fā)送給集群中其他機(jī)器钉迷。
(2) 集群的每個(gè)服務(wù)器收到投票后,首先判斷該投票的有效性钠署,如檢查是否是本輪投票糠聪、是否來自LOOKING狀態(tài)的服務(wù)器。
LOOKING
尋找leader狀態(tài)
當(dāng)前服務(wù)器處于該狀態(tài)時(shí)谐鼎,它會(huì)認(rèn)為當(dāng)前集群中沒有l(wèi)eader舰蟆,因此需要進(jìn)入leader選舉狀態(tài)。
FOLLOWING
跟隨者狀態(tài)
表示當(dāng)前服務(wù)器的角色是Follower角色
LEADING
領(lǐng)導(dǎo)者狀態(tài)
表示當(dāng)前服務(wù)器是Leader
OBSERVING
觀察者狀態(tài)
表示當(dāng)前服務(wù)器角色是Observer狸棍;
(3) 處理投票身害,針對(duì)每一個(gè)投票,服務(wù)器都需要將別人的投票和自己的投票進(jìn)行PK草戈,PK規(guī)則如下:
優(yōu)先檢查ZXID塌鸯,ZXID比較大的服務(wù)器優(yōu)先作為L(zhǎng)eader;(相等唐片,都是0)
如果ZXID相同丙猬,那么就比較myid涨颜,myid大的服務(wù)器作為L(zhǎng)eader服務(wù)器;

對(duì)于zookeeper1而言淮悼,它的投票是 (0, 1)咐低,接收zookeeper2的投票為 (0, 2,),首先會(huì)比較兩者的ZXID袜腥,均為0见擦,再比較myid,此時(shí)zookeeper2的myid最大羹令,zookeeper2成為leader鲤屡,同時(shí)每個(gè)zookeeper更新自己的投票為 (0,2),然后重新投票福侈,對(duì)于zookeeper2而言酒来,其無須更新自己的投票,只是再次向集群中所有機(jī)器發(fā)送上一次投票信息即可肪凛;

(4) 統(tǒng)計(jì)投票堰汉,每次投票后,服務(wù)器都會(huì)統(tǒng)計(jì)投票信息伟墙,判斷是否已經(jīng)有過半機(jī)器接受到相同的投票信息翘鸭,對(duì)于zookeeper1、zookeeper2而言戳葵,都統(tǒng)計(jì)出集群中已經(jīng)有兩臺(tái)機(jī)器接受了 (0,2) 的投票信息就乓, 此時(shí)便認(rèn)為已經(jīng)選出了Leader;
(5) 改變服務(wù)器狀態(tài)拱烁,一旦確定了Leader生蚁,每臺(tái)服務(wù)器就會(huì)更新自己的狀態(tài),如果是Follower戏自,那么就變更為FOLLOWING邦投,如果是Leader,就變更為L(zhǎng)EADING浦妄。

2尼摹、服務(wù)器運(yùn)行期間的Leader選舉
在Zookeeper運(yùn)行期間,Leader與非Leader服務(wù)器各司其職剂娄,如果有非Leader服務(wù)器宕機(jī)或新加入蠢涝,此時(shí)不會(huì)影響Leader,但是一旦Leader服務(wù)器宕機(jī)阅懦,那么整個(gè)集群將暫停對(duì)外服務(wù)和二,進(jìn)入新一輪Leader選舉,其過程和啟動(dòng)時(shí)期的Leader選舉過程基本一致耳胎;假設(shè)正在運(yùn)行的有zookeeper1惯吕、zookeeper2惕它、zookeeper3三臺(tái)服務(wù)器,當(dāng)前Leader是zookeeper2废登,若某一時(shí)刻Leader宕機(jī)了淹魄,此時(shí)便開始Leader選舉,選舉過程如下:
(1) 變更狀態(tài)堡距,Leader宕機(jī)后甲锡,余下的服務(wù)器都會(huì)將自己的服務(wù)器狀態(tài)變更為L(zhǎng)OOKING,然后開始進(jìn)入Leader選舉過程羽戒;
(2) 每個(gè)zookeeper會(huì)發(fā)出一個(gè)投票缤沦,在運(yùn)行期間,每個(gè)服務(wù)器上的ZXID可能不同易稠,此時(shí)假定zookeeper1的ZXID為128缸废,zookeeper3的ZXID為127;在第一輪投票中驶社,zookeeper1和zookeeper3都會(huì)將票投給自己企量,產(chǎn)生投票(128, 1),(127, 3)亡电,然后各自將投票發(fā)送給集群中其他機(jī)器梁钾;
(3) 接收來自各個(gè)服務(wù)器的投票,與自己的投票進(jìn)行比較逊抡,此過程與啟動(dòng)時(shí)相同;
(4) 處理投票零酪,與啟動(dòng)時(shí)過程相同冒嫡,此時(shí)(zookeeper1將會(huì)成為L(zhǎng)eader);
(5) 統(tǒng)計(jì)投票四苇,與啟動(dòng)時(shí)過程相同孝凌。
(6) 改變服務(wù)器的狀態(tài),與啟動(dòng)時(shí)過程相同月腋。


Zookeeper有三個(gè)角色:領(lǐng)導(dǎo)者蟀架、跟隨者、觀察者榆骚,不同角色來執(zhí)行不同的任務(wù)片拍。
首先梳理幾個(gè)概念:

  1. 事務(wù)請(qǐng)求:
    在zk中,那些會(huì)改變服務(wù)器狀態(tài)的請(qǐng)求稱為事務(wù)請(qǐng)求(創(chuàng)建節(jié)點(diǎn)妓肢、更新數(shù)據(jù)捌省、刪除節(jié)點(diǎn)、創(chuàng)建會(huì)話等等)
  2. 非事務(wù)請(qǐng)求
    從zk讀取數(shù)據(jù)碉钠,但是不對(duì)狀態(tài)進(jìn)行任何修改的請(qǐng)求稱為非事務(wù)請(qǐng)求纲缓;

leader角色:
leader服務(wù)器是zk集群工作的核心,其主要工作有兩個(gè),
1.事務(wù)請(qǐng)求的唯一調(diào)度者和處理者,保證集群事物處理的順序性.
2.集群內(nèi)部各個(gè)服務(wù)器的調(diào)度者

Follower是zk集群的跟隨者卷拘,其主要工作有三個(gè):

  1. 處理客戶端非事務(wù)性請(qǐng)求,轉(zhuǎn)發(fā)事務(wù)請(qǐng)求給Leader服務(wù)器(事務(wù)請(qǐng)求都由Leader處理)
  2. 參與事務(wù)請(qǐng)求的投票 (同步master事物操作,做出回饋,master只有接收到半數(shù)以上的回饋投票才認(rèn)為該事物操作,執(zhí)行成功,此時(shí)的回饋投票就是事物投票)
  3. 參與Leader選舉投票

Observer充當(dāng)觀察者角色祝高;Observer觀察者是另一種跟隨者栗弟;

  1. 觀察zk集群的最新狀態(tài)變化并將這些狀態(tài)同步過來;
  2. 對(duì)于非事務(wù)請(qǐng)求可以進(jìn)行獨(dú)立的處理,對(duì)于事務(wù)請(qǐng)求工闺,則會(huì)轉(zhuǎn)發(fā)給Leader服務(wù)器進(jìn)行處理;
  3. Observer不會(huì)參與任何形式的投票乍赫,包括事務(wù)請(qǐng)求的投票和Leader選舉的投票;

如何配置observer模式斤寂?
在任何想變成observer模式的配置文件中加入如下配置:
peerType=observer
并在所有server的配置文件中耿焊,配置成observer模式的server的那行配置追加:observer,例如:
peerType=observer
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
server.4=localhost:2891:3891:observer

為什么有Observer角色
我們知道ZooKeeper的ZNode變更是要過半數(shù)投票通過遍搞,隨著機(jī)器的添加罗侯,因?yàn)榫W(wǎng)絡(luò)消耗等原因必定導(dǎo)致投票成本增加,從而導(dǎo)致寫性能的下降溪猿。
Observer是一種新型的ZooKeeper節(jié)點(diǎn)钩杰,能夠幫助解決上述問題,提供ZooKeeper的可擴(kuò)展性诊县。Observer不參與投票讲弄,僅僅是簡(jiǎn)單的接收投票結(jié)果。因此我們添加再多的Observer依痊,也不會(huì)影響集群的寫性能避除。除了這個(gè)區(qū)別,其它的和Follower基本上全然一樣胸嘁。比如:Client都能夠連接到他們(Observer)瓶摆,而且都能夠發(fā)送讀寫請(qǐng)求給他們,收到寫請(qǐng)求都會(huì)上報(bào)到Leader性宏。
Observer有另外一個(gè)優(yōu)勢(shì)群井,由于它不參與投票,所以他們不屬于ZooKeeper集群的關(guān)鍵部位毫胜,即使他們Failed书斜,或者從集群中斷開,也不會(huì)影響集群的可用性酵使。


zookeeper監(jiān)控與運(yùn)維
在zoo.cfg文件最下面加上如下配置開啟四字命令白名單:
4lw.commands.whitelist=stat, ruok, conf
或者
4lw.commands.whitelist=* --所有4字命令都可以用
(1)輸出server的詳細(xì)配置信息荐吉,(如果沒有nc,需要安裝:yum install nc -y)
echo conf | nc localhost 2181


image.png

(2)輸出指定server上所有客戶端連接的詳細(xì)信息口渔,包括連接信息的總覽稍坯,連接ip、端口號(hào)、該連接的發(fā)包數(shù)瞧哟、該連接的收包數(shù)混巧、連接的session Id、最后操作方式/命令勤揩、連接的時(shí)間戳咧党、超時(shí)時(shí)間(未確認(rèn))、最后的zxid陨亡、最后傍衡、響應(yīng)時(shí)間戳、連接的時(shí)間延時(shí)信息等负蠕;
echo cons | nc localhost 2181


image.png

(3)功能性命令蛙埂,重置所有連接的統(tǒng)計(jì)信息
echo crst | nc localhost 2181


image.png

(4)輸出所有等待隊(duì)列中的會(huì)話和臨時(shí)節(jié)點(diǎn)的信息,這個(gè)命令針對(duì)Leader執(zhí)行遮糖;
echo dump | nc localhost 2181


image.png

(5)輸出server簡(jiǎn)要狀態(tài)和連接的客戶端信息
echo stat | nc localhost 2181


image.png

(6)列出所有watcher信息绣的,以watcher的session為歸屬單元排列,列出該會(huì)話訂閱了哪些path欲账;
echo wchc | nc localhost 2181


image.png

(7)輸出一些ZK運(yùn)行時(shí)信息,版本屡江、延時(shí)、收包赛不、發(fā)包惩嘉、連接數(shù)、未完成客戶端請(qǐng)求數(shù)踢故、leader/follower 狀態(tài)文黎、znode 數(shù)、watch 數(shù)殿较、臨時(shí)節(jié)點(diǎn)數(shù)臊诊、近似數(shù)據(jù)大小 應(yīng)該是一個(gè)總和的值、打開文件描述符 數(shù)斜脂、最大文件描述符數(shù)、fllower數(shù)等等触机;


image.png
image.png

Zookeeper服務(wù)監(jiān)控

公司有zookeeper的集群環(huán)境帚戳,如何在線監(jiān)控,淘寶針對(duì)監(jiān)控Zookeeper的推出的一個(gè)開源項(xiàng)目TaoKeeper儡首,不過很久沒有更新了片任;

下載地址:https://github.com/alibaba/taokeeper/downloads

image.png

部署步驟
1.數(shù)據(jù)庫(kù)準(zhǔn)備
下載taokeeper.sql,初始化mysql數(shù)據(jù)庫(kù);
2.部署程序
下載taokeeper-monitor.tar.gz包,然后解壓到tomcat的webapp下;
3.配置文件設(shè)置
taokeeper-monitor-config.properties存放到指定路徑蔬胯,比如:tomcat /webapp/項(xiàng)目/taokeeper-monitor-config.properties


image.png

4.Tomcat啟動(dòng)配置

catalina.sh配置(配置在第一行即可)

JAVA_OPTS=”-DconfigFilePath="配置文件路徑taokeeper-monitor-config.properties”

瀏覽器訪問:http://192.168.10.128:8080/taokeeper-monitor

image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末对供,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌产场,老刑警劉巖鹅髓,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異京景,居然都是意外死亡窿冯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門确徙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來醒串,“玉大人,你說我怎么就攤上這事鄙皇∥叨模” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵伴逸,是天一觀的道長(zhǎng)缠沈。 經(jīng)常有香客問我,道長(zhǎng)违柏,這世上最難降的妖魔是什么博烂? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮漱竖,結(jié)果婚禮上禽篱,老公的妹妹穿的比我還像新娘。我一直安慰自己馍惹,他們只是感情好躺率,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著万矾,像睡著了一般悼吱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上良狈,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天后添,我揣著相機(jī)與錄音,去河邊找鬼薪丁。 笑死遇西,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的严嗜。 我是一名探鬼主播粱檀,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼漫玄!你這毒婦竟也來了茄蚯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渗常,沒想到半個(gè)月后壮不,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凳谦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年忆畅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尸执。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡家凯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出如失,到底是詐尸還是另有隱情绊诲,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響宛官,放射性物質(zhì)發(fā)生泄漏英染。R本人自食惡果不足惜樟蠕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦跟压、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至躲庄,卻和暖如春查剖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背噪窘。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工笋庄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倔监。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓直砂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親丐枉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

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