Zookeeper基礎常用操作以及ACL權限

這次將Zookeeper的一些基礎用法以及權限這塊的都補充一下在這篇博客中。

上篇博客介紹了基于ZooKeeper實現的分布式鎖,也介紹了一些ZooKeeper的節點類型以及監聽機制,今天這里就不作過多的介紹了,大家也可以自行的去官方文檔上看看更具體的介紹ZooKeeper官方鏈接

會話

會話(session)是zookepper非常重要的概念,客戶端和服務端之間的任何交互操作都與會話有關,

客戶端與服務端的一次會話連接,本質是TCP長連接,通過會話可以進行心跳檢測和數據傳輸:

?

看下這圖,Zk客戶端和服務端成功連接后,就創建了一次會話,ZK會話在整個運行期間的生命周期中,會在不同的會話狀態之間切換,這些狀態包括:

CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE

一旦客戶端開始創建Zookeeper對象,那么客戶端狀態就會變成CONNECTING狀態,同時客戶端開始嘗試連接服務端,連接成功后,客戶端狀態變為CONNECTED,通常情況下,由于斷網或其他原因,客戶端與服務端之間會出現斷開情況,一旦碰到這種情況,Zookeeper客戶端會自動進行重連服務,同時客戶端狀態再次變成CONNCTING,直到重新連上服務端后,狀態又變為CONNECTED,在通常情況下,客戶端的狀態總是介于CONNECTINGCONNECTED之間。但是,如果出現諸如會話超時、權限檢查或是客戶端主動退出程序等情況,客戶端的狀態就會直接變更為CLOSE狀態

目錄

下載了ZooKeeper之后在bin目錄下有以下可執行文件:

常用腳本

zkCli:連接ZooKeeper服務的客戶端腳本

bin/zkCli.sh -server 127.0.0.1:2181

zkServer:ZooKeeper服務的啟動、狀態以及關閉腳本

啟動ZK服務:? bin/zkServer.sh?start

查看ZK服務狀態: bin/zkServer.sh?status

停止ZK服務: bin/zkServer.sh?stop

重啟ZK服務: bin/zkServer.sh?restart?

參數大全

ZooKeeper服務啟動默認需加載conf文件夾下的zoo.cfg文件,參數也可以自行去官方文檔查詢,ZooKeeper配置文件官方參數大全

這里列舉一些常用的:

clientPort:參數無默認值,必須配置,用于配置當前服務器對外的服務端口,客戶端必須使用這端口才能進行連接

clientPortAddress:在3.3.0版本之后,監聽客戶端連接的地址(ipv4、ipv6或主機名);即客戶端試圖連接到的地址。這是可選的,默認情況下,我們以這樣一種方式進行綁定,即服務器上的任何地址/接口/網卡的任何連接都將被接受。

dataDir:用于存放內存數據庫快照的文件夾,同時用于集群的myid文件也存在這個文件夾里(注意:一個配置文件只能包含一個dataDir字樣,即使它被注釋掉了。)

dataLogDir:用于單獨設置transaction log的目錄,transaction log分離可以避免和普通log還有快照的競爭

dataDir:新安裝zk這文件夾里面是沒有文件的,可以通過snapCount參數配置產生快照的時機

以下配置集群中才會使用,后面再討論

tickTime:心跳時間,為了確保連接存在的,以毫秒為單位,最小超時時間為兩個心跳時間

initLimit:多少個心跳時間內,允許其他server連接并初始化數據,如果ZooKeeper管理的數據較大,則應相應增大這個值

syncLimit:多少個tickTime內,允許follower同步,如果follower落后太多,則會被丟棄。

常用命令

在ZooKeeper的客戶端使用help命令是可以看到所有命令:

介紹一些常用命令:

顯示根目錄下、文件:?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

節點

上篇講過節點,所以今天這里就不談節點類型了,談談節點狀態屬性,在使用get命令查看具體數據的時候,會打印:

?

?ACL權限

在ZooKeeper里面可以控制節點的訪問權限,保障數據的安全

表示為scheme:id:permissions,第一個字段表示采用哪一種機制,第二個id表示用戶,permissions表示相關權限(如只讀,讀寫,管理等)

schema:代表授權策略

id:代表用戶

permission:代表權限

scheme

?world: 它下面只有一個id, anyone, world:anyone代表任何人,zookeeper中對所有人有權限的結點就是屬于world:anyone的

auth: 它不需要id, 只要是通過authenticationuser都有權限(zookeeper支持通過kerberos來進行authencation, 也支持username/password形式的authentication)

