1. zookeeper的簡介node
zookeeper由文件系統和通知機制構成數據庫
應用場景:緩存
①dubbo+ zookeeper 實現rpc遠程調用中服務器
②負載均衡session
③發佈訂閱負載均衡
④分佈通知、分佈式鎖分佈式
1)文件系統性能
Zookeeper使用樹形結構管理數據。並且以「/」做爲樹形結構的根節點。樹形結構中的每個節點都是一個「znode」。文件系統中的目錄能夠存放其餘目錄和文件,znode中能夠存放其餘znode,也能夠對應一個具體的值,znode和它對應的值之間是鍵值對的關係。測試
樹形結構ui
①樹形結構的主體由znode組成
②每個節點包含下面兩部分
I. 值:節點的路徑和當前節點上保存的值構成一個「鍵值對(key-value)」關係
II. 狀態 stat
2)通知機制
在分佈式項目中隨着業務功能愈來愈多,具體的功能模塊也會愈來愈多,一個大型的電商項目能達到幾十個模塊甚至更多。這麼多模塊的工程由可能須要共享一些信息,這些信息一但發生變化,各個相關模塊工程中手動逐一修改會很是的麻煩,甚至可能發生遺漏。
使用ZooKeeper的通知機制後,各個模塊工程在特定的znode上設置Watcher(觀察者)來監控當前節點上值的變化,一旦Watcher檢測到了數據變化就會當即通知模塊,從而實現「一處修改,到處生效」的效果。
①目的:一處修改到處更新
②機制:觀察者模式
2. zoo_sample.cfg文件解析
該文件在zookeeper的解壓包的conf中(如:/opt/zookeeper-3.4.9/conf)
文件中的各個參數的說明:
1)tickTime 通訊心跳數,zookeeper服務器心跳時間,單位毫秒。
Zookeeper使用的基本時間,服務器之間或者客戶端與服務器之間維持心跳的時間間隔,也就是每一個tickTime時間就會發送一個心跳。
用於心跳機制,而且設置最小的session超時時間爲兩倍心跳時間(session的最小超時時間是2 * tickTime)。
2)initLimit LF初始通訊時限
集羣中的Follower跟隨者服務器(F)與Leader領導者服務器(L)之間初始鏈接時能容忍的最多心跳數(tickTime的數量)
投票選舉新Leader的初始化時間Follower在啓動過程當中,會從Leader同步全部最新數據,而後肯定本身可以對外服務的起始狀態。
Leader容許Follower在initLimit時間內完成這個工做。
3)syncLimit LF同步通訊時限
集羣中Leader與Follwer之間的最大響應時間單位,假如響應超過syncLimit * tickTime,Leader認爲Follwer死掉,從服務器列表中刪除Follower
在運行過程當中,Leader負責與ZooKeeper集羣中全部機器進行通訊,例如經過一些心跳檢測機制,來檢測機器的存活狀態。
若是L發出心跳包在syncLimit以後,尚未從F那收到響應,那麼久認爲這個F已經不在線了。
4)dataDir 數據文件目錄 + 數據持久化路徑
保存內存數據庫快照信息的位置,若是沒有其餘說明,更新的事務日誌也保存到數據庫。
5)clientPort 客戶端鏈接端口
3. ZooKeeper經常使用命令
1)服務端的相關命令(在zookeeper安裝目錄的bin目錄下)
啓動:./zkServer.sh start
中止:./zkServer.sh stop
查看狀態:./zkServer.sh status
2)客戶端的相關命令
進入:./zkClient.sh
退出:quit
3)客戶端節點相關操做
①ls / ls2
②create [-s] [-e] path data 建立節點和節點上對應的值
【-s】:含有序列
【-e】:臨時(重啓或者超時消失)
【path】:節點的路徑
【data】:節點上綁定的值
例:create /test abc
③delete和rmr
【delete】 只能刪除空節點
【rmr】能夠在刪除當前節點時遞歸刪除子節點
④stat path 查看狀態
4)節點值操做命令
①set path data:設置值
例:set /test aaa
②get path data:獲取值
例:get /test
注:若敲錯了命令,則會給出全部的命令操做提示信息
5)關於狀態stat信息的詳細說明:
簡介:znode維護了一個stat結構,這個stat包含數據變化的版本號、訪問控制列表變化、還有時間戳。版本號和時間戳一塊兒,可以讓ZooKeeper驗證緩存和協調更新。每次znode的數據發生了變化,版本號就增長。
參數說明:
czxid:引發這個znode建立的zxid,建立節點的事務的zxid(ZooKeeper Transaction Id)
ctime:znode被建立的毫秒數(從1970年開始)
mzxid:znode最後更新的zxid
mtime:znode最後修改的毫秒數(從1970年開始)
pZxid:znode最後更新的子節點zxid
cversion:znode子節點變化號,znode子節點修改次數
dataversion:znode數據變化號
aclVersion:znode訪問控制列表的變化號
ephemeralOwner:若是是臨時節點,這個是znode擁有者的session id。若是不是臨時節點則是0。
dataLength:znode的數據長度
numChildren:znode子節點數量
6)四字命令
ZooKeeper支持某些特定的四字命令,他們大可能是用來查詢ZooKeeper服務的當前狀態及相關信息的,使用時經過telnet或nc向ZooKeeper提交相應命令。例:echo ruok | nc localhost 2181
①nc命令須要安裝對應的程序纔可使用。
yum install -y nc
②經常使用四字命令
ruok:測試服務是否處於正確狀態。若是確實如此,那麼服務返回「imok 」,不然不作任何相應
stat:輸出關於性能和鏈接的客戶端的列表
conf:輸出相關服務配置的詳細信息
cons:列出全部鏈接到服務器的客戶端的徹底的鏈接 /會話的詳細信息。包括「接受 / 發送」的包數量、會話id 、操做延遲、最後的操做執行等等信息
dump:列出未經處理的會話和臨時節點
envi:輸出關於服務環境的詳細信息(區別於conf命令)
reqs:列出未經處理的請求
wchs:列出服務器watch的詳細信息
wchc:經過session列出服務器watch的詳細信息,它的輸出是一個與watch相關的會話的列表
wchp:經過路徑列出服務器 watch的詳細信息。它輸出一個與 session相關的路徑