zookeeper 管理命令


Zookeeper

1)      簡介

Zk使用的是一個類似文件系統的數結構來管理。每個節點在zk中為znode,有一個唯一的標識路徑。Znode中可以再包含znode或者存放數據;znode中的數據可以由多個版本,因為這些數據在同一個目錄下,所以在查詢的時候必須帶上版本號。

(1)     臨時節點:EPHEMERAL,zk中的節點分為臨時節點與永久性節點。臨時節點的生命周期依賴於其創建的會話。當創建這個znode的客戶端與服務器失去聯系,這個znode的session即失效,znode中的數據將被刪除。臨時節點是不能有子節點的。永久性節點只有在客戶端顯示的刪除才會從zk中去除。

(2)     監控。如果znode中的數據或者子節點的目錄發生變化,可以通知設置監控的客戶端。即watches.客戶端在節點上設置watch,當節點狀態發生改變會觸發watch所對應的操作。當watch被觸發,zk向客戶端發送一條通知。

(3)     數據訪問。每個節點存儲的數據都是原子性的操作。讀取返回節點中的所有數據,寫入將會替換節點中的所有數據。

(4)     順序節點。創建znode時,用戶可以請求在zk的路徑后面加一個遞增的計數。這個計數對於父節點來說是唯一的。

(5)     持久順序節點:PERSISTENT_SEQUENTIAL,與持久節點不同的是,父節點會記錄下每個子節點的創建順序,可以利用這個屬性,zk給節點后面添加一個后綴,作為新的節點名稱。有范圍的限制,其值為整型的最大值。

(6)     臨時順序節點:EPHEMRAL_SEQUENTIAL,利用臨時順序節點可以實現共享鎖。

每個znode由3部分組成:

Stats:狀態描述,權限、版本等

Childen:該節點下的子節點

Data:相關的數據信息

 

 

問題:

  1. zk中有沒有訪問控制,授權的設置?

有,zk中的ACL

  1. 什么時候需要創建臨時節點?

比如zookeeper發布服務時,服務啟動時將自己的信息注冊為順序節點,當服務斷掉之后,臨時節點也會被刪除。

  1. 順序節點的作用?

可以有助於生成序列號

  1. 為什么kafka要使用zookeeper,zk主要應用於什么場景?

 Kafka使用zk將消息生成、存儲、消費等過程結合在一起。借助zk,能夠將所有組件在無狀態的情況下組合在一起,實現生產者與消費者的負載均衡。

  1. 注冊broker,注冊topic,獲知每個topic的partition
  2. 負載均衡consumer,存儲offset

管理kafka中各種狀態信息。

其中zk使用的場景包括:

1、    需要進行統一的命名服務,zk使用的是樹形結構,可以避免產生一樣的名稱

2、    配置管理,在多服務器的情況下,將公共的配置信息放在zk中,利用watch,一旦配置信息發生了改變,每個服務器都將得到信息。

3、    集群管理。獲取每台服務器的狀態,新增或者宕機都必須馬上通知其他的機器,實現主從的集群配置。

4、    共享鎖。在跨進程或者跨

 

2)      zkCli命令

利用bin下的zkCli來對zk進行管理。

ZkCli.sh -server 127.0.0.1:2181完成服務器連接,切記,server前面只有一個橫線

(1)       查看按當前zk中包含的內容

ls

[cluster, controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]

看到這里不禁問,這些分別代表什么,一個個的進行闡述

Cluster

 

Controller

管理leader election及各種failover,管理partition及副本狀態,如果當前的controller失敗,會從其它正常的broker中選擇一個出來,那么這個與leader之間的區別呢?leader是否可能是controller?

所有的partition都會有一個leader,這個由controller決定,這個controller只是broker中的一個。而有多少個partition就會有多少個leader。

Config

其下的節點為:changes,clients,topics,從名稱中可以看出是客戶及topics的信息

Admin

估摸是與授權有關系。

 

(2)       創建節點

Create /zk/node1 在zk目錄下創建一個node1的節點

在其下設置其關聯的字符串:set /zk/node1 “node1”

(3)       獲取節點信息

get /zk/node1

得到的結果如下:

node1

cZxid = 0x20000038e

ctime = Tue May 09 20:30:02 CST 2017

mZxid = 0x200000393

mtime = Wed May 10 08:37:00 CST 2017

pZxid = 0x20000038e

cversion = 0

dataVersion = 2

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 5

numChildren = 0

(4)       刪除節點

Delete /zk/node1

 

