這篇文章主要講解了“ZooKeeper的架構(gòu)由什么組成”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“ZooKeeper的架構(gòu)由什么組成”吧!
成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計服務(wù),網(wǎng)站設(shè)計,網(wǎng)站托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對手中脫穎而出成都創(chuàng)新互聯(lián)公司。
Zookeeper 是一個分布式協(xié)調(diào)服務(wù)的開源框架。 主要用來解決分布式集群中應(yīng)用系統(tǒng)的一致性問題, 例如怎樣避免同時操作同一數(shù)據(jù)造成臟讀的問題。分布式系統(tǒng)中數(shù)據(jù)存在一致性的問題!! * ZooKeeper 本質(zhì)上是一個分布式的小文件存儲系統(tǒng)。 提供基于類似于文件系統(tǒng)的目錄樹方式的數(shù) 據(jù)存儲,并且可以對樹中的節(jié)點進行有效管理。 * ZooKeeper 提供給客戶端監(jiān)控存儲在zk內(nèi)部數(shù)據(jù)的功能,從而可以達到基于數(shù)據(jù)的集群管理。 諸 如: 統(tǒng)一命名服務(wù)(dubbo)、分布式配置管理(solr的配置集中管理)、分布式消息隊列 (sub/pub)、分布式鎖、分布式協(xié)調(diào)等功能。
Leader
Zookeeper 集群工作的核心角色
集群內(nèi)部各個服務(wù)器的調(diào)度者。
事務(wù)請求(寫操作) 的唯一調(diào)度和處理者,保證集群事務(wù)處理的順序性;對于 create, setData, delete 等有寫操作的請求,則需要統(tǒng)一轉(zhuǎn)發(fā)給leader 處理, leader 需要決定編號、執(zhí) 行操作,這個過程稱為一個事務(wù)。
Follower
處理客戶端非事務(wù)(讀操作) 請求,
轉(zhuǎn)發(fā)事務(wù)請求給 Leader;
參與集群 Leader 選舉投票 2n-1臺可以做集群投票。 此外,針對訪問量比較大的 zookeeper 集群, 還可新增觀察者角色。
Observer
觀察者角色,觀察 Zookeeper 集群的最新狀態(tài)變化并將這些狀態(tài)同步過來,其對于非事務(wù)請求可 以進行獨立處理,對于事務(wù)請求,則會轉(zhuǎn)發(fā)給 Leader服務(wù)器進行處理。
不會參與任何形式的投票只提供非事務(wù)服務(wù),通常用于在不影響集群事務(wù)處理能力的前提下提升集 群的非事務(wù)處理能力。增加了集群增加并發(fā)的讀請求。
ZK也是Master/slave架構(gòu),但是與之前不同的是zk集群中的Leader不是指定而來,而是通過選舉產(chǎn) 生。
1. Zookeeper:一個領(lǐng)導者(leader:老大),多個跟隨者(follower:小弟)組成的集群。 2. Leader負責進行投票的發(fā)起和決議,更新系統(tǒng)狀態(tài)(內(nèi)部原理) 3. Follower用于接收客戶請求并向客戶端返回結(jié)果,在選舉Leader過程中參與投票 4. 集群中只要有半數(shù)以上節(jié)點存活,Zookeeper集群就能正常服務(wù)。 5. 全局數(shù)據(jù)一致:每個server保存一份相同的數(shù)據(jù)副本,Client無論連接到哪個server,數(shù)據(jù)都是一 致的。 6. 更新請求順序進行(內(nèi)部原理) 7. 數(shù)據(jù)更新原子性,一次數(shù)據(jù)更新要么成功,要么失敗。
Zookeeper安裝方式有三種,單機模式和集群模式以及偽集群模式。 ■ 單機模式:Zookeeper只運行在一臺服務(wù)器上,適合測試環(huán)境; ■ 偽集群模式:就是在一臺服務(wù)器上運行多個Zookeeper 實例; ■ 集群模式:Zookeeper運行于一個集群上,適合生產(chǎn)環(huán)境,這個計算機集群被稱為一個“集合體”
首先我們下載穩(wěn)定版本的zookeeper http://zookeeper.apache.org/releases.html
下載完成后,將zookeeper壓縮包 zookeeper-3.4.14.tar.gz上傳到linux系統(tǒng)/opt/lagou/software
解壓 壓縮包
tar -zxvf zookeeper-3.4.14.tar.gz -C ../servers/
#創(chuàng)建zk存儲數(shù)據(jù)目錄 mkdir -p /opt/lagou/servers/zookeeper-3.4.14/data #創(chuàng)建zk日志文件目錄 mkdir -p /opt/lagou/servers/zookeeper-3.4.14/data/logs #修改zk配置文件 cd /opt/lagou/servers/zookeeper-3.4.14/conf #文件改名 mv zoo_sample.cfg zoo.cfg vim zoo.cfg #更新datadir dataDir=/opt/lagou/servers/zookeeper-3.4.14/data #增加logdir dataLogDir=/opt/lagou/servers/zookeeper-3.4.14/data/logs #增加集群配置 ##server.服務(wù)器ID=服務(wù)器IP地址:服務(wù)器之間通信端口:服務(wù)器之間投票選舉端口 server.1=linux121:2888:3888 server.2=linux122:2888:3888 server.3=linux123:2888:3888 #打開注釋 #ZK提供了自動清理事務(wù)日志和快照文件的功能,這個參數(shù)指定了清理頻率,單位是小時 autopurge.purgeInterval=1
在zookeeper的 data 目錄下創(chuàng)建一個 myid 文件,內(nèi)容為1,這個文件就是記錄每個服務(wù)器的ID
cd /opt/lagou/servers/zookeeper-3.4.14/data echo 1 > myid
rsync-script /opt/lagou/servers/zookeeper-3.4.14
echo 2 >/opt/lagou/servers/zookeeper-3.4.14/data/myid
echo 3 >/opt/lagou/servers/zookeeper-3.4.14/data/myid
啟動命令(三個節(jié)點都要執(zhí)行)
/opt/lagou/servers/zookeeper-3.4.14/bin/zkServer.sh start
查看zk啟動情況
/opt/lagou/servers/zookeeper-3.4.14/bin/zkServer.sh status
集群啟動停止腳本
vim zk.sh #!/bin/sh echo "start zookeeper server..." if(($#==0));then echo "no params"; exit; fi hosts="linux121 linux122 linux123" for host in $hosts do ssh $host "source /etc/profile; /opt/lagou/servers/zookeeper- 3.4.14/bin/zkServer.sh $1" done
ZooKeeper數(shù)據(jù)模型Znode
在ZooKeeper中,數(shù)據(jù)信息被保存在一個個數(shù)據(jù)節(jié)點上,這些節(jié)點被稱為znode。ZNode 是 Zookeeper 中最小數(shù)據(jù)單位,在 ZNode 下面又可以再掛 ZNode,這樣一層層下去就形成了一個層次化 命名空間 ZNode 樹,我們稱為 ZNode Tree,它采用了類似文件系統(tǒng)的層級樹狀結(jié)構(gòu)進行管理。見下圖 示例:
在 Zookeeper 中,每一個數(shù)據(jù)節(jié)點都是一個 ZNode,上圖根目錄下有兩個節(jié)點,分別是:app1 和 app2,其中 app1 下面又有三個子節(jié)點,所有ZNode按層次化進行組織,形成這么一顆樹,ZNode的節(jié) 點路徑標識方式和Unix文件系統(tǒng)路徑非常相似,都是由一系列使用斜杠(/)進行分割的路徑表示,開 發(fā)人員可以向這個節(jié)點寫入數(shù)據(jù),也可以在這個節(jié)點下面創(chuàng)建子節(jié)點。
剛剛已經(jīng)了解到,Zookeeper的znode tree是由一系列數(shù)據(jù)節(jié)點組成的,那接下來,我們就對數(shù)據(jù)節(jié)點 做詳細講解 Zookeeper 節(jié)點類型可以分為三大類: 持久性節(jié)點(Persistent) 臨時性節(jié)點(Ephemeral) 順序性節(jié)點(Sequential) 在開發(fā)中在創(chuàng)建節(jié)點的時候通過組合可以生成以下四種節(jié)點類型:持久節(jié)點、持久順序節(jié)點、臨時節(jié) 點、臨時順序節(jié)點。不同類型的節(jié)點則會有不同的生命周期 * 持久節(jié)點:是Zookeeper中最常見的一種節(jié)點類型,所謂持久節(jié)點,就是指節(jié)點被創(chuàng)建后會一直存在服務(wù)器,直到刪除操作主動清除 * 持久順序節(jié)點:就是有順序的持久節(jié)點,節(jié)點特性和持久節(jié)點是一樣的,只是額外特性表現(xiàn)在順序上。 順序特性實質(zhì)是在創(chuàng)建節(jié)點的時候,會在節(jié)點名后面加上一個數(shù)字后綴,來表示其順序。 * 臨時節(jié)點:就是會被自動清理掉的節(jié)點,它的生命周期和客戶端會話綁在一起,客戶端會話結(jié)束,節(jié)點 會被刪除掉。與持久性節(jié)點不同的是,臨時節(jié)點不能創(chuàng)建子節(jié)點。 * 臨時順序節(jié)點:就是有順序的臨時節(jié)點,和持久順序節(jié)點相同,在其創(chuàng)建的時候會在名字后面加上數(shù)字后綴。 * 事務(wù)ID 首先,先了解,事務(wù)是對物理和抽象的應(yīng)用狀態(tài)上的操作集合。往往在現(xiàn)在的概念中,狹義上的事務(wù)通 常指的是數(shù)據(jù)庫事務(wù),一般包含了一系列對數(shù)據(jù)庫有序的讀寫操作,這些數(shù)據(jù)庫事務(wù)具有所謂的ACID特 性,即原子性(Atomic)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability)。 而在ZooKeeper中,事務(wù)是指能夠改變ZooKeeper服務(wù)器狀態(tài)的操作,我們也稱之為事務(wù)操作或更新 操作,一般包括數(shù)據(jù)節(jié)點創(chuàng)建與刪除、數(shù)據(jù)節(jié)點內(nèi)容更新等操作。對于每一個事務(wù)請求,ZooKeeper都 會為其分配一個全局唯一的事務(wù)ID,用 ZXID 來表示,通常是一個 64 位的數(shù)字。每一個 ZXID 對應(yīng)一次 更新操作,從這些ZXID中可以間接地識別出ZooKeeper處理這些更新操作請求的全局順序 zk中的事務(wù)指的是對zk服務(wù)器狀態(tài)改變的操作(create,update data,更新字節(jié)點);zk對這些事務(wù)操作都 會編號,這個編號是自增長的被稱為ZXID。
[zk: localhost:2181(CONNECTED) 2] get /zookeeper cZxid = 0x0 ctime = Wed Dec 31 19:00:00 EST 1969 mZxid = 0x0 mtime = Wed Dec 31 19:00:00 EST 1969 pZxid = 0x0 cversion = -1 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 0 numChildren = 1
整個 ZNode 節(jié)點內(nèi)容包括兩部分:節(jié)點數(shù)據(jù)內(nèi)容和節(jié)點狀態(tài)信息。數(shù)據(jù)內(nèi)容是空,其他的屬于狀態(tài)信 息。那么這些狀態(tài)信息都有什么含義呢?
cZxid 就是 Create ZXID,表示節(jié)點被創(chuàng)建時的事務(wù)ID。 ctime 就是 Create Time,表示節(jié)點創(chuàng)建時間。 mZxid 就是 Modified ZXID,表示節(jié)點最后一次被修改時的事務(wù)ID。 mtime 就是 Modified Time,表示節(jié)點最后一次被修改的時間。 pZxid 表示該節(jié)點的子節(jié)點列表最后一次被修改時的事務(wù) ID。只有子節(jié)點列表變更才會更新 pZxid,子 節(jié)點內(nèi)容變更不會更新。 cversion 表示子節(jié)點的版本號。 dataVersion 表示內(nèi)容版本號。 aclVersion 標識acl版本 ephemeralOwner 表示創(chuàng)建該臨時節(jié)點時的會話 sessionID,如果是持久性節(jié)點那么值為 0 dataLength 表示數(shù)據(jù)長度。 numChildren 表示直系子節(jié)點數(shù)。
Zookeeper使用Watcher機制實現(xiàn)分布式數(shù)據(jù)的發(fā)布/訂閱功能
一個典型的發(fā)布/訂閱模型系統(tǒng)定義了一種 一對多的訂閱關(guān)系,能夠讓多個訂閱者同時監(jiān)聽某一個主題 對象,當這個主題對象自身狀態(tài)變化時,會通知所有訂閱者,使它們能夠做出相應(yīng)的處理。
在 ZooKeeper 中,引入了 Watcher 機制來實現(xiàn)這種分布式的通知功能。ZooKeeper 允許客戶端向服 務(wù)端注冊一個 Watcher 監(jiān)聽,當服務(wù)端的一些指定事件觸發(fā)了這個 Watcher,那么Zk就會向指定客戶 端發(fā)送一個事件通知來實現(xiàn)分布式的通知功能。
整個Watcher注冊與通知過程如圖所示。 Zookeeper的Watcher機制主要包括客戶端線程、客戶端WatcherManager、Zookeeper服務(wù)器三部分。
具體工作流程為:
客戶端在向Zookeeper服務(wù)器注冊的同時,會將Watcher對象存儲在客戶端的WatcherManager當 中
當Zookeeper服務(wù)器觸發(fā)Watcher事件后,會向客戶端發(fā)送通知
客戶端線程從WatcherManager中取出對應(yīng)的Watcher對象來執(zhí)行回調(diào)邏輯
現(xiàn)在已經(jīng)搭建起了一個能夠正常運行的zookeeper服務(wù)了,所以接下來,就是來借助客戶端來對 zookeeper的數(shù)據(jù)節(jié)點進行操作
首先,進入到zookeeper的bin目錄之后
通過zkClient進入zookeeper客戶端命令行
./zkcli.sh 連接本地的zookeeper服務(wù)器 ./zkCli.sh -server ip:port(2181) 連接指定的服務(wù)器
連接成功之后,系統(tǒng)會輸出Zookeeper的相關(guān)環(huán)境及配置信息等信息。輸入help之后,屏幕會輸出可用 的Zookeeper命令,如下圖所示
[zk: localhost:2181(CONNECTED) 3] help ZooKeeper -server host:port cmd args stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo cmdno printwatches on|off delete path [version] sync path listquota path rmr path get path [watch] create [-s] [-e] path data acl addauth scheme auth quit getAcl path close connect host:port
感謝各位的閱讀,以上就是“ZooKeeper的架構(gòu)由什么組成”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對ZooKeeper的架構(gòu)由什么組成這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
當前題目:ZooKeeper的架構(gòu)由什么組成
URL地址:http://www.rwnh.cn/article44/jgpiee.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、標簽優(yōu)化、網(wǎng)站設(shè)計、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)