日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Zookeeper基础常用操作以及ACL权限

發(fā)布時(shí)間:2025/3/11 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Zookeeper基础常用操作以及ACL权限 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這次將Zookeeper的一些基礎(chǔ)用法以及權(quán)限這塊的都補(bǔ)充一下在這篇博客中。

上篇博客介紹了基于ZooKeeper實(shí)現(xiàn)的分布式鎖,也介紹了一些ZooKeeper的節(jié)點(diǎn)類型以及監(jiān)聽機(jī)制,今天這里就不作過(guò)多的介紹了,大家也可以自行的去官方文檔上看看更具體的介紹ZooKeeper官方鏈接

會(huì)話

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

客戶端與服務(wù)端的一次會(huì)話連接,本質(zhì)是TCP長(zhǎng)連接,通過(guò)會(huì)話可以進(jìn)行心跳檢測(cè)和數(shù)據(jù)傳輸:

?

看下這圖,Zk客戶端和服務(wù)端成功連接后,就創(chuàng)建了一次會(huì)話,ZK會(huì)話在整個(gè)運(yùn)行期間的生命周期中,會(huì)在不同的會(huì)話狀態(tài)之間切換,這些狀態(tài)包括:

CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE

一旦客戶端開始創(chuàng)建Zookeeper對(duì)象,那么客戶端狀態(tài)就會(huì)變成CONNECTING狀態(tài),同時(shí)客戶端開始嘗試連接服務(wù)端,連接成功后,客戶端狀態(tài)變?yōu)?/span>CONNECTED,通常情況下,由于斷網(wǎng)或其他原因,客戶端與服務(wù)端之間會(huì)出現(xiàn)斷開情況,一旦碰到這種情況,Zookeeper客戶端會(huì)自動(dòng)進(jìn)行重連服務(wù),同時(shí)客戶端狀態(tài)再次變成CONNCTING,直到重新連上服務(wù)端后,狀態(tài)又變?yōu)?strong>CONNECTED,在通常情況下,客戶端的狀態(tài)總是介于CONNECTINGCONNECTED之間。但是,如果出現(xiàn)諸如會(huì)話超時(shí)、權(quán)限檢查或是客戶端主動(dòng)退出程序等情況,客戶端的狀態(tài)就會(huì)直接變更為CLOSE狀態(tài)

目錄

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

常用腳本

zkCli:連接ZooKeeper服務(wù)的客戶端腳本

bin/zkCli.sh -server 127.0.0.1:2181

zkServer:ZooKeeper服務(wù)的啟動(dòng)、狀態(tài)以及關(guān)閉腳本

啟動(dòng)ZK服務(wù):? bin/zkServer.sh?start

查看ZK服務(wù)狀態(tài): bin/zkServer.sh?status

停止ZK服務(wù): bin/zkServer.sh?stop

重啟ZK服務(wù): bin/zkServer.sh?restart?

參數(shù)大全

ZooKeeper服務(wù)啟動(dòng)默認(rèn)需加載conf文件夾下的zoo.cfg文件,參數(shù)也可以自行去官方文檔查詢,ZooKeeper配置文件官方參數(shù)大全

這里列舉一些常用的:

clientPort:參數(shù)無(wú)默認(rèn)值,必須配置,用于配置當(dāng)前服務(wù)器對(duì)外的服務(wù)端口,客戶端必須使用這端口才能進(jìn)行連接

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

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

dataLogDir:用于單獨(dú)設(shè)置transaction log的目錄,transaction log分離可以避免和普通log還有快照的競(jìng)爭(zhēng)

dataDir:新安裝zk這文件夾里面是沒(méi)有文件的,可以通過(guò)snapCount參數(shù)配置產(chǎn)生快照的時(shí)機(jī)

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

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

initLimit:多少個(gè)心跳時(shí)間內(nèi),允許其他server連接并初始化數(shù)據(jù),如果ZooKeeper管理的數(shù)據(jù)較大,則應(yīng)相應(yīng)增大這個(gè)值

syncLimit:多少個(gè)tickTime內(nèi),允許follower同步,如果follower落后太多,則會(huì)被丟棄。

常用命令

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

介紹一些常用命令:

