2021-01-29 分類(lèi): 網(wǎng)站建設(shè)
ZooKeeper 是大型分布式系統(tǒng)中可靠的協(xié)調(diào)系統(tǒng),它以樹(shù)狀結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),以領(lǐng)導(dǎo)選舉和信息同步機(jī)制保證了集群的高可用性,以事件通知機(jī)制協(xié)助事件訂閱者及時(shí)捕獲數(shù)據(jù)的變化,可協(xié)助實(shí)現(xiàn) Dubbo、Kafka 等架構(gòu)。本文以 CentOS 和 Windows 為例,總結(jié)了 ZooKeeper 集群的部署操作,并以自帶的腳本命令操作其數(shù)據(jù)。
1.概述
ZooKeeper 是 Hadoop 的一個(gè)子項(xiàng)目,是大型分布式系統(tǒng)中可靠的協(xié)調(diào)系統(tǒng)。分布式應(yīng)用程序以此實(shí)現(xiàn)更高級(jí)別的服務(wù),可用于分布式系統(tǒng)的配置維護(hù)、名字服務(wù)、分布式同步、組服務(wù)等:
用于 Dubbo: 作為配置中心;
用于 Kafka: 作為 Broker/Producer/Consumer 共享的配置中心。
官網(wǎng)首頁(yè): https://zookeeper.apache.org/
官網(wǎng)文檔: https://zookeeper.apache.org/doc/current/
1.1 ZAB協(xié)議
集群間通過(guò) ZAB(ZooKeeper Atomic Broadcast)協(xié)議保持?jǐn)?shù)據(jù)一致性,該協(xié)議包括兩個(gè)階段:
1.1.1 領(lǐng)導(dǎo)選舉(Leader Election)
選舉出一個(gè) Leader(所有寫(xiě)操作傳送給 Leader),其他機(jī)器被稱為 Follower;
當(dāng)前 Leader 崩潰或失去大多數(shù) Follower 后,會(huì)選舉出新的 Leader;
1.1.2 信息同步(Atomic broadcast)
用于同步 Leader 與 Follower 之間的信息,保證數(shù)據(jù)一致。
1.2 內(nèi)部原理
https://zookeeper.apache.org/doc/current/zookeeperOver.html
存儲(chǔ)方式與標(biāo)準(zhǔn)文件系統(tǒng)非常相似,每個(gè)節(jié)點(diǎn)稱作 znode,本身包含數(shù)據(jù),還可以擁有子節(jié)點(diǎn)。
客戶端以TCP連接一臺(tái)節(jié)點(diǎn),該節(jié)點(diǎn)故障時(shí),客戶端會(huì)切換至其他節(jié)點(diǎn)。
客戶端可以訂閱某些節(jié)點(diǎn)的事件(watcher機(jī)制),當(dāng)節(jié)點(diǎn)內(nèi)容或其子節(jié)點(diǎn)有變化時(shí),客戶端會(huì)收到通知。
1.3 系統(tǒng)要求
ZooKeeper 以 Java 版本運(yùn)行,Java 版本要求為 1.6+;
支持的操作系統(tǒng)包括: GNU/Linux, Solaris, FreeBSD, Windows。
2.Linux 下安裝
https://zookeeper.apache.org/doc/current/zookeeperStarted.html
2.1 下載并解壓(35M)
2.2 設(shè)置環(huán)境變量
- ## sudo vim /etc/profile ## 所有用戶有效
- export ZOOKEEPER_HOME=/opt/zookeeper-3.4.11
- export PATH=$PATH:$ZOOKEEPER_HOME/bin
文件保存后,Linux用戶重新登錄后生效。
2.3 準(zhǔn)備目錄與配置文件
- # sudo vim $ZOOKEEPER_HOME/bin/zkInit.sh
- # sudo -E sh $ZOOKEEPER_HOME/bin/zkInit.sh
- for INDEX in {1..3}; do
- sudo rm -rf $ZOOKEEPER_HOME/{data,logs}/$INDEX
- sudo mkdir -p $ZOOKEEPER_HOME/{data,logs}/$INDEX
- echo $INDEX | sudo tee $ZOOKEEPER_HOME/data/$INDEX/myid > /dev/null
- # zoo.cfg 參考: grep -v "^#" $ZOOKEEPER_HOME/conf/zoo_sample.cfg
- cat > $ZOOKEEPER_HOME/conf/zoo-$INDEX.cfg << EOF
- tickTime=2000 ## ZooKeeper 的最小時(shí)間單位(ms)
- initLimit=10 ## 投票選舉新 leader 的初始化時(shí)間(以 tickTime 為單位)
- syncLimit=5 ## Leader 檢測(cè) Follower 可用性心跳的超時(shí)時(shí)間(以 tickTime 為單位)
- clientPort=218$INDEX ## 客戶端用來(lái)連接 ZooKeeper 的端口
- dataDir=$ZOOKEEPER_HOME/data/$INDEX ## 數(shù)據(jù)目錄(存儲(chǔ)內(nèi)存數(shù)據(jù)庫(kù)快照)
- dataLogDir=$ZOOKEEPER_HOME/logs/$INDEX ## 日志目錄(存儲(chǔ)事務(wù)日志)
- server.1=localhost:2281:2291
- server.2=localhost:2282:2292
- server.3=localhost:2283:2293
- EOF
- done
其中的 clientPort=218$INDEX 是提供給客戶端連接的端口(2181,2182,2183);
其中的 server.N = hostname : port1 : port2:
必須生成文件 $ZOOKEEPER_HOME/data/%n/myid,其內(nèi)容為 zoo.cnf 中的 N(服務(wù)器ID), 否則拋出異常 java.lang.IllegalArgumentException: $ZOOKEEPER_HOME/data/{n}/myid file is missing
2.4 服務(wù)的配置并啟動(dòng)
- ## sudo vim /usr/lib/systemd/system/zookeeper@.service
- ## 其中的 %i 將來(lái)會(huì)被替換為具體的 1/2/3
- [Unit]
- Description=ZooKeeper
- After=syslog.target network.target
- [Service]
- Type=forking
- Environment="ZOOCFG=zoo-%i.cfg"
- ExecStart=/opt/zookeeper-3.4.11/bin/zkServer.sh start
- ExecStop=/opt/zookeeper-3.4.11/bin/zkServer.sh stop
- [Install]
- WantedBy=multi-user.target
配置為自動(dòng)啟動(dòng),并立即啟動(dòng):
- sudo systemctl daemon-reload
- sudo systemctl enable zookeeper@{1,2,3}
- sudo systemctl start zookeeper@{1,2,3}
- sudo netstat -natp | grep LISTEN | grep -E "218|228|229"
- # sudo systemctl stop zookeeper@{1,2,3}
2.5 防火墻放行
如果非本機(jī)應(yīng)用需要連接 ZooKeeper,必須把所有 clientPort 端口放行。
- ### sudo vim /etc/sysconfig/iptables
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 2182 -j ACCEPT
- -A INPUT -m state --state NEW -m tcp -p tcp --dport 2183 -j ACCEPT
- ### 重啟生效: sudo systemctl restart iptables
2.6 客戶端驗(yàn)證
- zkCli.sh -server localhost:2181 ## 進(jìn)入命令行狀態(tài)
- help ## 顯示所有命令格式
- quit ## 退出命令行狀態(tài)
- history ## 顯示歷史命令
- ls path [watch]
- createpath data acl
- delete path [version]
- set path data [version]
- get path [watch]
- stat path [watch]
- sync path
- listquota path
- setquota -n|-b val path
- delquota [-n|-b] path
- addauth scheme auth
- setAcl path acl
- getAcl path
- printwatches on|off
- redo cmdno
也可集連接和命令于一行:
- zkCli.sh -server localhost:2181 ls /
2.7 清空數(shù)據(jù)【慎用】
- sudo systemctl stop zookeeper@{1,2,3}
- sudo rm -rf $ZOOKEEPER_HOME/{logs,data}/{1,2,3}/version-*
- sudo systemctl start zookeeper@{1,2,3}
2.8 卸載服務(wù)【慎用】
- sudo systemctl stop zookeeper@{1,2,3}
- sudo systemctl disable zookeeper@{1,2,3}
- sudo rm -rf $ZOOKEEPER_HOME
3.Windows 下安裝(可用于開(kāi)發(fā))
3.1 下載
https://archive.apache.org/dist/zookeeper/
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
3.2 安裝
3.2.1 解壓
3.2.2 修改系統(tǒng)環(huán)境變量
- set ZOOKEEPER_HOME={???}\zookeeper-3.4.11
- set PATH=%ZOOKEEPER_HOME%\bin
3.2.3 修改 conf\zoo-%n.cfg
- cd/d %ZOOKEEPER_HOME%
- del /q bin\*.sh
- rd/s/q data logs
- for %n in (1,2,3) do @mkdir logs\%n
- for %n in (1,2,3) do @mkdir data\%n
- for %n in (1,2,3) do @echo %n> data\%n\myid
- for %n in (1,2,3) do @copy/b conf\zoo_sample.cfg conf\zoo-%n.cfg
修改文件 conf\zoo-%n.cfg 如下(分別替換其中的 %n 為 1,2,3):
- tickTime=2000
- initLimit=10
- syncLimit=5
- clientPort=218%n
- dataDir=D:/Software/Architecture/zookeeper-3.4.11/data/%n
- dataLogDir=D:/Software/Architecture/zookeeper-3.4.11/logs/%n
- server.1=localhost:2281:2291
- server.2=localhost:2282:2292
- server.3=localhost:2283:2293
參數(shù)說(shuō)明與 Linux 中相關(guān)內(nèi)容一樣。
3.2.4 修改腳本
刪除 bin\zkEnv.cmd 中的 set ZOOCFG=%ZOOCFGDIR%\zoo.cfg 一行;
- for %n in (1,2,3) do @copy/b bin\zkServer.cmd bin\zkServer%n.cmd
修改各個(gè)文件 zkServer%n.cmd 在 call "%~dp0zkEnv.cmd" 之前加一行:
set ZOOCFG=%~dp0%..\conf\zoo-%n.cfg,注意替換 %n 分別為 1/2/3
3.3 啟動(dòng)服務(wù)
- zkServer1.cmd
- zkServer2.cmd
- zkServer3.cmd
3.4 客戶端驗(yàn)證
- zkCli.cmd -server centos:2181 ## 連接 Linux 上服務(wù)
- zkCli.cmd -server localhost:2181 ## 連接本機(jī)上服務(wù)
- ## 更多內(nèi)容參見(jiàn)前面 Linux 中相應(yīng)部分
4.集群部署(生產(chǎn)環(huán)境)
管理員指南: https://zookeeper.apache.org/doc/current/zookeeperAdmin.html
分享題目:ZooKeeper 原理與服務(wù)器集群部署
分享鏈接:http://jinyejixie.com/news5/98055.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站制作、標(biāo)簽優(yōu)化、電子商務(wù)、全網(wǎng)營(yíng)銷(xiāo)推廣、小程序開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容