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