這篇文章主要講解了“Zookeeper的配置與集群管理方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Zookeeper的配置與集群管理方法是什么”吧!
ZooKeeper安裝好之后,在安裝目錄的conf文件夾下可以找到一個名為“zoo_sample.cfg”的文件,是ZooKeeper配置文件的模板。
ZooKeeper啟動時,會默認加載“conf/zoo.cfg”作為配置文件,所以需要將“zoo_sample.cfg”復制一份,命名為“zoo.cfg”,然后根據需要設定里面的配置項。
配置項很簡單,說明如下:
tickTime=2000
這個時間是作為 ZooKeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。單位為毫秒。
initLimit=10
這個配置項是用來配置 Leader接受Follower 初始化連接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度后 Leader還沒有收到Follower的返回信息,那么表明這個Follower連接失敗。總的時間長度就是 5*2000=10 秒。
syncLimit=5
這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個tickTime 的時間長度,總的時間長度就是5*2000=10 秒。
dataDir=/tmp/zookeeper
顧名思義就是 ZooKeeper保存數據的目錄,用于存放內存數據庫快照的文件夾,同時用于集群的myid文件也存在這個文件夾里。默認情況下,ZooKeeper 將寫數據的日志文件也保存在這個目錄里。注意:一個配置文件只能包含一個dataDir字樣,即使它被注釋掉了。
clientPort=2181
這個端口就是客戶端連接 ZooKeeper服務器的端口,ZooKeeper 會監聽這個端口,接受客戶端的訪問請求。
maxClientCnxns=60
大的客戶端連接數,默認為60.
autopurge.snapRetainCount=3
autopurge.purgeInterval=1
客戶端在與ZooKeeper交互過程中會產生非常多的日志,而且ZooKeeper也會將內存中的數據作為snapshot保存下來,這些數據是不會被自動刪除的,這樣磁盤中這些數據就會越來越多。不過可以通過這兩個參數來設置,讓zookeeper自動刪除數據。autopurge.purgeInterval就是設置多少小時清理一次。而autopurge.snapRetainCount是設置保留多少個snapshot,之前的則刪除。
“zkServer.sh”腳本用于執行Zookeeper的啟動、停止及狀態查看等操作
利用“zkServer.sh help”命令,可以查看支持的參數:
可見,“zkServer.sh”可以附帶的參數有:
(1)start:用于啟動服務端
(2)stop:用于停止服務端
(3)restart:用于重啟服務端
(4)status:用于查看服務端狀態
以及用于前臺啟動、更新等操作的其他參數。
例如,使用命令“zkServer.sh start”啟動ZooKeeper服務端,該命令后面可以附帶參數,用于指定配置文件的路徑,比如“zkServer.sh start ../conf/ZooKeeper.cfg”,代表使用ZooKeeper.cfg作為配置文件,如果不指定路徑,默認加載“conf/zoo.cfg”文件:
使用“zkServer.sh stop”停止服務端:
使用命令“zkCli.sh -server 127.0.0.1:2181”可以連接到IP為“127.0.0.1”,端口為“2181”的ZooKeeper服務器。如果連接本機的2181端口,則后面的參數可以省略。如:
此時,輸入“help”可以查看命令參數:
在前面已經提到過,ZooKeeper維護者一個樹形的數據結構,根節點為“/”。
“ls path”用于查看路徑path下的所有直接子節點:
可見,系統初始化的時候,根節點下會自動創建一個名為“zookeeper”的節點,用于存儲ZooKeeper的管理信息。所以用戶不能再根節點下創建同名的子節點。
“create path data”用于在path路徑下創建一個新節點,攜帶數據data。
例如,在根節點下新建一個名為“firstNode”節點,存儲的數據為“HelloWorld”:
./zkClient.sh -server 127.0.01
create /firstNode HelloWorld
“get path”用于獲取path節點下的數據,例如:
get /firstNode
除了返回節點存儲的數據之外,還有一系列的元信息,如代表節點創建時間的“cZxid”、“ctime”(兩種表示方法);節點的修改時間“mZxid”、“mtime”等。
“set path data ”用于將path節點下的數據更改為data。
如,將“/firstNode”下的數據更改為“WorldHello”:
set /firstNode WorldHello
“delete path”用于刪除path節點。
如,刪除“/firstNode”節點:
delete /firstNode
此外,還有用于設置節點ACL、查看節點狀態等其他命令,需要時可以查閱相關手冊。
ZooKeeper 支持某些特定的四字命令字母與其的交互。它們大多是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交相應的命令。
如:
ZooKeeper四字命令
conf
功能描述
輸出相關服務配置的詳細信息
cons
列出所有連接到服務器的客戶端的完全的連接 / 會話的詳細信息。包括“接受 / 發送”的包數量、會話 id 、操作延遲、最后的操作執行等等信息
dump
列出未經處理的會話和臨時節點
envi
輸出關于服務環境的詳細信息(區別于 conf 命令)
reqs
列出未經處理的請求
ruok
測試服務是否處于正確狀態。如果確實如此,那么服務返回“ imok ”,否則不做任何相應
stat
輸出關于性能和連接的客戶端的列表
wchs
列出服務器 watch 的詳細信息
wchc
通過 session 列出服務器 watch 的詳細信息,它的輸出是一個與 watch 相關的會話的列表
wchp
通過路徑列出服務器 watch 的詳細信息。它輸出一個與 session 相關的路徑
例如,查看配置信息:
“echo conf | nc 127.0.0.1 2181”:
nc為“NetCat”工具提供的命令,通常的Linux發行版中都帶有NetCat。NetCat在網絡工具中有“瑞士刀”美譽,被設計為一個簡單、可靠的網絡工具,可通過TCP或UDP協議傳輸讀寫數據。
該命令的意思為,將“conf”命令傳遞給127.0.0.1的2181端口(即本機的ZooKeeper服務端口),并將響應打印出來:
在一臺機器上運營一個ZooKeeper實例,稱之為單機(Standalone)模式。單機模式有個致命的缺陷,一旦唯一的實例掛了,依賴ZooKeeper的應用全得完蛋。
實際應用當中,一般都是采用集群模式來部署ZooKeeper,集群中的Server為奇數(2N+1)。只要集群中的多數(大于N+1臺)Server活著,集群就能對外提供服務。
在每臺機器上部署一個ZooKeeper實例,多臺機器組成集群,稱之為完全分布式集群。此外,還可以在僅有的一臺機器上部署多個ZooKeeper實例,以偽集群模式運行。
下面我們來建一個3個實例的zookeeper偽分布式集群。
首先,需要為三個實例創建不同的配置文件:
zk1.cfg的配置項如下: tickTime=2000 initLimit=10 syncLimit=5 dataDir=/zk1/dataDir clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
zk2.cfg的配置項如下: tickTime=2000 initLimit=10 syncLimit=5 dataDir=/zk2/dataDir clientPort=2182 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
zk3.cfg的配置項如下: tickTime=2000 initLimit=10 syncLimit=5 dataDir=/zk3/dataDir clientPort=2183 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
因為部署在同一臺機器上,所以每個實例的dataDir、clientPort要做區分,其余配置保持一致。
需要注意的是,集群中所有的實例作為一個整體對外提供服務,集群中每個實例之間都互相連接,所以,每個配置文件中都要列出所有實例的映射關系。
在每個配置文件的末尾,有幾行“server.A=B:C:D”這樣的配置,其中, A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
除了修改 zoo.cfg 配置文件,集群模式下還要配置一個myid文件,這個文件在 dataDir 目錄下,文件里只有一個數據,就是 A 的值(第幾號服務器),Zookeeper 啟動時會讀取這個文件,拿到里面的數據與配置信息比較從而判斷到底是那個 Server。
上例中,需要在每個實例各自的dataDir目錄下,新建myid文件,分別填寫“1”、“2”、“3”。
依次啟動三個實例:
查看Server狀態:
可見,現在的集群中,zk2充當著Leader角色,而zk1與zk3充當著Follower角色。
使用三個客戶端連接三個Server,在zk1的客戶端下,新增“/newNode”節點,儲存數據“zk1”:
在zk2的客戶端與查看該節點:
在zk3的客戶端與查看該節點:
可見,集群中的Server保持著數據同步。
如果我們把身為Leader的zk2關閉,會發生什么呢?
可見,集群自動完成了切換,zk3變成了Leader。實際應用中,如果集群中的Leader宕機了,或者Leader與超過半數的Follower失去聯系,都會觸發ZooKeeper的選舉流程,選舉出新的Leader之后繼續對外服務。
如果我們再把zk3關閉,會發生什么呢?
可見,關閉zk3以后,由于集群中的可用Server只剩下一臺(達不到集群總數的半數以上),集群將處于不可用的狀態。
感謝各位的閱讀,以上就是“Zookeeper的配置與集群管理方法是什么”的內容了,經過本文的學習后,相信大家對Zookeeper的配置與集群管理方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創新互聯,小編將為大家推送更多相關知識點的文章,歡迎關注!
網站標題:Zookeeper的配置與集群管理方法是什么-創新互聯
URL鏈接:http://newbst.com/article30/dggspo.html
成都網站建設公司_創新互聯,為您提供企業網站制作、搜索引擎優化、微信小程序、網站導航、網站營銷、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