digest: 它對應的idusername:BASE64(SHA1(password)),它需要先通過username:password形式的authentication

ip: 它對應?的id為客戶機的IP地址,設置的時候可以設置一個ip段,比如ip:192.168.1.0/16, 表示匹配前16bitIP

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權限信息

setAcl

setAcl /demo?world:anyone:crwa 設置指定節點的ACL權限

由于沒用設置刪除權限,所以在刪除的時候就會提示無法刪除

addauth

addauth? digest user1:123456設置用戶和密碼,

setAcl /demo auth:user1:123456:crwa?使用用戶去設置指定的權限,然后就可以直接登陸用戶進行訪問

在退出客戶端之后再次連接客戶端

對使用用戶設置權限的節點無權訪問,所以需登陸用戶進行訪問

即addauth digest user1:123456執行一下,就可以訪問指定節點了

digest

auth與digest的區別就是,前者使用明文密碼進行登錄,后者使用密文密碼進行登錄

addauth digest user1:123456? 設置用戶密碼

setAcl /demo digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa?使用digest來設置權限

如果這里使用明文登陸的話,會導致改節點不可訪問

在ZooKeeper里面有可以獲取密文方法,在命令執行如下:

命令:java -Djava.ext.dirs=/soft/zookeeper-3.4.12/lib -cp /soft/zookeeper-3.4.12/zookeeper-3.4.12.jar org.apache.zookeeper.server.auth.DigestAuthenticationProvider deer:123456

結果:deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=

IP

create? /testDir/testIp data? 創建節點

setAcl? /testDir/testIp ip:192.168.30.10:cdrwa? 給指定節點設置指定IP可訪問

getAcl ?/testDir/testIp?獲取節點權限信息

超級管理員

為了避免出現因權限設置的問題,所以在ZooKeeper中有超級管理員的權限存在

先獲取super:admin的密文:super:xQJmxLMiHGwaqBvst5y6rkB6HQs=

在ZooKeeper啟動的參數中添加啟動超級管理員

添加參數:"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="

在客戶端中啟動超級管理員:

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?相關的路徑。

還有一些其他的東西,后面有空在說呀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537110.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537110.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537110.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[中醫經絡學習一]足陽明胃經

人體有六臟(心、肝、脾、肺、腎五臟,再加心包)六腑(胃、小腸、大腸、膀胱、膽、三焦),每個臟腑都聯接著一條經絡,一共12條經絡,稱“十二正經”,經絡的走向在四肢兩側基本…

ThreadLocal原理解析以及是否需要調用remove方法

平常的開發過程中,如果有個類不是線程安全的,比如SimpleDateFormat,要使這個類在并發的過程中是線程安全的,那么可以將變量設置位局部變量,不過存在的問題就是頻繁的創建對象,對性能和資源會有一定降低和消…

Maven基礎及概念

前言 今天就來聊聊Maven的基礎和一些比較概念性的東西,還有一些常用的Maven命令啥的,主要是某人腦子記不住,記在博客中讓她自己看吧,省的費心給她找。 后續的文章會聊到Maven的一些比較高級用法,像自定義插件&#x…

織夢縮略圖自動補齊絕對路徑_織夢生成文章內容縮略圖時自動加上域名絕對路徑...

今天又接了個織夢CMS的有償服務,客戶想要后臺添加文章內容的時候,縮略圖自動變成帶上絕對路徑的格式.比如我們默認的縮略圖是這樣的 /uploads/allimg/150814/123P2NB-0-lp.png 他想要的效果是這樣的 http://www.youwujun.com.cn/uploads/allimg/150814/123P2NB-0-lp.png大家懂我…

BUAA 436 孟竹的復習計劃(二維樹狀數組)

題目鏈接:http://acm.buaa.edu.cn/problem/436/ 題意:一個數列兩種操作:(1)將某個位置的數字改成另一個數字;(2)交換兩個位置的數字。每次操作之后輸出逆序數的個數。 思路&#xff…

Maven之pom.xml常用標簽解析及鏡像配置

前言 Maven僅僅是個打包工具而已,個人覺得沒有太大必要花費在打包工具上,這里就列舉一下個人覺得會常用標簽的使用就好了,原理啥的基本就不太會去深度了解了,如果以后遇到需了解Maven工作原理的工作的話,到時候一定分…

idea 導入svn代碼_idea導入svn項目

起初和導入git項目一樣,file - new - project from version control - ,這后面選 subversion。在打開的 checkout from subversion對話框中,輸入svn地址,比如 svn://11.22.33.44/demo。添加一個后,展開新加項&#xff…

