您好,登錄后才能下訂單哦!
本篇內容主要講解“Zookeeper有哪些特性”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Zookeeper有哪些特性”吧!
ZooKeeper
致力于提供一個高性能、高可用,且具備嚴格的順序訪問
控制能力的分布式協調服務,是雅虎公司創建,是Google的Chubby一個開源的實現,也是Hadoop和Hbase的重要組件。
簡單的數據結構:共享的樹形結構,類似文件系統,存儲于內存;
可以構建集群:避免單點故障,3-5臺機器就可以組成集群,超過半數正常工作就能對外提供服務;
順序訪問:對于每個讀請求,zk會分配一個全局唯一的遞增編號,利用這個特性可以實現高級協調服務;
高性能:基于內存操作,服務于非事務請求,適用于讀操作為主的業務場景。3臺zk集群能達到13w
QPS;
數據發布訂閱:下面的基礎 負載均衡:客戶端的負載均衡 命名服務 Master選舉 集群管理 配置管理 分布式隊列 分布式鎖
百度即可,
會話(session)
客戶端與服務端的一次會話連接,本質是TCP長連接,通過會話可以進行心跳檢測和數據傳輸;看下Zk客戶端和服務端成功連接后,就創建了一次會話,ZK會話在整個運行期間的生命周期中,會在不同的會話狀態之間切換,這些狀態包括: CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE 一旦客戶端開始創建Zookeeper對象,那么客戶端狀態就會變成CONNECTING狀態,同時客戶端開始嘗試連接服務端,連接成功后,客戶端狀態變為CONNECTED,通常情況下,由于斷網或其他原因,客戶端與服務端之間會出現斷開情況,一旦碰到這種情況,Zookeeper客戶端會自動進行重連服務,同時客戶端狀態再次變成CONNCTING,直到重新連上服務端后,狀態又變為CONNECTED,在通常情況下,客戶端的狀態總是介于CONNECTING和CONNECTED之間。但是,如果出現諸如會話超時、權限檢查或是客戶端主動退出程序等情況,客戶端的狀態就會直接變更為CLOSE狀態
數據模型
ZooKeeper的視圖結構和標準的Unix文件系統類似,其中每個節點稱為數據節點
或ZNode
,每個znode可以存儲數據,還可以掛載子節點,因此可以稱之為樹
。Znode一般存儲小于1M的數據。每一個znode都必須有值,如果沒有值,節點是不能創建成功的。
在Zookeeper中,znode是一個跟Unix文件系統路徑相似的節點,可以往這個節點
存儲或獲取
數據通過客戶端可對znode進行
增刪改查
的操作,還可以注冊watcher監控
znode的變化。
Zookeeper節點類型
節點類型非常重要,是后面項目實戰的基礎。 a、Znode有兩種類型: 短暫
(ephemeral)(create -e /app1/test1 “test1” 客戶端斷開連接zk刪除ephemeral類型節點) 持久
(persistent) (create -s /app1/test2 “test2” 客戶端斷開連接zk不刪除persistent類型節點) b、Znode有四種形式的目錄節點(默認是persistent ) PERSISTENT PERSISTENT_SEQUENTIAL(持久序列/test0000000019 ) EPHEMERAL EPHEMERAL_SEQUENTIAL c、創建znode時設置順序標識,znode名稱后會附加一個值
,順序號是一個單調遞增的計數器,由父節點維護 d、在分布式系統中,順序號可以被用于為所有的事件進行全局排序,這樣客戶端可以通過順序號推斷事件的順序
客戶端常用命令
使用 zkCli.sh -server 127.0.0.1:2181 連接到 ZooKeeper 服務,連接成功后,系統會輸出 ZooKeeper 的相關環境以及配置信息。 命令行工具的一些簡單操作如下:
顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
顯示根目錄下、文件: ls2 / 查看當前節點數據并能看到更新次數等數據
創建文件,并設置初始內容: create /zk "test" 創建一個新的 znode節點“ zk ”以及與它關聯的字符串 [-e] [-s] 【-e 零時節點】 【-s 順序節點】
獲取文件內容: get /zk 確認 znode 是否包含我們所創建的字符串 [watch]【watch 監聽】
修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置
刪除文件: delete /zk 將剛才創建的 znode 刪除,如果存在子節點刪除失敗
遞歸刪除:rmr /zk將剛才創建的 znode 刪除,子節點同時刪除
?退出客戶端: quit
幫助命令: help
ACL保障數據的安全
ACL機制,表示為scheme:id:permissions,第一個字段表示采用哪一種機制,第二個id表示用戶,permissions表示相關權限(如只讀,讀寫,管理等)。
通常表示為:scheme:id:permission
schema:代表授權策略
id:代表用戶
permission:代表權限
Scheme world:默認方式,相當于全世界都能訪問 auth:代表已經認證通過的用戶(可以通過addauth digest user:pwd 來添加授權用戶) digest:即用戶名:密碼這種方式認證,這也是業務系統中最常用的 ip:使用Ip地址認證
id id是驗證模式,不同的scheme,id的值也不一樣。 scheme為auth時:username:password scheme為digest時:username:BASE64(SHA1(password)) scheme為ip時:客戶端的ip地址。 scheme為world時anyone。
Permission CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、刪、改、查、管理權限,這5種權限簡寫為crwda(即:每個單詞的首字符縮寫) CREATE(c):創建子節點的權限 DELETE(d):刪除節點的權限 READ(r):讀取節點數據的權限 WRITE(w):修改節點數據的權限 ADMIN(a):設置子節點權限的權限
ACL命令
getAcl
獲取指定節點的ACL信息 create /testDir/testAcl deer # 創建一個子節點 getAcl /testDir/testAcl # 獲取該節點的acl權限信息
setAcl
設置指定節點的ACL信息 setAcl /testDir/testAcl world:anyone:crwa # 設置該節點的acl權限 getAcl /testDir/testAcl # 獲取該節點的acl權限信息,成功后,該節點就少了d權限 create /testDir/testAcl/xyz xyz-data # 創建子節點 delete /testDir/testAcl/xyz # 由于沒有d權限,所以提示無法刪除
addauth
addauth digest user1:123456 # 需要先添加一個用戶 setAcl /testDir/testAcl auth:user1:123456:crwa # 然后才可以拿著這個用戶去設置權限 getAcl /testDir/testAcl # 密碼是以密文的形式存儲的
create /testDir/testAcl/testa aaa
delete /testDir/testAcl/testa # 由于沒有d權限,所以提示無法刪除
退出客戶端后: ls /testDir/testAcl #沒有權限無法訪問 create /testDir/testAcl/testb bbb #沒有權限無法訪問 addauth digest user1:123456 # 重新新增權限后可以訪問了
ACL權限補充
練習setAcl權限的時候由于失誤,導致節點無法刪除 create /enjoy1/node1 enjoy setAcl /enjoy1 world:anyone:r 這個時候無論是delete 還是rmr都沒有權限刪除 解決方式:啟用super權限 使用DigestAuthenticationProvider.generateDigest("super:admin"); 獲得密碼 1.修改zkServer啟動腳本增加 "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" 2.啟動客戶端用管理員登陸 addauth digest super:admin
ZooKeeper 支持某些特定的四字命令字母與其的交互。用來獲取 ZooKeeper 服務的當前狀態及相關信息。可通過 telnet 或 nc 向 ZooKeeper 提交相應的命令 :當然,前提是安裝好了nc
echo stat|nc 127.0.0.1 2181 來查看哪個節點被選擇作為follower或者leader 使用echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server,若回復imok表示已經啟動。 echo dump| nc 127.0.0.1 2181 ,列出未經處理的會話和臨時節點。 echo kill | nc 127.0.0.1 2181 ,關掉server echo conf | nc 127.0.0.1 2181 ,輸出相關服務配置的詳細信息。 echo cons | nc 127.0.0.1 2181 ,列出所有連接到服務器的客戶端的完全的連接 / 會話的詳細信息 echo envi |nc 127.0.0.1 2181 ,輸出關于服務環境的詳細信息(區別于 conf 命令)。 echo reqs | nc 127.0.0.1 2181 ,列出未經處理的請求。 echo wchs | nc 127.0.0.1 2181 ,列出服務器 watch 的詳細信息。 echo wchc | nc 127.0.0.1 2181 ,通過 session 列出服務器 watch 的詳細信息,它的輸出是一個與 watch 相關的會話的列表。 echo wchp | nc 127.0.0.1 2181 ,通過路徑列出服務器 watch 的詳細信息。它輸出一個與 session 相關的路徑。
前面以及講了兩個非常重要的配置一個是dataDir,存放的快照數據,一個是dataLogDir,存放的是事務日志文件
事務日志可視化 (LogFormatter) java -cp ../../zookeeper-3.4.6.jar;../../lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.LogFormatter log.xxxx 數據快照可視化 (SnapshotFormatter) java -cp ../../zookeeper-3.4.6.jar;../../lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.xxxx
下載然后解壓 進入目錄ZooInspector\build,運行zookeeper-dev-ZooInspector.jar;
java -jar zookeeper-dev-ZooInspector.jar //執行成功后,會彈出java ui client,輸入zk服務地址:ip或者主機名:2181
到此,相信大家對“Zookeeper有哪些特性”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。