Apache ZooKeeper - ZK的基本特性与节点应用场景一览
文章目錄
- 概述
- ZK產生的背景
- 安裝
- JDK依賴
- 下載
- 解壓
- 修改配置文件
- 啟動 / 停止
- 連接服務器
- 配置文件說明
- ZK 核心概念 (文件系統數據結構+監聽通知機制)
- 文件系統數據結構
- 6種Node類型
- 監聽通知機制
- ZK的應用場景
概述
說點正確的廢話
zookeeper是一個分布式協調框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經常遇到的一些數據管理問題,如:統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等。
ZK由JAVA編寫,支持JAVA 和C兩種語言的客戶端。
ZK產生的背景
通常情況下,單個物理節點很容易達到性能,計算或者容量的瓶頸,所以這個時候就需要多個物理節點來共同完成某項任務,一個分布式系統的本質是分布在不同網絡或計算機上的程序組件,彼此通過信息傳遞來協同工作的系統,而Zookeeper正是一個分布式應用協調框架,在分布式系統架構中有廣泛的應用場景。
項目從單體到分布式轉變之后,將會產生多個節點之間協同的問題
這些問題可以統一歸納為多節點協調問題,如果靠節點自身進行協調這是非常不可靠的,性能上也不可取。必須由一個獨立的服務做協調工作,它必須可靠,而且保證性能。
安裝
JDK依賴
Java編寫,依賴JDK, JDK Version >=8
下載
官網下載: https://zookeeper.apache.org/releases.html#download
當然了,國內也有鏡像可以下載,比如
3.5.8 版本
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz3.6.2 版本
[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz這里我們選用3.5.8的版本
解壓
[root@localhost ~]# tar -xvzf apache-zookeeper-3.5.8-bin.tar.gz修改配置文件
cd {zookeeper_home}/conf # 按實際路徑調整 cp zoo_sample.cfg zoo.cfg啟動 / 停止
{zookeeper_home}/bin/zkServer.sh # 按實際路徑調整,查看啟動支持哪些參數[root@localhost bin]# ./zkServer.sh /usr/bin/java ZooKeeper JMX enabled by default Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd} [root@localhost bin]#啟動,采用默認的配置文件
[root@localhost bin]# ./zkServer.sh start /usr/bin/java ZooKeeper JMX enabled by default Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg Starting zookeeper ... STARTED [root@localhost bin]#停止
[root@localhost bin]# ./zkServer.sh stop /usr/bin/java ZooKeeper JMX enabled by default Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED [root@localhost bin]#也可以指定配置文件,不指定的話默認使用 conf/zoo.cfg
[root@localhost bin]# ./zkServer.sh start ../conf/zoo.cfg連接服務器
bin/zkCli.sh ‐server ip:port例子
[root@localhost bin]# ./zkCli.sh -server 192.168.126.129:2181 /usr/bin/java Connecting to 192.168.126.129:2181 2020-11-15 23:43:05,472 [myid:] - INFO [main:Environment@109] - Client environment:zookeeper.version=3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT ........ ........ ........ Welcome to ZooKeeper!........ ........ ........WATCHER::WatchedEvent state:SyncConnected type:None path:null [zk: 192.168.126.129:2181(CONNECTED) 0]配置文件說明
# zookeeper時間配置中的基本單位 (毫秒) tickTime=2000 # 允許follower初始化連接到leader最大時長,它表示tickTime時間倍數 即:initLimit*tickTime initLimit=10 # 允許follower與leader數據同步最大時長,它表示tickTime時間倍數 syncLimit=5 #zookeper 數據存儲目錄 dataDir=/tmp/zookeeper #對客戶端提供的端口號 clientPort=2181 #單個客戶端與zookeeper最大并發連接數 maxClientCnxns=60 # 保存的數據快照數量,之外的將會被清除 autopurge.snapRetainCount=3 #自動觸發清除任務時間間隔,小時為單位。默認為0,表示不自動清除。 autopurge.purgeInterval=1ZK 核心概念 (文件系統數據結構+監聽通知機制)
可以先把Zookeeper 理解為 是一個用于存儲少量數據的基于內存的數據庫,主要有如下兩個核心的概念:文件系統數據結構+監聽通知機制
文件系統數據結構
Zookeeper維護一個類似文件系統的數據結構
每個子目錄項都被稱作為 znode(目錄節點),和文件系統類似,可以自由的增加、刪除znode,在一個znode下增加、刪除子znode。
6種Node類型
- PERSISTENT-持久化目錄節點
客戶端與zookeeper斷開連接后,該節點依舊存在,只要不手動刪除該節點,永遠存在
- PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點
客戶端與zookeeper斷開連接后,該節點依舊存在,只是Zookeeper給該節點名稱進行順序編號 ,非常適合用于分布式鎖、分布式選舉等場景
- EPHEMERAL-臨時目錄節點
客戶端與zookeeper斷開連接后,該節點被刪除 適用于心跳,服務發現等場景。
- EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點
客戶端與zookeeper斷開連接后,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號
- Container 節點
3.5.3 版本新增,如果Container節點下面沒有子節點,則Container節點在未來會被Zookeeper自動清除,定時任務默認60s 檢查一次
- TTL 節點 (Time To Life)
默認禁用,只能通過系統配置 zookeeper.extendedTypesEnabled=true 開啟,不穩定
監聽通知機制
客戶端注冊監聽它關心的任意節點,或者目錄節點及遞歸子目錄節點
如果注冊的是對某個節點的監聽,則當這個節點被刪除,或者被修改時,對應的客戶端將被通知
如果注冊的是對某個目錄的監聽,則當這個目錄有子節點被創建,或者有子節點被刪除,對應的客戶端將被通知
如果注冊的是對某個目錄的遞歸子節點進行監聽,則當這個目錄下面的任意子節點有目錄結構的變化(有子節點被創建,或被刪除)或者根節點有數據變化時,對應的客戶端將被通知。
注意:
ZK的應用場景
總結
以上是生活随笔為你收集整理的Apache ZooKeeper - ZK的基本特性与节点应用场景一览的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小工匠聊架构 - 缓存与数据库【双写不一
- 下一篇: Apache ZooKeeper - 节