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