日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

zookeeper快速入门——部署

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zookeeper快速入门——部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? zookeeper有兩種運行模式:獨立模式和仲裁模式。獨立模式就是只運行一個Zookeeper Server,這自然沒法解決服務崩潰導致系統不可用的問題。仲裁模式就是以集群的方式運行Zookeeper Server,這樣在Leader不可用時,集群內部會發起選舉,而推選一個新的Leader。既然我們要使用zookeeper,肯定是有分布式協作需求,所以本文只講述仲裁模式的部署。(轉載請指明出于breaksoftware的csdn博客)

? ? ? ? 為了方便大家測試,我們將Zookeeper Server部署在同一臺機器上,通過對外提供不同的端口號來模擬多機部署。

? ? ? ? 首選我們要選擇部署幾個Server服務(不考慮Observer)。2個?3個?4個?如果一定要在三個數字中選,大部分建議是選擇3個。

? ? ? ? 如果選擇2,那么依據少數服從多數的原則,要求Leader的必須獲得2票。如果壞了一臺機器,剩下的那臺機器肯定得不到2票,那么整個系統將不可用。于是損失一臺機器的系統可用率是0。

? ? ? ? 如果選擇是3,要求Leader的票數也必須>=2。如果壞了一臺機器,剩下的兩臺機器可以抉擇出哪臺可以得到2票,從而系統可用。如果又壞了一臺,剩下一臺機器不可能得到2票。于是損失一臺機器的系統可用率是100%,損失兩臺機器的系統可用率是0。

? ? ? ? 如果選擇4,要求Leader的票數>=3。如果壞了一臺機器,剩下的三臺機器可以抉擇出哪臺可以得到3票,從而系統可用。如果又壞了一臺,剩下的兩臺機器不可能得到3票。于是損失一臺機器的系統可用率是100%,損失兩臺機器的系統可用率是0。

集群機器數損失1臺機器系統可用率損失2臺機器系統可用率
200
3100%0
4100%0

? ? ? ? 可以看出來在損失2臺機器的情況下,集群部署3臺或者4臺的系統可用率是相等的。部署4臺并不比部署3臺要可靠。

? ? ? ? 也許有人開始質疑“少數服從多數”這個選舉原則。如果4臺機器只要有機器獲得2票,就可以被認為是Leader,那不就提高了可用率了么?答案是這樣的設計會導致嚴重的問題。

? ? ? ? 如下圖,ABCD構成了一個集群,其中A是Leader。開始時甲連接的是A機器,ABCD各機器上服務保持了數據一致性。假如此時乙用戶要連接任何一臺服務,那么甲乙對數據的修改是彼此透明的。

? ? ? ? 但是,如果此時CD和AB斷開了連接。以獲得2票成為Leader的原則,很有可能CD選舉出C為Leader,D從此和C同步數據。AB選舉出A為Leader,B只和A同步數據。假如此時乙用戶要接入,而不巧接入到C或者D。那么甲乙對數據的修改就是隔離的。這樣一個系統中出現兩個Leader的現象稱之為“腦裂”,這當然是不能接受的。


? ? ? ? 選擇好數量后,我們從https://www.apache.org/dyn/closer.cgi/zookeeper/下載并解壓壓縮包。以我環境為例,解壓后文件路徑為

$ pwd
/home/work/fangliang/zookeeper-3.4.11

? ? ? ? 進入該目錄,新建一個叫multi_server的文件夾。然后在其下新建z1、z2和z3三個目錄,這三個目錄分別用于保存三個Zookeeper Server的信息。

mkdir multi_server
cd multi_server
mkdir -p z1/data
mkdir -p z2/data
mkdir -p z3/data
echo 1 >  z1/data/myid
echo 2 >  z2/data/myid
echo 3 >  z3/data/myid

? ? ? ? myid文件的內容是其對應的服務id。

? ? ? ? 然后在z1、z2和z3下分別創建z1.cfg,z2.cfg,z3.cfg三個文件。以z1.cfg為例,我們在文件中填充

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/work/fangliang/zookeeper-3.4.11/multi_server/z1/data
clientPort=2181
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445

? ? ? ? 相應的,我們需要將z2.cfg和z3.cfg文件中dataDir指向自己目錄,clientPort指向其他的端口

dataDir=/home/work/fangliang/zookeeper-3.4.11/multi_server/z2/data
clientPort=2182
dataDir=/home/work/fangliang/zookeeper-3.4.11/multi_server/z3/data
clientPort=2183

? ? ? ? 整個文件的目錄樹如下

multi_server/
|-- z1
|   |-- data
|   |   |-- myid
|   |-- z1.cfg
|-- z2
|   |-- data
|   |   |-- myid|   
|   |-- z2.cfg
`-- z3|-- data|   |-- myid`-- z3.cfg

? ? ? ? 接下來我們開始啟動各個服務。

? ? ? ? 首先啟動z1。

? ? ? ? 且到z1目錄下,執行

../../bin/zkServer.sh start ./z1.cfg 
? ? ? ? 當前目錄下會生成一個日志文件zookeeper.out。


? ? ? ? 第三行我們看到它發起了一次選舉,但是由于其他兩個服務沒有啟動,所以整個系統還不可用。

? ? ? ? 然后我們啟動z2。

? ? ? ? 切到z2目錄下,執行

../../bin/zkServer.sh start ./z2.cfg

? ? ? ? 我們查看下z2目錄下日志文件


? ? ? ? 第三行顯示z2也發起了一次選舉,由于此時z3沒有啟動,所以它只能和z1進行通信。最終它們使用FastLeaderElection協商出z2作為Leader。


? ? ? ? 然后z2和z1進行了數據同步。

? ? ? ? 我們再看下z1日志的變化。


? ? ? ? z1仍然和z3通信失敗。但是和z2通信后,自己成為了follower。

? ? ? ? 最后我們啟動z3。

? ? ? ? 切到z3目錄下執行

../../bin/zkServer.sh start ./z3.cfg

? ? ? ? 查看z3的日志


? ? ? ? z3發起了一次選舉,但是z2此時已經是leader了,所以z3順理成章的成為follower,并從z2服務同步了一份數據快照


? ? ? ? 此時看下z1的日志,它發現了z3


? ? ? ? 再看下z2的日志,它發現z3后,給z3同步了一次數據


? ? ? ? 我們切換到bin目錄,執行

./zkCli.sh  -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183

? ? ? ? 讓Client連接到上述三臺機器中的一臺,可以看到如下顯示


總結

以上是生活随笔為你收集整理的zookeeper快速入门——部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。