顯示根目錄下、文件:?ls?/?使用?ls?命令來(lái)查看當(dāng)前?ZooKeeper?中所包含的內(nèi)容?

顯示根目錄下、文件:?ls2?/?查看當(dāng)前節(jié)點(diǎn)數(shù)據(jù)并能看到更新次數(shù)等數(shù)據(jù)?

創(chuàng)建文件,并設(shè)置初始內(nèi)容:?create?/zk?"test"?創(chuàng)建一個(gè)新的?znode節(jié)點(diǎn)“?zk?”以及與它關(guān)聯(lián)的字符串? [-e] [-s] 【-e 零時(shí)節(jié)點(diǎn)】 【-s 順序節(jié)點(diǎn)】

獲取文件內(nèi)容:?get?/zk?確認(rèn)?znode?是否包含我們所創(chuàng)建的字符串? [watch]【watch 監(jiān)聽】

修改文件內(nèi)容:?set?/zk?"zkbak"?對(duì)?zk?所關(guān)聯(lián)的字符串進(jìn)行設(shè)置

刪除文件:?delete?/zk?將剛才創(chuàng)建的?znode?刪除,如果存在子節(jié)點(diǎn)刪除失敗?

遞歸刪除:rmr? /zk將剛才創(chuàng)建的?znode?刪除,子節(jié)點(diǎn)同時(shí)刪除

退出客戶端:?quit

幫助命令:?help

節(jié)點(diǎn)

上篇講過(guò)節(jié)點(diǎn),所以今天這里就不談節(jié)點(diǎn)類型了,談?wù)劰?jié)點(diǎn)狀態(tài)屬性,在使用get命令查看具體數(shù)據(jù)的時(shí)候,會(huì)打印:

?

?ACL權(quán)限

在ZooKeeper里面可以控制節(jié)點(diǎn)的訪問(wèn)權(quán)限,保障數(shù)據(jù)的安全

表示為scheme:id:permissions,第一個(gè)字段表示采用哪一種機(jī)制,第二個(gè)id表示用戶,permissions表示相關(guān)權(quán)限(如只讀,讀寫,管理等)

schema:代表授權(quán)策略

id:代表用戶

permission:代表權(quán)限

scheme

?world: 它下面只有一個(gè)id, anyone, world:anyone代表任何人,zookeeper中對(duì)所有人有權(quán)限的結(jié)點(diǎn)就是屬于world:anyone的

auth: 它不需要id, 只要是通過(guò)authenticationuser都有權(quán)限(zookeeper支持通過(guò)kerberos來(lái)進(jìn)行authencation, 也支持username/password形式的authentication)

digest: 它對(duì)應(yīng)的idusername:BASE64(SHA1(password)),它需要先通過(guò)username:password形式的authentication

ip: 它對(duì)應(yīng)?的id為客戶機(jī)的IP地址,設(shè)置的時(shí)候可以設(shè)置一個(gè)ip段,比如ip:192.168.1.0/16, 表示匹配前16個(gè)bitIP

id

scheme為auth時(shí):

username:password

scheme為digest時(shí):username:BASE64(SHA1(password))

scheme為ip時(shí):客戶端的ip地址。

scheme為world時(shí)anyone。

permission

CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、刪、改、查、管理權(quán)限,這5種權(quán)限簡(jiǎn)寫為crwda(即:每個(gè)單詞的首字符縮寫)

CREATE(c):創(chuàng)建子節(jié)點(diǎn)的權(quán)限

DELETE(d):刪除節(jié)點(diǎn)的權(quán)限

READ(r):讀取節(jié)點(diǎn)數(shù)據(jù)的權(quán)限

WRITE(w):修改節(jié)點(diǎn)數(shù)據(jù)的權(quán)限

ADMIN(a):設(shè)置子節(jié)點(diǎn)權(quán)限的權(quán)限

ACL命令

getAcl?

獲取指定節(jié)點(diǎn)的ACL權(quán)限信息

setAcl

setAcl /demo?world:anyone:crwa 設(shè)置指定節(jié)點(diǎn)的ACL權(quán)限

由于沒(méi)用設(shè)置刪除權(quán)限,所以在刪除的時(shí)候就會(huì)提示無(wú)法刪除

