摘要:今天就在這給大家介紹下多節(jié)點(diǎn)的集群搭建此次用到臺(tái)虛擬的系統(tǒng),的大部分操作都是通過(guò)選舉產(chǎn)生的。完成配置之后分發(fā)給其他兩個(gè)節(jié)點(diǎn)在每個(gè)節(jié)點(diǎn)上依次啟動(dòng)后,檢查集群是否啟動(dòng)成功返回結(jié)果可能為或則表示成功啟動(dòng)集群。
zk詳細(xì)介紹
寫(xiě)在開(kāi)始
在上次關(guān)于zookeeper文章中給大家介紹了單節(jié)點(diǎn)情況下啟動(dòng)運(yùn)行zk相關(guān)步驟,很簡(jiǎn)單,但是也很有必要。今天就在這給大家介紹下zk多節(jié)點(diǎn)的集群搭建(此次用到3臺(tái)虛擬的centos7系統(tǒng),Zookeeper的大部分操作都是通過(guò)選舉產(chǎn)生的。比如,標(biāo)記一個(gè)寫(xiě)是否成功是要在超過(guò)一半節(jié)點(diǎn)發(fā)送寫(xiě)請(qǐng)求成功時(shí)才認(rèn)為有效。同樣,Zookeeper選擇領(lǐng)導(dǎo)者節(jié)點(diǎn)也是在超過(guò)一半節(jié)點(diǎn)同意時(shí)才有效。最后,Zookeeper是否正常是要根據(jù)是否超過(guò)一半的節(jié)點(diǎn)正常才算正常。這是基于CAP的一致性原理。故zk的集群節(jié)點(diǎn)數(shù)一般為奇數(shù))。
為什么是zk
在分布式應(yīng)用中,經(jīng)常會(huì)出現(xiàn)部分失敗的情況,即當(dāng)節(jié)點(diǎn)間傳遞消息的時(shí)候由于網(wǎng)絡(luò)或者接收者進(jìn)程死掉等原因,發(fā)送者無(wú)法知道接收者是否收到消息。由于部分失敗是分布式系統(tǒng)固有的特征因此zookeeper并不能避免部分失敗,但是它可以幫你在部分失敗的時(shí)候進(jìn)行正確處理,保證最終正確。
zookeeper具有的特征
1:zookeeper提供豐富的構(gòu)件(building block)來(lái)實(shí)現(xiàn)很多協(xié)調(diào)數(shù)據(jù)結(jié)構(gòu)和協(xié)議
2:訪問(wèn)原子性,客戶(hù)端要么讀到所有數(shù)據(jù),要么讀取失敗,不會(huì)出現(xiàn)只讀取部分的情況
3:zookeeper運(yùn)行在一組機(jī)器上,具有高可用性,幫助系統(tǒng)避免單點(diǎn)故障,同時(shí)刪掉故障服務(wù)器
4:順序一致性:任意客戶(hù)端的更新請(qǐng)求會(huì)被按照發(fā)送順序提交
5:?jiǎn)我幌到y(tǒng)映像:當(dāng)一臺(tái)服務(wù)器故障,導(dǎo)致它的客戶(hù)端需要連接其它服務(wù)器的時(shí)候,所有更新晚于故障服務(wù)器的服務(wù)器都不會(huì)接收請(qǐng)求,一直到更新趕上故障服務(wù)器
6:及時(shí)性:任何客戶(hù)端能看到的滯后都是有限的,不會(huì)超過(guò)幾十秒,且提供sync操作強(qiáng)制客戶(hù)端所連的服務(wù)器與領(lǐng)導(dǎo)者同步
7:會(huì)話:每個(gè)客戶(hù)端連接時(shí)會(huì)嘗試連接到配置列表中的一臺(tái)服務(wù)器,一旦失敗會(huì)自動(dòng)連接另一臺(tái)服務(wù)器依次類(lèi)推,知道成功連接一臺(tái)服務(wù)器,從而創(chuàng)建一個(gè)會(huì)話,客戶(hù)端可以位每個(gè)會(huì)話設(shè)置超時(shí)時(shí)間,一旦會(huì)話過(guò)期,則所有短暫znode會(huì)丟失,因?yàn)閦ookeeper會(huì)自動(dòng)發(fā)送心跳包,所以很少發(fā)生
8:約會(huì)機(jī)制(rendezvous),在交互的過(guò)程中,被協(xié)調(diào)的各方不許要事先彼此了解,甚至不必同時(shí)存在
9:ACL:zookeeper提供了digest(通過(guò)用戶(hù)名密碼),host(通過(guò)主機(jī)名),ip(通過(guò)ip地址)3種身份驗(yàn)證模式,依賴(lài)與 zookeeper的身份驗(yàn)證機(jī)制每個(gè)ACL都是一個(gè)身份對(duì)應(yīng)一組權(quán)限,如果我們要給demo.com的客戶(hù)端域一個(gè)讀權(quán)限在java語(yǔ)言中可以這樣創(chuàng)建:new ACL(Perms.READ, new Id("host", "demo.com"));Ids.OPEN_ACL_UNSAFE是將所有ADMIN之外的權(quán)限授予每個(gè)人;另zookeeper還可以集成第三方的身份驗(yàn)證系統(tǒng)。
10:提供關(guān)于通用協(xié)調(diào)模式的開(kāi)源共享資源庫(kù)
11:高性能的(官方數(shù)據(jù))對(duì)以寫(xiě)為主的工作負(fù)載來(lái)說(shuō)使用5臺(tái)不錯(cuò)的機(jī)器基準(zhǔn)吞吐量達(dá)到10000+
集群安裝根據(jù)教程安裝一臺(tái)鏡像為centos7 minimal系統(tǒng)的虛擬機(jī),在目錄:/etc/sysconfig/network-scripts/ifcfg-ens33(多半文件后的數(shù)值不一樣)配置網(wǎng)卡如下
重啟網(wǎng)卡:service network restart
檢查自己ip是否于配置的一樣: ip addr
將當(dāng)前已經(jīng)配置好網(wǎng)絡(luò)的虛擬機(jī)保存一個(gè)快照,如果后面安裝失敗可以還原回來(lái)。
2.關(guān)閉系統(tǒng)在克隆兩個(gè)同樣的虛擬機(jī)
完成克隆后要記得修改其ip地址,重復(fù)步驟1即可。
3.下載zooekeep并解壓到/usr/localhost 目錄,在conf文件下添加zoo.cfg文件,文件內(nèi)容如下:
tickTime=2000
dataDir=/opt/zookeeper
clientPort=2181
initLimit=5
syncLimit=2
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
initLimit:這個(gè)配置項(xiàng)是用來(lái)配置Zookeeper 接受客戶(hù)端(這里所說(shuō)的客戶(hù)端不是用戶(hù)連接 Zookeeper 服務(wù)器的客戶(hù)端,而是 Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器)初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)。當(dāng)已經(jīng)超過(guò) 10 個(gè)心跳的時(shí)間(也就是 tickTime)長(zhǎng)度后 Zookeeper 服務(wù)器還沒(méi)有收到客戶(hù)端的返回信息,那么表明這個(gè)客戶(hù)端連接失敗??偟臅r(shí)間長(zhǎng)度就是 5*2000=10 秒。
syncLimit:這個(gè)配置項(xiàng)標(biāo)識(shí)Leader 與 Follower 之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度,最長(zhǎng)不能超過(guò)多少個(gè) tickTime 的時(shí)間長(zhǎng)度,總的時(shí)間長(zhǎng)度就是 2*2000=4 秒。
server.A=B:C:D:其中 A 是一個(gè)數(shù)字,表示這個(gè)是第幾號(hào)服務(wù)器;B 是這個(gè)服務(wù)器的 ip 地址;C 表示的是這個(gè)服務(wù)器與集群中的 Leader 服務(wù)器交換信息的端口;D 表示的是萬(wàn)一集群中的 Leader 服務(wù)器掛了,需要一個(gè)端口來(lái)重新進(jìn)行選舉,選出一個(gè)新的 Leader,而這個(gè)端口就是用來(lái)執(zhí)行選舉時(shí)服務(wù)器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實(shí)例通信端口號(hào)不能一樣,所以要給它們分配不同的端口號(hào)。
除了修改 zoo.cfg 配置文件,集群模式下還要配置一個(gè)文件 myid,這個(gè)文件在 dataDir 目錄下,這個(gè)文件里面就有一個(gè)數(shù)據(jù)就是 A 的值,Zookeeper 啟動(dòng)時(shí)會(huì)讀取這個(gè)文件,拿到里面的數(shù)據(jù)與 zoo.cfg 里面的配置信息比較從而判斷到底是那個(gè) server。
完成配置之后分發(fā)給其他兩個(gè)節(jié)點(diǎn):
scp -r zookeeper-3.5.2-alpha/ [email protected]:/usr/local/
scp -r zookeeper-3.5.2-alpha/ [email protected]:/usr/local/
在每個(gè)節(jié)點(diǎn)上依次啟動(dòng)后,檢查集群是否啟動(dòng)成功
sh zkServer.sh status 返回結(jié)果可能為leader或follower則表示成功啟動(dòng)zk集群。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67690.html
摘要:本章內(nèi)容主要講的是集群搭建相關(guān)的知識(shí)。在集群模式下,最少需要三個(gè)節(jié)點(diǎn)。并且官方推薦你使用奇數(shù)數(shù)量的節(jié)點(diǎn)來(lái)組成集群。這個(gè)值必須是集群中唯一的。在確認(rèn)每臺(tái)服務(wù)器上的和文件修改創(chuàng)建之后,在三個(gè)節(jié)點(diǎn)上分別執(zhí)行命令,啟動(dòng)。 前言 同道們,好久不見(jiàn),上一章中,我主要講了Zookeeper的一些基礎(chǔ)的知識(shí)點(diǎn)。數(shù)據(jù)模型 + 原語(yǔ)集 + Watches機(jī)制。本章內(nèi)容主要講的是集群搭建相關(guān)的知識(shí)。 本篇的...
摘要:的設(shè)計(jì)目標(biāo)是將那些復(fù)雜且容易出錯(cuò)的分布式一致性服務(wù)封裝起來(lái),構(gòu)成一個(gè)高效可靠的原語(yǔ)集,并以一系列簡(jiǎn)單易用的接口提供給用戶(hù)使用。具有不可分割性即原語(yǔ)的執(zhí)行必須是連續(xù)的,在執(zhí)行過(guò)程中不允許被中斷。 該文已加入開(kāi)源文檔:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識(shí))。地址:https://github.com/Snailclimb... showImg(https:...
摘要:前言記錄集群搭建的過(guò)程什么是是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是的一個(gè)開(kāi)源的實(shí)現(xiàn),是和的重要組件。 showImg(https://segmentfault.com/img/remote/1460000017993000); 前言 記錄Zookeeper集群搭建的過(guò)程! 什么是 Zookeeper ? ZooKeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),...
閱讀 4123·2021-11-17 09:33
閱讀 3332·2021-10-08 10:05
閱讀 3230·2021-09-22 15:36
閱讀 1210·2021-09-06 15:02
閱讀 2817·2019-08-29 12:45
閱讀 1636·2019-08-26 13:40
閱讀 3477·2019-08-26 13:37
閱讀 475·2019-08-26 13:37