zookeeper 创建临时顺序节点_Zookeeper学习笔记
1.Zookeeper簡介
Zookeeper:是一個分布式的、開源的程序協(xié)調(diào)服務(wù),是 hadoop 項目下的一個子項目。
他提供的主要功能包括:配置管理、名字服務(wù)、分布式鎖、集群管理 。
2.znode簡介:
Zookeeper 底層是一套數(shù)據(jù)結(jié)構(gòu)。這個存儲結(jié)構(gòu)是一個樹形 結(jié)構(gòu),其上的每一個節(jié)點,我們稱之為“znode”,每一個 znode 默認能夠存儲 1 MB的數(shù)據(jù)
1)PERSISTENT 持久化節(jié)點:
持久化節(jié)點是指在節(jié)點創(chuàng)建后,就一直存在,直到有刪除操作來主動清除這個節(jié)點。否則不會因為創(chuàng)建該節(jié)點的客戶端會話失效而消失。
2)PERSISTENT_SEQUENTIAL 持久順序節(jié)點:
持久順序節(jié)點這類節(jié)點的基本特性和上面的節(jié)點類型是一致的。額外的特性是,在 ZK 中,每個父節(jié)點會為他的第一級子節(jié)點維護一份時序,會記錄每個子節(jié)點創(chuàng)建的先后順序。(基于這個特性,在創(chuàng)建子節(jié)點的時候,可以設(shè)置這個屬性,那么在創(chuàng)建節(jié)點過程中,ZK 會自動為給定節(jié)點名加上一個數(shù)字后綴,作為新的節(jié)點名。這個數(shù)字后綴的范圍是整型的最大值。在創(chuàng)建節(jié)點的時候只需要傳入節(jié)點 “/test_”,這樣之后,zookeeper 自動會給”test_”后面補充數(shù)字。)
3)EPHEMERAL 臨時節(jié)點 :
臨時節(jié)點的生命周期和客戶端會話綁定。也就是說,如果客戶端會話失效,那么這個節(jié)點就會自動被清除掉。
4)EPHEMERAL_SEQUENTIAL 臨時自動編號節(jié)點 :
臨時自動編號節(jié)點此節(jié)點是屬于臨時節(jié)點,不過帶有順序,客戶端會話結(jié)束節(jié)點就消失。
Zookeeper安裝單機版
官方資源包可在 http://zookeeper.apache.com 站點中下載。
4)解壓Zookeeper并復(fù)制到/usr/local中
[root@localhost temp]# tar -zxf zookeeper-3.4.6.tar.gz
[root@localhost temp]# cp zookeeper-3.4.6 /usr/local/zookeeper -r(復(fù)制的同時修改名字)
5)修改Zookeeper zoo_sample.cfg名字為zoo.cfg
Zookeeper在啟動時會默認的去Zookeeper的conf目錄下查找一個名字為zoo.cfg的配置文件
在 zookeeper 應(yīng)用目錄中有子目錄 conf。其中有配置文件模板:zoo_sample.cfg
修改zoo_sample.cfg 的名字我zoo.cfg
cp zoo_sample.cfg zoo.cfg。
在Zookeeper目錄下新建data文件夾并獲取絕對路徑
7)進入conf文件夾配置zoo.cfg文件
8)啟動Zookeeper
默認加載配置文件:./zkServer.sh start:默認的會去 conf 目錄下加載 zoo.cfg 配置文件。
指定加載配置文件:./zkServer.sh start 配置文件的路徑(就是加載復(fù)制zoo.cfg并改名的新的zoo.cfg)。
啟動:
關(guān)閉:
查詢狀態(tài):
Zookeeper集群原理
Zookeeper 集群中的角色主要有以下三類領(lǐng)導(dǎo)者 ,客戶端 ,學習者 。
設(shè)計目的:
順序性 :包括全局有序和偏序兩種:全局有序是指如果在一臺服務(wù)器上消息 a 在消息b 前發(fā)布,則在所有 Server 上消息 a 都將在消息 b 前被發(fā)布;偏序是指如果一個消息 b 在消息 a 后被同一個發(fā)送者發(fā)布,a 必將排在 b 前面
可靠性 :具有簡單、健壯、良好的性能,如果消息 m 被到一臺服務(wù)器接受,那么它將被所有的服務(wù)器接受。
實時性 :Zookeeper 保證客戶端將在一個時間間隔范圍內(nèi)獲得服務(wù)器的更新信息,或者服務(wù)器失效的信息。但由于網(wǎng)絡(luò)延時等原因,Zookeeper 不能保證兩個客戶端能同時得到剛更新的數(shù)據(jù),如果需要最新數(shù)據(jù),應(yīng)該在讀數(shù)據(jù)之前調(diào)用 sync()接口。
等待無關(guān)(wait-free):慢的或者失效的 client 不得干預(yù)快速的 client 的請求,使得每個 client 都能有效的等待。
原子性:更新只能成功或者失敗,沒有中間狀態(tài)。
最終一致性:client 不論連接到哪個 Server,展示給它都是同一個視圖,這是 zookeeper最重要的性能。
5.集群安裝
使用 3 個 Zookeeper 應(yīng)用搭建一個偽集群。應(yīng)用部署位置是:192.168.21.128。服務(wù)監(jiān)聽
端口分別為:2181、2182、2183。投票選舉端口分別為 2881/3881、2882/3882、2883/3883。
1)解壓Zookeeper并復(fù)制到/usr/local中
[root@localhost temp]# tar -zxf zookeeper-3.4.6.tar.gz
[root@localhost temp]# cp zookeeper-3.4.6 /usr/local/zookeepercluster/zookeeper1 -r(復(fù)制的同時修改名字)
2)修改Zookeeper zoo_sample.cfg名字為zoo.cfg
Zookeeper在啟動時會默認的去Zookeeper的conf目錄下查找一個名字為zoo.cfg的配置文件
在 zookeeper 應(yīng)用目錄中有子目錄 conf。其中有配置文件模板:zoo_sample.cfg
修改zoo_sample.cfg 的名字我zoo.cfg
cp zoo_sample.cfg zoo.cfg。
3)修改配置文件zoo.cfg --設(shè)置緩存路徑
在Zookeeper目錄下新建data文件夾并獲取絕對路徑
4)在zookeepercluster文件夾下復(fù)制兩份 Zookeeper 應(yīng)用。用于模擬集群中的 3 個節(jié)點。
cp -r zookeeper01 zookeeper02
cp -r zookeeper01 zookeeper03
data文件夾參數(shù)值為應(yīng)用運行緩存數(shù)據(jù)保存目錄。使用絕對路徑賦值。不同的應(yīng)用路徑不同。
6)提供應(yīng)用唯一標識
在 Zookeeper 集群中,每個節(jié)點需要一個唯一標識。這個唯一標識要求是自然數(shù)。且唯
一標識保存位置是:$dataDir/myid(data文件夾下的myid文件)。其中 dataDir 為配置文件 zoo.cfg 中的配置參數(shù)
方式一:在 data 目錄中創(chuàng)建文件 myid : touch myid
為應(yīng)用提供唯一標識。本環(huán)境中使用 1、2、3 作為每個節(jié)點的唯一標識。
vi myid
方式二:簡化方式為: echo [唯一標識] >> myid。 echo 命令為回聲命令,系統(tǒng)會將命令發(fā)送的
數(shù)據(jù)返回。 '>>'為定位,代表系統(tǒng)回聲數(shù)據(jù)指定發(fā)送到什么位置。 此命令代表系統(tǒng)回聲數(shù)
據(jù)發(fā)送到 myid 文件中。 如果沒有文件則創(chuàng)建文件。
7)修改配置文件 zoo.cfg - 設(shè)置服務(wù)、投票、選舉端口
vi zoo.cfg
8)啟動 ZooKeeper 應(yīng)用
可以設(shè)置啟動和關(guān)閉腳本
腳本內(nèi)容
控制臺訪問 ZooKeeper 應(yīng)用
6.1訪問控制臺命令
可以通過任何一個Zookeeper的zkCli.sh來訪問控制臺。
命令格式為: zkCli.sh -server host:port。默認連接 localhost:2181。
6.2控制臺客戶端常用命令
1)connect host:port - 連接其他的 ZooKeeper 應(yīng)用.
示例:從2182端口到2181端口
在 ZooKeeper 控制臺客戶端中,沒有默認列表功能,必須指定要列表資源的位置(即絕對路徑)。 如: ls / ; ls /path 等。
3)create [-e] [-s] path data - 創(chuàng)建節(jié)點
如: create /test 123 創(chuàng)建一個(永久)/test 節(jié)點,節(jié)點攜帶數(shù)據(jù)信息 123。
create -e /test 123 創(chuàng)建一個臨時節(jié)點/test,攜帶數(shù)據(jù)為 123,臨時節(jié)點只在當前會話生命周期中有效,會話結(jié)束節(jié)點自動刪除。
create -s /test 123 創(chuàng)建一個順序節(jié)點/test,攜帶數(shù)據(jù)123,創(chuàng)建的順序節(jié)點由ZooKeeper自動為節(jié)點增加后綴信息,如-/test00000001
等。-e 和-s 參數(shù)可以聯(lián)合使用
[zk: 192.168.199.175:2181(CONNECTED) 22] get /abc
123
cZxid = 0xd # 創(chuàng)建節(jié)點時的事務(wù) ID,由 ZooKeeper 維護。
ctime = Mon Oct 07 02:00:41 PDT 2019
mZxid = 0x1f # 當前節(jié)點攜帶數(shù)據(jù)最后一次修改的事務(wù) ID。
mtime = Mon Oct 07 02:00:41 PDT 2019
pZxid = 0x21 # 子節(jié)點列表最后一次修改的事務(wù) ID。
cversion = 1 # 節(jié)點版本號,當節(jié)點的子節(jié)點列表發(fā)生變化時,版本變更。
dataVersion = 2 # 數(shù)據(jù)版本號,當節(jié)點攜帶數(shù)據(jù)發(fā)生變化時,版本變更。
aclVersion = 0
ephemeralOwner = 0x0 # 此數(shù)據(jù)值不是 0x0 時,代表是臨時節(jié)點
dataLength = 3 # 節(jié)點攜帶數(shù)據(jù)長度
numChildren = 1 # 子節(jié)點數(shù)量
5)set path data [version] - 設(shè)置對應(yīng)位置節(jié)點的數(shù)據(jù)。
如: set /test 'test data'。 如果要設(shè)
置的數(shù)據(jù)中有空格,則使用單引號界定數(shù)據(jù)的范圍。每次修改數(shù)據(jù)后,dataVersion 屬性自增。那么在 set 命令中可以指定 version,version 數(shù)據(jù)必須與上次查詢的值一致,用于保證本次修改命令執(zhí)行時,沒有其他會話修改此數(shù)據(jù)。
6)delete path [version] - 刪除指定節(jié)點,此命令不能刪除有子節(jié)點的節(jié)點。如:delete /test。
其中 version 參數(shù)和 set 命令的 version 含義一致
7)rmr path - 刪除指定結(jié)點,包括子節(jié)點。
8)quit - 退出控制臺
7、理解zookeeper選舉機制
7.1選舉流程簡述
目前有5臺服務(wù)器,每臺服務(wù)器均沒有數(shù)據(jù),它們的編號分別是1,2,3,4,5,按編號依次啟動,它們的選擇舉過程如下:
---服務(wù)器1啟動,給自己投票,然后發(fā)投票信息,由于其它機器還沒有啟動所以它收不到反饋信息,服務(wù)器1的狀態(tài)一直屬于Looking(選舉狀態(tài))。
---服務(wù)器2啟動,給自己投票,同時與之前啟動的服務(wù)器1交換結(jié)果,由于服務(wù)器2的編號大所以服務(wù)器2勝出,但此時投票數(shù)沒有大于半數(shù),所以兩個服務(wù)器的狀態(tài)依然是LOOKING。
---服務(wù)器3啟動,給自己投票,同時與之前啟動的服務(wù)器1,2交換信息,由于服務(wù)器3的編號最大所以服務(wù)器3勝出,此時投票數(shù)正好大于半數(shù),所以服務(wù)器3成為領(lǐng)導(dǎo)者,服務(wù)器1,2成為小弟。
---服務(wù)器4啟動,給自己投票,同時與之前啟動的服務(wù)器1,2,3交換信息,盡管服務(wù)器4的編號大,但之前服務(wù)器3已經(jīng)勝出,所以服務(wù)器4只能成為小弟。
---服務(wù)器5啟動,后面的邏輯同服務(wù)器4成為小弟。
zookeeper部署奇數(shù)節(jié)點的原因(最少3個)
1).zookeeper集群的寫操作,由leader節(jié)點負責,它會把通知所有節(jié)進行寫入操作,只有收到半數(shù)以上節(jié)點的成功反饋,才算成功。如果是部署2個節(jié)點的話,那就必須都成功。
2).zookeeper的選舉策略也是需要半數(shù)以上的節(jié)點同意才能當選leader,如果是偶數(shù)節(jié)點可能導(dǎo)致票數(shù)相同的情況
3).只有當半數(shù)以上的節(jié)點存活時 zookeeper集群才能對外服務(wù),維持正常狀態(tài),如果是2個節(jié)點,只要其中一個掛掉,那么剩下的1個并不滿足半數(shù)以上規(guī)則。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的zookeeper 创建临时顺序节点_Zookeeper学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python日历函数_python 怎么
- 下一篇: ant centos环境下 编译没有将配