關於Zookeeper需要了解的核心概念及常用命令
在分佈式系統構建的集羣中,每臺機器都有自己的角色定位,其中最爲典型的就是Master/Slave模式
Master:提供寫操作服務
Slave:通過異步複製的機制獲取新數據並提供讀服務
Zookeeper中引入了三種角色:Leader、Follower、Observer
Zookeeper通過選舉選定一臺機器爲Leader,這臺機器爲客戶提供讀寫服務
Session會話機制
當客戶端與服務器端成功建立連接後,session會話會隨之建立,同時這個時候會生成一個全局的SessionID。在Zookeeper中,一個客戶端連接指的是客戶端和服務器之間的一個TCP長連接。
Zookeeper對外服務端口默認是2181,當客戶端啓動時,新建立的TCP連接也將第一次啓動,它可以通過心跳檢測與服務器保持有效會話,同時它還會向Zookeeper發送請求並接收響應,另外還可以接收來自服務器的Watch事件通知。
Session中的SessionTimeout值用來設置客戶端的超時時間,當出現故障又想保持之間創建的會話,則需要在SessionTimeout規定的超時時間範圍內重新連接到集羣上的任意一臺服務器
Zookeeper中數據節點
Zookeeper中的節點指的是數據模型中數據單元,也叫做數據節點。
數據模型是以樹的格式進行存儲的,並通過/來進行路徑的分割,分割後的每一個Znode都會保存自己的數據內容,同時也會保存一系列的屬性值
Zookeeper中的每一個Znode都會對應一個叫做Stat的數據結構。Stat記錄了三個數據版本(version[當前Znode版本]、cversion[子節點版本]、aversion[ACL版本])
當用戶在Zookeeper中註冊了一些Watcher(時間監聽器)後,在一些特定的事件觸發的情況下,Zookeeper會把事件通知發送到感興趣的客戶端上
Zookeeper的權限控制策略:
採用了ACL(Access Control Lists)策略
定義了5種權限
-
CREATE:創建子節點的權限
-
READ:獲取節點數據和子節點的權限
-
WRITE:更新節點數據的權限
-
DELETE:刪除子節點的權限
-
ADMIN:設置節點ACL的權限
關於Zookeeper的配置文件說明:zoo.cfg
tickTime:指定了ZooKeeper中的基本時間單元
dataDir:指定存儲持久數據的本地位置
ClientPort:監聽客戶端連接的端口
initLimit:設定所有跟隨者與節點進行連接並同步的時間範圍,當在設定的時間段內半數以上的跟隨者未完成同步,則會進行一次Leader選舉
SyncLimit:設定允許Flower與Leader進行同步的時間
server.1……:分別代表了節點的IP地址(如果配置了hosts可以使用置的名稱)
Zookeeper環境變量的配置
環境變量在.bash_profile中進行配置
先確定Zookeeper的安裝路徑(如:/root/software/zookeeper-3.4.14)
export ZOOKEEPER_HOME=/root/software/zookeeper-3.4.14
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
更新完.bash_profile後執行命令 source .bash_profile 使配置的環境生效
使用命令:zkServer.sh status 可以查看當前機器下的狀態
Zookeeper中常用命令
-
zkServer.sh start 啓動ZooKeeper服務
-
zkServer.sh status 查看Zookeeper服務狀態
-
zkServer.sh stop 停止Zookeeper服務
-
zkServer.sh restart 重啓Zookeeper服務
客戶端連接Zookeeper的相關操作
客戶端需要連接ZooKeeper可以使用zkCli.sh命令
命令格式:zkCli.sh -server IP:port
如:zkCli.sh -server node1:2181
查看ZooKeeper常用命令:當連接上去後可以輸入help查看有哪些命令
connect命令:連接ZooKeeper服務器端,如:connect node2:2181
ls命令:列出對應目錄下的文件,是必須以/開頭的
create命令:創建節點 如:create /mynode1 content1
get命令:獲取數據與信息,如:get /mynode1
set命令:修改節點的內容,如:set /mynode1 content2 (注意:修改完數據後它的內容中有一個dataVersion會自增1)
delete命令:刪除節點,如:delete /mynode(注意:如果節點下存在子節點則需要先刪除子節點)