一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - ZooKeeper 原理與服務器集群部署

ZooKeeper 原理與服務器集群部署

2019-07-27 17:51kefeng.wang博客王克鋒 服務器知識

ZooKeeper 是大型分布式系統中可靠的協調系統,它以樹狀結構存儲數據,以領導選舉和信息同步機制保證了集群的高可用性,以事件通知機制協助事件訂閱者及時捕獲數據的變化,可協助實現

ZooKeeper 是大型分布式系統中可靠的協調系統,它以樹狀結構存儲數據,以領導選舉和信息同步機制保證了集群的高可用性,以事件通知機制協助事件訂閱者及時捕獲數據的變化,可協助實現 Dubbo、Kafka 等架構。本文以 CentOS 和 Windows 為例,總結了 ZooKeeper 集群的部署操作,并以自帶的腳本命令操作其數據。

ZooKeeper 原理與服務器集群部署

1.概述

ZooKeeper 是 Hadoop 的一個子項目,是大型分布式系統中可靠的協調系統。分布式應用程序以此實現更高級別的服務,可用于分布式系統的配置維護、名字服務、分布式同步、組服務等:

用于 Dubbo: 作為配置中心;

用于 Kafka: 作為 Broker/Producer/Consumer 共享的配置中心。

官網首頁: https://zookeeper.apache.org/

官網文檔: https://zookeeper.apache.org/doc/current/

1.1 ZAB協議

ZooKeeper 原理與服務器集群部署

集群間通過 ZAB(ZooKeeper Atomic Broadcast)協議保持數據一致性,該協議包括兩個階段:

1.1.1 領導選舉(Leader Election)

選舉出一個 Leader(所有寫操作傳送給 Leader),其他機器被稱為 Follower;

當前 Leader 崩潰或失去大多數 Follower 后,會選舉出新的 Leader;

1.1.2 信息同步(Atomic broadcast)

用于同步 Leader 與 Follower 之間的信息,保證數據一致。

1.2 內部原理

https://zookeeper.apache.org/doc/current/zookeeperOver.html

存儲方式與標準文件系統非常相似,每個節點稱作 znode,本身包含數據,還可以擁有子節點。

客戶端以TCP連接一臺節點,該節點故障時,客戶端會切換至其他節點。

客戶端可以訂閱某些節點的事件(watcher機制),當節點內容或其子節點有變化時,客戶端會收到通知。

ZooKeeper 原理與服務器集群部署

高性能:多讀少寫的情況下,速度很快;存儲于內存中,并有持久存儲中的事務日志和快照;

高可用性(無中心化結構可避免單點故障): 個別節點故障不影響整體使用;

監視機制: 客戶端可以監視一個結點(node),當結點斷開或有修改時,客戶端會收到通知;

順序一致性: 來自客戶端的更新將按照它們發送的順序進行應用。

原子性: 保證數據完整、一致,更新成功或失敗,沒有部分結果。

單系統映像: 無論服務器連接到哪個服務器,客戶端都會看到相同的服務視圖。

可靠性: 一旦更新被應用,它將一直持續到客戶覆蓋更新。

及時性: 系統的客戶觀點在一定的時間范圍內保證是最新的。

1.3 系統要求

ZooKeeper 以 Java 版本運行,Java 版本要求為 1.6+;

支持的操作系統包括: GNU/Linux, Solaris, FreeBSD, Windows。

2.Linux 下安裝

https://zookeeper.apache.org/doc/current/zookeeperStarted.html

2.1 下載并解壓(35M)

#https://archive.apache.org/dist/zookeeper/

#https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/

wgethttps://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

sudorm-rf/opt/zookeeper-3.4.11

sudotar-zxfzookeeper-3.4.11.tar.gz-C/opt

sudochown-Rroot:root/opt/zookeeper-3.4.11

