絕對重要!
zkServer.sh stat
zkServer.sh status
zkCli.sh -server ip:port
create path data
rmr path
ls
get
數據結構
節點類型
n 持久非順序節點
create /node/subnode data
n 持久順序節點
create -s /node/sencodnode data
自動生成主鍵使用
n 臨時順序節點
create -e -s /tempnode2 data
n 臨時非順序節點
create -e /tempnode data
臨時節點:創建節點的連接關閉后,節點自動被刪除 就是臨時節點。
持久 / 臨時
順序 / 非順序
順序節點:節點序號自增,可以創建子節點
臨時節點:隨着創建節點的事務關閉而自動刪除。 不能創建子節點。
節點信息
C:ceate
查看一個文件的狀態信息
[zk: localhost:2181(CONNECTED) 1] stat /a
cZxid = 0x200000009
ctime = Thu Mar 22 13:07:19 CST 2018
mZxid = 0x200000009
mtime = Thu Mar 22 13:07:19 CST 2018
pZxid = 0x200000009
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 1
numChildren = 0
信息說明
狀態屬性 |
說明 |
cZxid |
數據節點創建時的事務ID |
ctime |
數據節點創建時的時間 |
mZxid |
數據節點最后一次更新時的事務ID |
mtime |
數據節點最后一次更新時的時間 |
pZxid |
數據節點的子節點列表最后一次被修改 (是子節點列表變更,而不是子節點內容變更)時的事務ID |
cversion |
子節點的版本號,當添加/刪除子節點的時候發生改變 |
dataVersion |
數據節點的版本號 僅僅當data屬性發生改變的時候而改變 |
aclVersion |
數據節點的ACL版本號 |
ephemeralOwner |
如果節點是臨時節點,則表示創建該節點的會話的 SessionID; 如果節點是持久節點,則該屬性值為0 |
dataLength |
數據內容的長度 |
numChildren |
數據節點當前的子節點個數 |
重要命令詳解
管理命令
n zkServer.cmd
n zkServer.sh
n 參數
n start
n start-foreground
n stop
n restart
n status
n upgrade
n print-cmd
n zkCli.sh
n zkCli.cmd
客戶端命令
- help
- 節點管理
- rmr path
- get path [watch]
監視某一個節點,通常情況 監視被刪除或者修改。
- stat path [watch]
stat 和 get 區別 前者不顯示數據 后者顯示數據
- create [-s] [-e] path data acl
- set path data [version]
修改某個path 下的對應的版本號的數據。Path+版本號做唯一約束進行修改
- delete path [version]
常常用於處理分布式樂觀鎖
- ls path [watch]
- ls2 path [watch]
這個命令 等於 ls + stat
- 配額管理
- setquota -n|-b val path
- delquota [-n|-b] path
- listquota path
超出配額的時候僅僅給出警告,但是並不拋出異常或者是導致操作失敗.
- 命令管理
- history
列出歷史執行命令
- redo cmdno
重復執行歷史命令
redo 10
- printwatches on|off
- sync path
以下幾個是權限管理
- setAcl path acl
- addauth scheme auth
- getAcl path
獲取權限.
- 連接管理
- quit
如果有連接 則關閉連接;退出終端。
- close
關閉當前連接 但是不退出客戶端
- connect host:port
連接某一個zk 的服務器
配置文件說明
1、tickTime=2000
以毫秒為單位的心跳。是zk維持分布式服務的一個基本的時間單位。
# The number of milliseconds of each tick
2、initLimit=10
時間表示的是 tickTime*10 ,得到時間是20秒。
新加進來的服務初始化的時候能夠容忍的時間。
3、syncLimit=5
同步的時候 經過5個時間單位 同步認為失敗。
4、clientPort 表示對外服務提供的端口。 默認數值2181.
當前的zkServer 綁定哪個端口.
5、dataDir 存儲的數據 節點的數據、日志
節點數據存放的位置.進程id 當前的服務節點編號.
6、
只有配置集群的時候這個才有意義.
server.X=A:B:C
只有在集群的情況下才使用。
X 表示的服務的編號
A 表示某個服務器的地址
B 服務之間需要交互數據,在數據進行交互的時候所使用的端口
默認數值:2888
C: 選舉leader 使用的端口 默認使用3888
Leader 產生:才有投票的算法,帕克西算法.
通常情況下,zk的集群個數是奇數個. 集群新增節點的時候,不影響leader角色.
如果leader退出集群,則集群會自動選舉新的leader
應用場景
分布式框架結構下使用.
應用場景
提供的服務包括:統一命名服務、統一配置管理、統一集群管理、服務器節點動態上下線、軟負載均衡等。
統一命名服務
比如項目中經常用到域名,但是ip地址可能會發生改變.使用這個方式避免了因為IP地址發生改變而去重新修改項目的問題.
統一配置管理
統一集群管理
服務器動態上下線
負載均衡
Zookeeper 當中的節點充當每個服務器訪問次數的計數器,當有新的請求發送過來的時候,將新的請求派發給服務次數最少的那個上邊.