1. 程式人生 > >zookeeper學習小節01

zookeeper學習小節01

 

zookeeper的使用:

1.安裝zookeeper,並且要知道zookeeper下面的幾個主要目錄是幹什麼的。
比如說conf、bin、jar等等
要複製conf裡面的檔案,然後改下配置
要在vim pro.... 裡面新增zk的環境

具體安裝zk配置, 請參考該博主的優秀博文  https://www.cnblogs.com/tonylovett/p/5227973.html

 

 補充:啟動的時候可能會報錯,要檢查這幾項

a netstat -nltp | grep 2181 如果被佔用就-------kill 程序的pid
b 通過sudo service iptables status檢查防火牆,如果開啟就用命令關掉 sudo service iptables stop

 

2.zookeeper的基本資料模型

3.zk的作用提現:(重要概念)
A master節點選舉模式,主節點掛了以後,從節點(備胎)就會接手工作,並且保證這個節點是唯一的,這也是所謂首腦模式,從而保證我們的叢集是高可用的。
B 統一配置檔案管理,即只需要部署一臺伺服器,則可以把相同的配置檔案同步更新到其他所有伺服器,此操作在雲端計算中用的特別多,(假設修改了redis統一配置)
C 釋出與訂閱,類似訊息佇列mq,dubbo釋出者把資料存在znode節點上,訂閱者會讀取這個資料。(zk相當於一箇中介)
D 提供分散式鎖,在分散式環境中不同程序(伺服器)之間爭奪資源,類似於多執行緒中的鎖。
eg:比如說,網盤中有個檔案(下面所有的ABCD伺服器操作的都是這個檔案),A伺服器對檔案進行讀操作,B伺服器對檔案進行寫操作,c伺服器刪除檔案操作,D伺服器對檔案進行讀操作。
面對這麼多的伺服器(併發),檔案該聽誰的呢?先來後到?還是最後一個先?
辦法就是加一個鎖機制,A伺服器在對檔案操作的時候,其他的伺服器要排隊。等A操作完以後,下面的伺服器才能做操作。
專業的說法就是,A伺服器在操作時,其他的伺服器阻塞住了,直到A伺服器釋放了,然後B操作,B釋放,然後C操作,C釋放.....,以此類推,是一個順序。

E 叢集管理,叢集中保證資料的強一致性。
eg:在叢集環境中,它的節點都是一致的
比如說有三個節點。A是主節點,B是子節點,C是子節點。
當我們修改A節點中的資料的時候,zk會使用同步機制,A節點的資料會同步到B節點和C節點中(三個節點資料一模一樣)。
客戶端讀取A節點的資料,某天發生了意外,A節點不能繼續工作,我們把客戶端連線切到B節點,也是能讀到資料的。
也就是說,不管客戶端連線哪臺機器,都能都讀取資料的,保持資料的一致性。

補充:如何調整好我們的zk配置 才能達到最優了

 


4. 熟悉zookeeper常用命令列操作
通過 ./zkCli.sh 開啟zk的客戶端進行命令列後臺,然後help
eg:
ls ls / 檢視當前節點下面的子節點
ls2 檢視
stat 查出來的東西和ls ls2一樣,是他們的整合(節省程式碼)
get get / 把當前節點裡面的資料取出來。 aaa是節點名稱,123是值
create 建立節點(後面跟引數可以建立臨時節點,永久節點,瞬時節點)eg: create /aaa 123 -------增
create -e 建立臨時節點
set 修改節點 --------改
delete 刪除節點 --------刪

 

 

5.zk特性-session(客戶端到服務端請求的一次會話)
session如果過期了,session中的zk裡的所有的臨時節點znode都會被拋棄。

 

6.zk特性-vatcher機制(重要,需要自己去理解,類似於一個觸發器)
針對每個節點的操作,都會有一個監督者,就是vatcher

 

7. 理解watch事件

當監控的某個物件(節點)發生了變化,就會觸發watcher事件

watcher事件型別一:
父節點、子節點 增刪改都能觸發其watcher。並且增刪改的觸發事件不同。其中刪除父節點,可以設定 delete /節點名稱 watch