sudorm-rf/opt/zookeeper-3.4.11/bin/*.cmd

2.2 設置環境變量

##sudovim/etc/profile##所有用戶有效

exportZOOKEEPER_HOME=/opt/zookeeper-3.4.11

exportPATH=$PATH:$ZOOKEEPER_HOME/bin

文件保存后,Linux用戶重新登錄后生效。

2.3 準備目錄與配置文件

#sudovim$ZOOKEEPER_HOME/bin/zkInit.sh

#sudo-Esh$ZOOKEEPER_HOME/bin/zkInit.sh

forINDEXin{1..3};do

sudorm-rf$ZOOKEEPER_HOME/{data,logs}/$INDEX

sudomkdir-p$ZOOKEEPER_HOME/{data,logs}/$INDEX

echo$INDEX|sudotee$ZOOKEEPER_HOME/data/$INDEX/myid>/dev/null

#zoo.cfg參考:grep-v"^#"$ZOOKEEPER_HOME/conf/zoo_sample.cfg

cat>$ZOOKEEPER_HOME/conf/zoo-$INDEX.cfg<

tickTime=2000##ZooKeeper的最小時間單位(ms)

initLimit=10##投票選舉新leader的初始化時間(以tickTime為單位)

syncLimit=5##Leader檢測Follower可用性心跳的超時時間(以tickTime為單位)

clientPort=218$INDEX##客戶端用來連接ZooKeeper的端口

dataDir=$ZOOKEEPER_HOME/data/$INDEX##數據目錄(存儲內存數據庫快照)

dataLogDir=$ZOOKEEPER_HOME/logs/$INDEX##日志目錄(存儲事務日志)

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:

N(1,2,3): “必須”是一個數字(表示這是第幾號server),否則報錯 java.lang.NumberFormatException: For input string: "xxx"

hostname(localhost): 是該 server 所在的域名或IP地址,為了通用,可替換為域名zk{n}.company.com 并在 hosts 里配置;

port1(2281,2282,2283): 當前 server 是 leader 時,監聽此端口接受 followers 的連接,注意followers不會監聽此端口(直到它升級為 leader)

port2(2291,2292,2293): 是選舉 leader 時所使用的端口。

必須生成文件 $ZOOKEEPER_HOME/data/%n/myid,其內容為 zoo.cnf 中的 N(服務器ID), 否則拋出異常 java.lang.IllegalArgumentException: $ZOOKEEPER_HOME/data/{n}/myid file is missing

2.4 服務的配置并啟動

##sudovim/usr/lib/systemd/system/[email protected]

##其中的%i將來會被替換為具體的1/2/3

[Unit]

Description=ZooKeeper

After=syslog.targetnetwork.target

[Service]

Type=forking

Environment="ZOOCFG=zoo-%i.cfg"

ExecStart=/opt/zookeeper-3.4.11/bin/zkServer.shstart

ExecStop=/opt/zookeeper-3.4.11/bin/zkServer.shstop

[Install]

WantedBy=multi-user.target

配置為自動啟動,并立即啟動:

sudosystemctldaemon-reload

sudosystemctlenablezookeeper@{1,2,3}

sudosystemctlstartzookeeper@{1,2,3}

sudonetstat-natp|grepLISTEN|grep-E"218|228|229"

#sudosystemctlstopzookeeper@{1,2,3}

2.5 防火墻放行

如果非本機應用需要連接 ZooKeeper,必須把所有 clientPort 端口放行。

###sudovim/etc/sysconfig/iptables

-AINPUT-mstate--stateNEW-mtcp-ptcp--dport2181-jACCEPT

-AINPUT-mstate--stateNEW-mtcp-ptcp--dport2182-jACCEPT

-AINPUT-mstate--stateNEW-mtcp-ptcp--dport2183-jACCEPT

###重啟生效:sudosystemctlrestartiptables

2.6 客戶端驗證

zkCli.sh-serverlocalhost:2181##進入命令行狀態

help##顯示所有命令格式

quit##退出命令行狀態

history##顯示歷史命令

lspath[watch]

createpathdataacl

deletepath[version]

setpathdata[version]

getpath[watch]

statpath[watch]

syncpath

listquotapath

setquota-n|-bvalpath

delquota[-n|-b]path

addauthschemeauth

setAclpathacl

getAclpath

printwatcheson|off

redocmdno

也可集連接和命令于一行:

zkCli.sh-serverlocalhost:2181ls/

2.7 清空數據【慎用】

sudosystemctlstopzookeeper@{1,2,3}

sudorm-rf$ZOOKEEPER_HOME/{logs,data}/{1,2,3}/version-*

sudosystemctlstartzookeeper@{1,2,3}

2.8 卸載服務【慎用】

sudosystemctlstopzookeeper@{1,2,3}

sudosystemctldisablezookeeper@{1,2,3}

sudorm-rf$ZOOKEEPER_HOME

3.Windows 下安裝(可用于開發)

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 修改系統環境變量

setZOOKEEPER_HOME={???}zookeeper-3.4.11

setPATH=%ZOOKEEPER_HOME%in

3.2.3 修改 confzoo-%n.cfg

cd/d%ZOOKEEPER_HOME%

del/qbin*.sh

rd/s/qdatalogs

for%nin(1,2,3)do@mkdirlogs%n

for%nin(1,2,3)do@mkdirdata%n

for%nin(1,2,3)do@echo%n>data%nmyid

for%nin(1,2,3)do@copy/bconfzoo_sample.cfgconfzoo-%n.cfg

修改文件 confzoo-%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

參數說明與 Linux 中相關內容一樣。

3.2.4 修改腳本

刪除 binzkEnv.cmd 中的 set ZOOCFG=%ZOOCFGDIR%zoo.cfg 一行;

for%nin(1,2,3)do@copy/bbinzkServer.cmdbinzkServer%n.cmd

修改各個文件 zkServer%n.cmd 在 call "%~dp0zkEnv.cmd" 之前加一行:

set ZOOCFG=%~dp0%..confzoo-%n.cfg,注意替換 %n 分別為 1/2/3

3.3 啟動服務

zkServer1.cmd

zkServer2.cmd

zkServer3.cmd

3.4 客戶端驗證

zkCli.cmd-servercentos:2181##連接Linux上服務

zkCli.cmd-serverlocalhost:2181##連接本機上服務

##更多內容參見前面Linux中相應部分

4.集群部署(生產環境)

管理員指南: https://zookeeper.apache.org/doc/current/zookeeperAdmin.html

要求至少為三臺 ZooKeeper 服務器,最好是奇數個服務器(以便多數正常機器處理少數機器的故障),通常三臺足夠了,如果想更可靠,可增加至五臺;

為避免各服務器同時發生故障,最好部署在不同機器、不同網絡交換機(電路、冷卻系統等)、甚至不同機房;

為避免內存交換,要設置足夠大的 JVM 堆,比如 4G 機器可指定 3G。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91香蕉国产视频 | 天天夜夜草草久久伊人天堂 | 日本精品久久久久久久久免费 | 欧美成人免费草草影院视频 | 狠狠综合视频精品播放 | 精品久久久久久久久免费影院 | 成人国产午夜在线视频 | 天选之王漫画顾长歌免费阅读 | a男人的天堂久久a毛片 | 小柔的性放荡羞辱日记 | 美女扒开奶罩让男人吃奶 | 亚洲va精品中文字幕 | 99久久久久国产精品免费 | 色噜噜狠狠狠综合曰曰曰88av | 五月香婷婷 | sss视频在线精品 | 欧美日本道免费一区二区三区 | 好涨好爽好大视频免费 | 免费av在线视频 | 国产综合欧美日韩视频一区 | 果冻传媒91 | 日本老熟老太hd | 午夜影院和视费x看 | 91精品国产亚洲爽啪在线影院 | 91久| 日本三级成人中文字幕乱码 | 日本中文字幕高清 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 亚洲 欧美 国产 综合 在线 | 国产成人综合久久精品红 | 护士的小嫩嫩好紧好舒服 | 沉沦艳妇杨幂肉体小说 | 高清在线一区二区 | 色cccwww| 18free性欧美另类hd | 国产成人免费a在线资源 | 久久久久999 | 久久久这里有精品999 | bbbxxx乱大交欧美小说 | 91香蕉国产视频 | 三星w999|