Zookeeper
Zookeeper是一個開源的分布式的,為分布式框架提供協(xié)調(diào)服務的Apache項目
Zookeeper 工作機制
Zookeeper從設(shè)計模式角度來理解:是一個基于觀察者模式設(shè)計的分布式服務管理框架
一旦這些數(shù)據(jù)的狀態(tài)發(fā)生變化,Zookeeper就將負責通知已經(jīng)在Zookeeper上注冊的那些觀察者做出相應的反應
也就是說 Zookeeper = 文件系統(tǒng) + 通知機制
特點
- Zookeeper:一個領(lǐng)導者(Leader),多個跟隨者(Follower)組成的集群。
- Zookeepe集群中只要有半數(shù)以上節(jié)點存活,Zookeeper集群就能正常服務。所以Zookeeper適合安裝奇數(shù)臺服務器。
- 全局數(shù)據(jù)一致:每個Server保存一份相同的數(shù)據(jù)副本,Client無論連接到哪個Server,數(shù)據(jù)都是一致的
- 更新請求順序執(zhí)行,來自同一個Client的更新請求按其發(fā)送順序依次執(zhí)行,即先進先出
- 數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗
- 實時性,在一定時間范圍內(nèi),Client能讀到最新數(shù)據(jù)
Zookeeper 數(shù)據(jù)結(jié)構(gòu)
ZooKeeper數(shù)據(jù)模型的結(jié)構(gòu)與Linux文件系統(tǒng)很類似,整體上可以看作是一棵樹,每個節(jié)點稱做一個ZNode
每一個ZNode默認能夠存儲1MB的數(shù)據(jù),每個ZNode都可以通過其路徑唯一標識
Zookeeper 選舉機制
第一次啟動選舉機制
- 服務器1啟動,發(fā)起一次選舉。服務器1投自己一票。此時服務器1票數(shù)一票,不夠半數(shù)以上(3票)
- 選舉無法完成,服務器1狀態(tài)保持為LOOKING;
- 服務器2啟動,再發(fā)起一次選舉。服務器1和2分別投自己一票并交換選票信息
- 此時服務器1發(fā)現(xiàn)服務器2的myid比自己目前投票推舉的(服務器1)大,更改選票為推舉服務器2
- 此時服務器1票數(shù)0票,服務器2票數(shù)2票,沒有半數(shù)以上結(jié)果,選舉無法完成,服務器1,2狀態(tài)保持LOOKING
- 服務器3啟動,發(fā)起一次選舉。此時服務器1和2都會更改選票為服務器3
- 此次投票結(jié)果:服務器1為0票,服務器2為0票,服務器3為3票
- 此時服務器3的票數(shù)已經(jīng)超過半數(shù),服務器3當選Leader
- 服務器1,2更改狀態(tài)為FOLLOWING,服務器3更改狀態(tài)為LEADING;
- 服務器4啟動,發(fā)起一次選舉。此時服務器1,2,3已經(jīng)不是LOOKING狀態(tài),不會更改選票信息
- 交換選票信息結(jié)果:服務器3為3票,服務器4為1票
- 此時服務器4服從多數(shù),更改選票信息為服務器3,并更改狀態(tài)為FOLLOWING;
- 服務器5啟動,同4一樣當小弟
非第一次啟動選舉機制
當ZooKeeper 集群中的一臺服務器出現(xiàn)以下兩種情況之一時,就會開始進入Leader選舉
- 服務器初始化啟動
- 服務器運行期間無法和Leader保持連接
而當一臺機器進入Leader選舉流程時,當前集群也可能會處于以下兩種狀態(tài):
- 集群中本來就已經(jīng)存在一個Leader
- 對于已經(jīng)存在Leader的情況,機器試圖去選舉Leader時,會被告知當前服務器的Leader信息
- 對于該機器來說,僅僅需要和 Leader機器建立連接,并進行狀態(tài)同步即可
選舉Leader規(guī)則?
- EPOCH大的直接勝出
- EPOCH相同,事務id大的勝出
- 事務id相同,服務器id大的勝出
部署 Zookeeper 集群?
前期準備
三臺服務器
192.168.154.10? ? ??
192.168.154.20? ?22?
192.168.154.30? ?23
//關(guān)閉防火墻
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
//安裝 JDK
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
java -version
//下載安裝包
官方下載地址:https://archive.apache.org/dist/zookeeper/
cd /opt
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz
安裝 Zookeeper —— 所有機器都配置
//解壓壓縮包到指定目錄
cd /opt
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
mv apache-zookeeper-3.5.7-bin /usr/local/zookeeper-3.5.7
//修改配置文件
cd /usr/local/zookeeper-3.5.7/conf/
cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
在每個節(jié)點上創(chuàng)建數(shù)據(jù)目錄和日志目錄
在每個節(jié)點的dataDir指定的目錄下創(chuàng)建一個 myid 的文件
文章來源:http://www.zghlxwxcb.cn/news/detail-737132.html
配置 Zookeeper 啟動腳本
vim /etc/init.d/zookeeper
#!/bin/bash
#chkconfig:2345 20 90
#description:Zookeeper Service Control Script
ZK_HOME='/usr/local/zookeeper-3.5.7'
case $1 in
start)
echo "---------- zookeeper 啟動 ------------"
$ZK_HOME/bin/zkServer.sh start
;;
stop)
echo "---------- zookeeper 停止 ------------"
$ZK_HOME/bin/zkServer.sh stop
;;
restart)
echo "---------- zookeeper 重啟 ------------"
$ZK_HOME/bin/zkServer.sh restart
;;
status)
echo "---------- zookeeper 狀態(tài) ------------"
$ZK_HOME/bin/zkServer.sh status
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
esac
設(shè)置開機自啟
文章來源地址http://www.zghlxwxcb.cn/news/detail-737132.html
//分別啟動 Zookeeper
service zookeeper start
//查看當前狀態(tài)
service zookeeper status
到了這里,關(guān)于Zookeeper 集群搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!