addauth

addauth? digest user1:123456設(shè)置用戶和密碼,

setAcl /demo auth:user1:123456:crwa?使用用戶去設(shè)置指定的權(quán)限,然后就可以直接登陸用戶進(jìn)行訪問(wèn)

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

對(duì)使用用戶設(shè)置權(quán)限的節(jié)點(diǎn)無(wú)權(quán)訪問(wèn),所以需登陸用戶進(jìn)行訪問(wèn)

即addauth digest user1:123456執(zhí)行一下,就可以訪問(wèn)指定節(jié)點(diǎn)了

digest

auth與digest的區(qū)別就是,前者使用明文密碼進(jìn)行登錄,后者使用密文密碼進(jìn)行登錄

addauth digest user1:123456? 設(shè)置用戶密碼

setAcl /demo digest:user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s=:crwa?使用digest來(lái)設(shè)置權(quán)限

如果這里使用明文登陸的話,會(huì)導(dǎo)致改節(jié)點(diǎn)不可訪問(wèn)

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

命令: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

結(jié)果:deer:123456->deer:ACFm5rWnnKn9K9RN/Oc8qEYGYDs=

IP

create? /testDir/testIp data? 創(chuàng)建節(jié)點(diǎn)

setAcl? /testDir/testIp ip:192.168.30.10:cdrwa? 給指定節(jié)點(diǎn)設(shè)置指定IP可訪問(wèn)

getAcl ?/testDir/testIp?獲取節(jié)點(diǎn)權(quán)限信息

超級(jí)管理員

為了避免出現(xiàn)因權(quán)限設(shè)置的問(wèn)題,所以在ZooKeeper中有超級(jí)管理員的權(quán)限存在

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

在ZooKeeper啟動(dòng)的參數(shù)中添加啟動(dòng)超級(jí)管理員

添加參數(shù):"-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs="

在客戶端中啟動(dòng)超級(jí)管理員:

addauth digest super:admin?

常用四字命令

ZooKeeper?支持某些特定的四字命令字母與其的交互。用來(lái)獲取?ZooKeeper?服務(wù)的當(dāng)前狀態(tài)及相關(guān)信息??赏ㄟ^(guò)?telnet?或?nc?向?ZooKeeper?提交相應(yīng)的命令?:

當(dāng)然,前提是安裝好了nc

echo?stat|nc?127.0.0.1?2181?來(lái)查看哪個(gè)節(jié)點(diǎn)被選擇作為follower或者leader

echo?ruok|nc?127.0.0.1?2181?測(cè)試是否啟動(dòng)了該Server,若回復(fù)imok表示已經(jīng)啟動(dòng)。

echo?dump|?nc?127.0.0.1?2181?,列出未經(jīng)處理的會(huì)話和臨時(shí)節(jié)點(diǎn)。

echo?kill?|?nc?127.0.0.1?2181?,關(guān)掉server

echo?conf?|?nc?127.0.0.1?2181?,輸出相關(guān)服務(wù)配置的詳細(xì)信息。

echo?cons?|?nc?127.0.0.1?2181?,列出所有連接到服務(wù)器的客戶端的完全的連接?/?會(huì)話的詳細(xì)信息

echo?envi?|nc?127.0.0.1?2181?,輸出關(guān)于服務(wù)環(huán)境的詳細(xì)信息(區(qū)別于?conf?命令)。

echo?reqs?|?nc?127.0.0.1?2181?,列出未經(jīng)處理的請(qǐng)求。

echo?wchs?|?nc?127.0.0.1?2181?,列出服務(wù)器?watch?的詳細(xì)信息。

echo?wchc?|?nc?127.0.0.1?2181?,通過(guò)?session?列出服務(wù)器?watch?的詳細(xì)信息,它的輸出是一個(gè)與?watch?相關(guān)的會(huì)話的列表。

echo?wchp?|?nc?127.0.0.1?2181?,通過(guò)路徑列出服務(wù)器?watch?的詳細(xì)信息。它輸出一個(gè)與?session?相關(guān)的路徑。

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

總結(jié)

以上是生活随笔為你收集整理的Zookeeper基础常用操作以及ACL权限的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。