watcher事件型別二:
ls為父節點設定watcher,建立子節點觸發:
NodeChildrenChanged

ls為父節點設定watcher,刪除子節點觸發:
NodeChildrenChanged

ls為父節點設定watcher,修改子節點不觸發事件

補充:
比如說aaa是父節點,ccc是子節點
eg:
ls /aaa watcher ------------------ls為父節點設定watcher
create /aaa/ccc ------------------create 建立子節點
set /aaa/ccc 9090 -----------------改變父節點下面 子節點的值
get /aaa/ccc watch ----------------修改子節點不觸發事件.只有這樣做才觸發。把子節點當做是父節點,刪除子節點會觸發:NodeDataChanged

 

watcher 使用場景:
1.統一資源配置。
設定了watcher事件後,每一個節點都有vatcher事件,當修改一個節點,剩下的節點都通知客戶端進行改變。

 


8. 理解ACL 許可權控制
特性:
針對節點可以設定相關讀寫等許可權,目的為了保障資料安全
許可權permissions 可以指定不同的許可權範圍以及角色

ACL使用場景:
1.開發、測試人員環境分離,開發者無權操作測試庫的節點,只能看

ACL命令列
getAcl:獲取某個節點的acl許可權資訊 eg:getAcl /aaa/bbb
setAcl:設定某個節點的acl許可權資訊
addauth :輸入認證授權資訊,註冊時輸入明文密碼(登陸),但是在zk的系統裡,密碼是以加密的形式存在的

ACL的構成一:
zk的acl通過(scheme id permissions)三個常用來構成許可權列表
scheme :代表採用的某種許可權機制
id :代表允許訪問的使用者
permissions :許可權組合字串


ACL的構成二:
world:world下只有一個id,即一個使用者,建立節點預設的許可權是anyone,組合的寫法就是--- world:anyone:[permissions]

auth:代表認證登入,需要註冊使用者有許可權就可以,(明文密碼)寫法為: auth:user:password:[permissions]

digest:需要對密碼加密才能訪問(兩層加密),寫法為:digest:username:BASE64(SHA1(password)):[permissions]

ip:當設定為指定的ip地址,此時限制ip進行訪問,比如 ip:192.168.1.1:[permissions]

super:代表超級管理員,擁有所有的許可權


ACL的構成三:
許可權字串縮寫 crdwa
create:建立子節點
read :獲取節點
write :設定節點資料
delete :刪除子節點
admin :設定許可權

 

eg:
setAcl /aaa/bbb world:anyone:crwa 設定子節點的許可權為增刪改,如果你要刪除bbb的值就會報錯:Authentication is not valid

 

 

 

9. zookeeper 四字命令之一(常用,不用在指定的目錄下執行,在裝有zk的伺服器上面執行就可以了)
stat 檢視zk的狀態資訊 eg: echo stat |nc localhost 2181 --localhost是當前伺服器的ip,可以用localhost,也可以用詳細ip192.1XXXXX
ruok 檢視當前zkserver是否啟動 eg: echo ruok |nc localhost 2181
dump 列出未經處理的回話和臨時節點 eg: echo dump |nc localhost 2181
conf 檢視配置的資訊 eg: echo conf |nc localhost 2181
cons 展示連線到伺服器的客戶端資訊 eg: echo cons |nc localhost 2181
envi 環境變數(去檢視zk相關的環境變數,把相關的環境變數資訊都打印出來) eg:echo envi |nc localhost 2181
mntr 監控zk健康資訊 eg: echo mntr |nc localhost 2181
wchs 檢視watches的個數 eg: echo wchs |nc localhost 2181
wchc 與 wchp session 與watch及path與watch資訊

 

11 zk的叢集
叢集:叢集就是當一個節點掛掉是沒有關係的,因為有心跳機制(選舉模式)

 

 

 


搭建注意點:
1.配置資料檔案 myid 1/2/3 對應 server.1/2/3 ,最少的叢集是3臺。

2.通過 ./zkCli.sh -server[ip]:[port] 檢測叢集是否配置成功