問題:1.如何正確退出zkCli.sh的命令台

 

3)      Zk的四字字母命令

(1)       Conf 輸出相關服務配置的詳細信息

echo conf |nc 127.0.0.1 2181

得到的結果為:

clientPort=2181

dataDir=/home/zookeeper/data/version-2

dataLogDir=/home/zookeeper/log/version-2

tickTime=2000

maxClientCnxns=60

minSessionTimeout=4000

maxSessionTimeout=40000

serverId=2

initLimit=10

syncLimit=5

electionAlg=3

electionPort=3888

quorumPort=2888

peerType=0

可以看到主要是一些設置的信息

重要的配置信息:

tickTime:CS通信的心跳間隔時間。是在服務器之間或者服務器與客戶端之間維持的心跳時間間隔。該值設置的過小,會導致會話容易超時。

minSessionTimeout:客戶端與服務器之間保持連接的最小超時時間。

maxSessionTimeout:最大的超時時間,所以客戶端在設置會話的超時時間時,其值必須處於最大超時與最小超時之間,否則會被強制設置為最大或者最小值。

initLimit:備份節點與主節點之間初次連接時能夠容忍的最多心跳數,該值*tickTime為能夠容忍的時間。

syncLimit:同步時,備份節點與主節點之間能夠容忍的最多心跳數。

electionAlg:選舉算法。3對應FastLeaderElection算法,該值為默認值

electionPort:進行選舉采用的端口,其中3888,在選舉階段監聽其它服務器的連接。

quorumPort:其中Quorum為分布式系統中用來保證數據冗余和最終一致性的投票算法。2888為服務器之間通信的端口。如果該服務器為領導者,用來監聽追隨者。

peerType:是否為觀察者,主要有兩種:觀察者或者參與者。0代表參與者

問題:

  1. initLimit: 是完成的時間還是建立連接能夠容忍的時間?

是指leader允許follower在此時間內完成同步的工作。

  1. syncLimit: 即同步必須在此時間內完成or主節點可以比備份節點異步的時間間隔?

在通信的過程中,檢測follower的存活狀態,如果在該時間內沒有收到follower的響應則認為follower已經失效了。

  1. 觀察者與參與者時間的區別

因為寫入操作必須是達到投票的半數,才能夠生效,所以,如果隨着節點不斷增加,相應的寫入成本會增加。基於此,觀察者加入,觀察者也可以處理讀取與寫入,會將這些請求給領導者,但是它與觀察者之間有一點區別,不參與投票,只監聽結果,所以增加觀察者不會影響zk服務的。

  1. 2181與2888,3888之間的區別

其中2181是監聽zk客戶端的連接。

  1. Nc是什么命令

它其實是netcat的簡寫,一個簡單、可靠的網絡工具,這里的具體可以去查看相關資料

 

(2)       Cons 得到連接信息的情況

/127.0.0.1:60098[1](queued=0,recved=213973,sent=213994,sid=0x25abaf5919b0000,lop=PING,est=1493971756904,to=6000,lcxid=0x2e2,lzxid=0x200000399,lresp=1494398623479,llat=0,minlat=0,avglat=0,maxlat=501)

 /127.0.0.1:44204[0](queued=0,recved=1,sent=0)

可以看到包括的信息有:

Ip,端口,接收包數、發送包數、連接的session id,最后的操作方式等信息

(3)       查看是否已經啟動了某服務

echo ruok|nc 127.0.0.1 2181

Imok

返回的lmok表示已經啟動了本地的zk服務

相對的,使用

 

(4)       Stat

狀態信息及連接信息,比如是否為leader,

相應的有個mntr能夠得到更多的監控zk的健康狀態等各種信息,包括追隨者數目等

(5)       Wchs

有watch path的連接數及watch的路徑數

(6)       Wchc

則更為細致的指出watch的有關path

4)      ZkServer.sh

Status得到zk服務的狀態:./zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /root/software/zookeeper-3.4.9/bin/../conf/zoo.cfg

Mode: leader

包括使用的配置文件,當前的mode

 

問題:

  1. 如何實現一套zookeeper管理多個Kafka集群?

(1)首先在zk中創建節點

(2)可以選擇在kafka的配置文件中的zookeeper添加節點的路徑

(3)如果是不同的集群可以創建不同的節點,然后不同的broker連接到不同的節點路徑下

  1. 如何正確關閉zk集群

直接到bin文件夾中啟動 zkServer.sh stop

  1. 如何正確關閉kafka

直接到bin文件夾中啟動 kafka-server-stop.sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM