Zookeeper基础常用操作以及ACL权限
這次將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)總是介于CONNECTING和CONNECTED之間。但是,如果出現(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ò)authentication的user都有權(quán)限(zookeeper支持通過(guò)kerberos來(lái)進(jìn)行authencation, 也支持username/password形式的authentication)
digest: 它對(duì)應(yīng)的id為username: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è)bit的IP段
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)題。
- 上一篇: unzip 报错error [clas.
- 下一篇: pycharm与webstorm 201