由mysql8降級到mysql5

最近在研究liferay的使用。liferay可以連接mysql數據庫。電腦中裝的mysql的最新版本是mysql8。于是開始按照liferay的要求進行連接。但是多番嘗試后,均報錯:java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast …

tf計算矩陣維度_tensorflow中關于 多維tensor的運算(tf.multiply, tf.matmul, tf.tensordot)...

multiply 等同與* ,用于計算矩陣之間的element-wise 乘法,要求矩陣的形狀必須一致(或者是其中一個維度為1),否則會報錯:import tensorflow as tfa tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12], shape[2, 3, 2])b tf.con…

Maven高級之插件開發

前言 終于來到了Maven的插件開發,其實Maven的插件并沒有想象的那么難,剛開始講Maven基礎的時候就演示了一下JDK是如何打包的,Maven打包只是在JDK打包上封裝了一層而已,Maven也支持自定義插件開發 創建 我們先使用quickstart原型…

HTTP1.1新增了五種請求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 、 CONNECT

200 (成功) 服務器已成功處理了請求。 通常,這表示服務器提供了請求的網頁。 201 (已創建) 請求成功并且服務器創建了新的資源。 202 (已接受) 服務器已接受請求,但尚未處…

katalon進行app測試_Katalon API 測試 Demo

為何選擇Katalon符合我們當下的情況,測試需要借助現有工具提高測試效率以及提高測試質量;為何不自己寫代碼?不是只有自己寫的框架才是最好的,合適的才是最好的;katalon 支持ui、mobile、api 同時也支持腳本模式&#x…

Maven高級之archetype(原型/骨架)開發

前言 archetype這個的主要功能就是將寫好的項目模塊打包成一個原型,然后提供給其他人使用,這樣別人就可以快速使用這個項目模板了。 這個東西雖然很多人都基本用不上,但原型這個東西用的好還是很方便的,能夠在開發新項目上省去大…

深度學習在搜索業務中的探索與實踐

本文根據美團高級技術專家翟藝濤在2018 QCon全球軟件開發大會上的演講內容整理而成,內容有修改。引言 2018年12月31日,美團酒店單日入住間夜突破200萬,再次創下行業的新紀錄,而酒店搜索在其中起到了非常重要的作用。本文會首先介紹…

cesium面積計算_cesium-長度測量和面積測量

(更新)多謝網友的提醒,面積測量的小問題已經修改,經測試可正常使用網上找的大神的實現方法有點問題,實現有一些bug,作為cesium新手一個,棄之不忍,只好硬著頭皮修改了,不過還好問題不大&#xff…

SpringBoot自動配置原理流程

前言 新公司太忙了,都沒啥空更新博客,就隨便記錄一下以前的學習筆記吧。SpringBoot是基于Spring上的衍生框架,只要看懂了Spring的話,學這個就比較簡單了;SpringBoot也是在當前微服務時代下流行的框架,并且…

算法:對象方式數組去重

var arr [3, 1, 1, 4 , 2 , 4 , 2 , 4 , 2, 1, 1, 3, 3, 3];var ary[];var obj{};for(var i0;i<arr.length;i){var curarr[i];if(!obj[cur]){obj[cur]cur;ary.push(cur);}}console.log(ary); 復制代碼

python實現路由功能_python 實現重啟路由器

有一些服務&#xff0c;需要動態IP&#xff0c;所以我們用重啟路由器的方法實現。人工重啟不可選&#xff0c;用定時腳本執行即可。貼代碼&#xff0c;每種路由器&#xff0c;提示不一樣。需要路由器有telnet功能才行。#!/usr/bin/env python# -*- coding: utf-8 -*-import tel…

SpringBoot自定義Starter(自動配置類)

前言 SpringBoot其實從誕生以來圍繞的核心就是快速構建項目&#xff0c;快速構建的前提是有人幫你做好輪子&#xff0c;開發者只要拿來即用就好了&#xff0c;而造好輪子的人就是SpringBoot的開發者&#xff0c;引入自動配置的形式幫助開發者快速創建項目&#xff0c;而自動配…

Java并發編程之synchronized關鍵字解析

前言 公司加班太狠了&#xff0c;都沒啥時間充電&#xff0c;這周終于結束了。這次整理了Java并發編程里面的synchronized關鍵字&#xff0c;又稱為隱式鎖&#xff0c;與JUC包中的Lock顯示鎖相對應&#xff1b;這個關鍵字從Java誕生開始就有&#xff0c;稱之為重量級鎖&#xf…