版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《大數(shù)據(jù)技術實戰(zhàn)案例教程》實驗指導書實驗4部署ZooKeeper集群和ZooKeeper實戰(zhàn)編寫者:徐魯輝實驗4部署ZooKeeper集群和ZooKeeper實戰(zhàn)4.1實驗目的1.理解ZooKeeper的系統(tǒng)模型,包括數(shù)據(jù)模型、版本機制、Watcher監(jiān)聽機制、ACL權限控制機制。2.理解ZooKeeper的工作原理,包括集群架構、Leader選舉機制。3.熟練掌握ZooKeeper集群的部署和運行。4.掌握ZooKeeper四字命令的使用。5.熟練掌握ZooKeeperShell常用命令的使用。6.了解ZooKeeperJavaAPI,能看懂簡單的ZooKeeper編程。4.2實驗環(huán)境本實驗所需的軟件環(huán)境包括Linux集群(至少3臺機器)、Java環(huán)境、ZooKeeper安裝包、Eclipse。4.3實驗內容1.規(guī)劃ZooKeeper集群。2.部署ZooKeeper集群。3.啟動ZooKeeper集群。4.驗證ZooKeeper集群。5.使用ZooKeeperShell客戶端命令。6.關閉ZooKeeper集群。4.4實驗原理4.4.1初識ZooKeeperApacheZooKeeper是一個分布式的、開放源碼的分布式應用程序協(xié)調框架,是GoogleChubby的開源實現(xiàn),它為大型分布式系統(tǒng)中的各種協(xié)調問題提供了一個解決方案,主要用于解決分布式應用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如配置管理、命名服務、分布式同步及集群管理等。ZooKeeper最早起源于雅虎研究院的一個研究小組。雅虎模仿GoogleChubby開發(fā)出了ZooKeeper,實現(xiàn)了類似的分布式鎖功能,并且將ZooKeeper捐獻給了Apache,ZooKeeper于2010年11月正式成為了Apache的頂級項目。隨著分布式架構的出現(xiàn),越來越多的分布式應用會面臨數(shù)據(jù)一致性問題。在解決分布式數(shù)據(jù)一致性問題上,除了ZooKeeper之外,目前還沒有其它成熟穩(wěn)定且被大規(guī)模應用的解決方案。ZooKeeper無論從性能、易用性還是穩(wěn)定性上來說,都已經(jīng)達到了一個工業(yè)級產品標準,目前已得到廣泛應用,諸如Hadoop、HBase、Storm、Solr、Kafka等越來越多的大型分布式項目都已經(jīng)將ZooKeeper作為其核心組件,用于分布式協(xié)調。4.4.2ZooKeeper工作原理ZooKeeper服務自身組成一個集群(2n+1個服務節(jié)點最多允許n個失效),其集群模式架構如圖4-1所示。ZooKeeper服務主要有兩種角色:一種是Leader,負責投票的發(fā)起和決議,更新系統(tǒng)狀態(tài);另一種是Follower,用于接收客戶端請求并向客戶端返回結果,在選舉Leader過程中參與投票。ZooKeeperZooKeeper集群ClientClientClientClientClientClientClientClientServer(Observer)Server(Follower)Server(Leader)Server(Follower)Server(Observer)數(shù)據(jù)交換選舉圖4-1ZooKeeper集群模式架構ZooKeeper集群模式采用對等結構,無Master、Slave之分,統(tǒng)一都是QuorumPeerMain進程;ZooKeeper集群模式運行時采取選舉方式選擇Leader,通過原子廣播協(xié)議ZAB來保證分布式事務的最終一致性,此協(xié)議是對Paxos算法的修改與實現(xiàn),獲得n/2+1票數(shù)的服務器成為Leader,其余節(jié)點是Follower。當發(fā)生客戶端讀寫操作時,讀操作可在所有節(jié)點上實現(xiàn),但寫操作必須經(jīng)Leader同意后方可執(zhí)行。若有新加入的服務器,則該服務器發(fā)起一次選舉,如果該服務器獲得n/2+1個票數(shù),則此服務器將成為整個ZooKeeper集群的Leader,當Leader發(fā)生故障時,剩下的Follower將重新進行新一輪Leader選舉。Leader選舉時要求“可用節(jié)點數(shù)量>總節(jié)點數(shù)量/2”,即ZooKeeper集群中的存活節(jié)點必須過半。因此,在節(jié)點數(shù)量是奇數(shù)的情況下,ZooKeeper集群總能對外提供服務(即使損失了一部分節(jié)點);如果節(jié)點數(shù)量是偶數(shù),會存在ZooKeeper集群不能用的可能性。在生產環(huán)境中,如果ZooKeeper集群不能提供服務,那將是致命的,所以ZooKeeper集群的節(jié)點數(shù)一般采用奇數(shù)。4.4.3ZooKeeper數(shù)據(jù)模型ZooKeeper采用類似標準文件系統(tǒng)的數(shù)據(jù)模型,其節(jié)點構成了一個具有層次關系的樹狀結構,如圖4-2所示。其中每個節(jié)點被稱為數(shù)據(jù)節(jié)點ZNode,ZNode是ZooKeeper中數(shù)據(jù)的最小單元,每個數(shù)據(jù)節(jié)點上可以存儲數(shù)據(jù),同時也可以掛載子數(shù)據(jù)節(jié)點,因此構成了一個層次化的命名空間。///app1/app2/app1/p_1/app1/p_2/app1/p_3圖4-2ZooKeeper數(shù)據(jù)模型ZNode通過路徑引用,如同UNIX中的文件路徑。路徑必須是絕對的,因此它們必須由斜杠“/”來開頭。在ZooKeeper中,每個ZNode都是有生命周期的,其生命周期的長短取決于數(shù)據(jù)節(jié)點的節(jié)點類型。ZNode類型在創(chuàng)建時即被確定,并且不能改變。節(jié)點可以分為持久數(shù)據(jù)節(jié)點(PERSISTENT)、臨時數(shù)據(jù)節(jié)點(EPHEMERAL)和順序數(shù)據(jù)節(jié)點(SEQUENTIAL)三大類型。在數(shù)據(jù)節(jié)點創(chuàng)建過程中,通過組合使用,可以生成以下四種組合型數(shù)據(jù)節(jié)點類型:(1)持久數(shù)據(jù)節(jié)點PERSISTENT:持久數(shù)據(jù)節(jié)點是ZooKeeper中最常見的一種數(shù)據(jù)節(jié)點類型。所謂持久數(shù)據(jù)節(jié)點,是指此類數(shù)據(jù)節(jié)點的生命周期不依賴于會話,自數(shù)據(jù)節(jié)點被創(chuàng)建就會一直存在于ZooKeeper服務器上,并且只有在客戶端顯式執(zhí)行刪除操作時,它們才能被刪除。(2)持久順序數(shù)據(jù)節(jié)點PERSISTENT_SEQUENTIAL:持久順序數(shù)據(jù)節(jié)點的基本特性與持久數(shù)據(jù)節(jié)點相同,額外特性表現(xiàn)在順序性上。在ZooKeeper中,每個父數(shù)據(jù)節(jié)點都會為它的第一級子數(shù)據(jù)節(jié)點建立一個文件,用于記錄每個子數(shù)據(jù)節(jié)點創(chuàng)建的先后順序?;谶@個順序特性,在創(chuàng)建子數(shù)據(jù)節(jié)點的時候,可以設置這個標記,那么在創(chuàng)建數(shù)據(jù)節(jié)點過程中,ZooKeeper會自動為給定數(shù)據(jù)節(jié)點名加上一個數(shù)字后綴,作為一個新的、完整的數(shù)據(jù)節(jié)點名。不過ZooKeeper會給此類數(shù)據(jù)節(jié)點名稱進行順序編號,自動在給定數(shù)據(jù)節(jié)點名后加上一個數(shù)字后綴。這個數(shù)字后綴的上限是整型的最大值,其格式為“%10d”(10位數(shù)字,沒有數(shù)值的數(shù)位用0補充,例如“0000000001”),當計數(shù)值大于232-1時,計數(shù)器將溢出。(3)臨時數(shù)據(jù)節(jié)點EPHEMERAL:與持久數(shù)據(jù)節(jié)點不同的是,臨時數(shù)據(jù)節(jié)點的生命周期依賴于創(chuàng)建它的會話,也就是說,如果客戶端會話失效,臨時數(shù)據(jù)節(jié)點將被自動刪除,當然也可以手動刪除。注意,這里提到的是客戶端會話失效,而非TCP連接斷開。另外,ZooKeeper規(guī)定臨時數(shù)據(jù)節(jié)點不允許擁有子數(shù)據(jù)節(jié)點。(4)臨時順序數(shù)據(jù)節(jié)點EPHEMERAL_SEQUENTIAL:臨時順序數(shù)據(jù)節(jié)點的基本特性和臨時數(shù)據(jù)節(jié)點也是一致的,同樣是在臨時數(shù)據(jù)節(jié)點的基礎上,添加了順序的特性。這里,需要簡要介紹一下ZooKeeper中的三種機制:(1)版本機制。ZooKeeper中為ZNode引入了版本機制,以保證分布式數(shù)據(jù)原子性操作。每個ZNode都具有version、cversion、aversion三種類型的版本信息,對ZNode的任何更新操作都會引起版本號的編號。(2)Watcher機制。ZNode以某種方式發(fā)生變化時,Watcher機制可以讓客戶端得到通知,以實現(xiàn)分布式通知功能。ZooKeeper允許客戶端向服務端注冊一個Watcher監(jiān)聽,當服務端的一些指定事件觸發(fā)了這個Watcher,那么就會向指定客戶端發(fā)送一個事件通知來實現(xiàn)分布式的通知功能。(3)ACL機制。ZooKeeper作為一個分布式協(xié)調框架,其內部存儲的都是一些關乎分布式系統(tǒng)運行時狀態(tài)的元數(shù)據(jù),尤其是一些涉及到分布式鎖、Master選舉和分布式協(xié)調等應用場景的數(shù)據(jù),會直接影響基于ZooKeeper進行構建的分布式系統(tǒng)的運行狀態(tài)。因此,保障ZooKeeper中數(shù)據(jù)的安全,從而避免因誤操作而帶來的數(shù)據(jù)隨意變更導致的分布式系統(tǒng)異常就格外重要,ZooKeeper提供了一套完善ACL(AccessControlList)權限控制機制來保障數(shù)據(jù)的安全。4.4.4ZooKeeper部署要點1.ZooKeeper運行環(huán)境對于大部分Java開源產品而言,在部署與運行之前,總是需要搭建一個合適的環(huán)境,通常包括操作系統(tǒng)和Java環(huán)境兩方面。同樣,ZooKeeper部署與運行所需要的系統(tǒng)環(huán)境,同樣包括操作系統(tǒng)和Java環(huán)境兩部分。1)操作系統(tǒng)ZooKeeper支持不同平臺,在當前絕大多數(shù)主流的操作系統(tǒng)上都能夠運行,例如GNU/Linux、SunSolaris、FreeBSD、Windows、MacOSX等。需要注意的是,ZooKeeper官方文檔中特別強調,不建議在MacOSX系統(tǒng)上部署ZooKeeper服務器。本書采用的操作系統(tǒng)為Linux發(fā)行版CentOS7。2)Java環(huán)境ZooKeeper使用Java語言編寫,因此它的運行環(huán)境需要Java環(huán)境的支持,對于ZooKeeper3.4.13,需要Java1.6及以上版本的支持。2.ZooKeeper運行模式ZooKeeper有兩種運行模式:單機模式和集群模式。單機模式是只在一臺機器上安裝ZooKeeper,主要用于開發(fā)測試,而集群模式則是在多臺機器上安裝ZooKeeper,實際的生產環(huán)境中均采用集群模式。無論哪種部署方式,創(chuàng)建ZooKeeper的配置文件zoo.cfg都是至關重要的。單機模式和集群模式部署的步驟基本一致,只是在zoo.cfg文件的配置上有些差異。讀者需要注意的是,假設你擁有一臺比較好的機器(CPU核數(shù)大于10,內存大于等于8GB),如果作為單機模式進行部署,資源明顯有點浪費,如果按照集群模式進行部署,需要借助硬件上的虛擬化技術,把一臺物理機器轉換成幾臺虛擬機,這樣操作成本太高。幸運的是,和其他分布式系統(tǒng)如Hadoop一樣,ZooKeeper也允許在一臺機器上完成一個偽集群的搭建。所謂偽集群,是指集群所有的機器都在一臺機器上,但是還是以集群的特性來對外提供服務。這種模式和集群模式非常類似,只是把zoo.cfg文件中配置項“server.id=host:port:port”略做修改。3.ZooKeeper配置文件ZooKeeper啟動時,默認讀取$ZOOKEEPER_HOME/conf/zoo.cfg文件,zoo.cfg文件需要配置ZooKeeper的運行參數(shù)。ZooKeeper部分配置參數(shù)及其含義如表4-1所示,注意,這里僅列舉了部分參數(shù),關于完整的配置參數(shù)介紹請參見官方文檔/doc/r3.4.13/zookeeperAdmin.html#sc_configuration。表4-1zoo.cfg部分配置參數(shù)參數(shù)名說明基本配置clientPort用于配置當前服務器對外的服務端口,客戶端會通過該端口和ZooKeeper服務器創(chuàng)建連接,一般設置為2181dataDir用于配置ZooKeeper服務器存儲ZooKeeper數(shù)據(jù)快照文件的目錄,同時用于存放集群的myid文件tickTime用于配置ZooKeeper中最小時間單元(單位:毫秒)。ZooKeeper所有時間均以這個時間單元的整數(shù)倍配置,例如,Session的最小超時時間是2*tickTime高級配置dataLogDir用于配置ZooKeeper服務器存儲ZooKeeper事務日志文件的目錄。默認情況下,ZooKeeper會將事務日志文件和數(shù)據(jù)快照文件存儲在同一個目錄即dataDir中。應盡量給事務日志的輸出配置一個單獨的磁盤或者掛載點,這將允許使用一個專用日志設備,幫助避免事務日志和數(shù)據(jù)快照之間的競爭maxClientCnxns用于配置單個客戶端與單臺服務器之間的最大并發(fā)連接數(shù),根據(jù)IP來區(qū)分。默認值為60,如果設置為0,表示沒有任何限制minSessionTimeout用于配置服務端對客戶端會話超時時間的最小值,默認值為2*tickTimemaxSessionTimeout用于配置服務端對客戶端會話超時時間的最大值,默認值為20*tickTime集群選項initLimit用于配置Leader服務器等待Follower啟動,并完成數(shù)據(jù)同步的時間,以tickTime的倍數(shù)來表示,當超過設置倍數(shù)的tickTime時間,則連接失敗syncLimit用于配置Leader服務器和Follower之間進行心跳檢測的最大延遲時間,如果超過此時間Leader還沒有收到響應,那么Leader就會認為該Follower已經(jīng)脫離了和自己的同步server.id=host:port:port用于配置組成ZooKeeper集群的機器列表。集群中每臺機器都需要感知到整個集群是由哪幾臺機器組成的,表示不同ZooKeeper服務器的自身標識?!癷d”被稱為ServerID,用來標識該機器在集群中的機器序號,與每臺服務器myid文件中的數(shù)字相對應;“host”代表服務器的IP地址;第一個端口“host”用于指定Follower服務器與Leader進行運行時通信和數(shù)據(jù)同步時所使用的端口;第二個端口“port”代表進行Leader選舉時服務器相互通信的端口。myid文件應創(chuàng)建于服務器的dataDir目錄下,這個文件的內容只有一行且是一個數(shù)字,對應于每臺機器的ServerID數(shù)字,比如,服務器“1”應該在myid文件中寫入“1”,該id必須在集群環(huán)境下服務器標識中是唯一的,且大小在1~255之間4.4.5ZooKeeper接口1.ZooKeeper四字命令ZooKeeper中有一系列的命令可以查看服務器的運行狀態(tài),它們的長度通常都是4個英文字母,因此又被稱之為“四字命令”。ZooKeeper四字命令及功能如表4-2所示。表4-2ZooKeeper四字命令命令功能描述conf用于輸出ZooKeeper服務器運行時使用的基本配置信息,包括clientPort、dataDir和tickTime等cons用于輸出當前這臺服務器上所有客戶端連接的詳細信息,包括每個客戶端的客戶端IP、會話ID和最后一次與服務器交互的操作類型等crst功能性命令,用于重置所有的客戶端連接統(tǒng)計信息dump用于輸出當前集群的所有會話信息,包括這些會話的會話ID,以及每個會話創(chuàng)建的臨時節(jié)點等信息envi用于輸出ZooKeeper所在服務器運行時的環(huán)境信息,包括os.version、java.version和user.home等mntr用于輸出比stat命令更為詳盡的服務器統(tǒng)計信息,包括請求處理的延遲情況、服務器內存數(shù)據(jù)庫大小和集群的數(shù)據(jù)同步情況ruok用于輸出當前ZooKeeper服務器是否正在運行。該命令的名字非常有趣,其諧音正好是“Areyouok”。執(zhí)行該命令后,如果當前ZooKeeper服務器正在運行,那么返“imok”,否則沒有任何響應輸出stat用于獲取ZooKeeper服務器的運行時狀態(tài)信息,包括基本的ZooKeeper版本、打包信息、運行時角色、集群數(shù)據(jù)節(jié)點個數(shù)等信息srvr和stat命令的功能一致,唯一的區(qū)別是srvr不會將客戶端的連接情況輸出,僅僅輸出服務器的自身信息srst功能性命令,用于重置所有服務器的統(tǒng)計信息wchc用于輸出當前服務器上管理的Watcher的詳細信息,以會話為單位進行歸組,同時列出被該會話注冊了Watcher的節(jié)點路徑wchp和wchc命令非常類似,也是用于輸出當前服務器上管理的Watcher的詳細信息,不同點在于wchp命令的輸出信息以節(jié)點路徑為單位進行歸組wchs用于輸出當前服務器上管理的Watcher的概要信息ZooKeeper四字命令的使用很簡單,通常有兩種方式。第一種是通過Telnet方式,使用Telnet客戶端登錄ZooKeeper對外服務端口,然后直接輸入四字命令即可,此方式需要在機器上安裝Telnet。例如,Telnet方式使用ZooKeeper四字命令“conf”命令效果如圖4-3所示。圖4-3Telnet方式使用ZooKeeper四字命令第二種則是使用NC方式,命令語法如下所示:echo{command}|nc{host}2181NC方式使用ZooKeeper四字命令“conf”命令效果如圖4-4所示。圖4-4NC方式使用ZooKeeper四字命令“conf”效果圖2.ZooKeeperShell1)服務器命令行工具zkServer.shzkServer.sh用于啟動、查看、關閉ZooKeeper集群等,可以使用“zkServer.sh-help”查看其幫助,其具體用法如圖4-5所示。圖4-5ZooKeeperShell服務器命令用法命令zkServer.sh的常用選項功能如下:(1)start:啟動ZooKeeper服務。(2)stop:停止ZooKeeper服務。(3)restart:重啟ZooKeeper服務。(4)status:查看ZooKeeper狀態(tài)。2)客戶端命令行工具zkCli.shzkCli.sh用于對ZooKeeper文件系統(tǒng)中數(shù)據(jù)節(jié)點進行新建、查看或刪除等操作,進入客戶端命令行的方法有如下幾種:(1)連接本地ZooKeeper服務器使用命令“zkCli.sh”即可連接到本地ZooKeeper服務器,命令中沒有顯式指定ZooKeeper服務器地址,那么默認是本地ZooKeeper服務器。使用效果如下所示。[xuluhui@master~]$zkCli.sh[zk:localhost:2181(CONNECTED)0](2)連接指定ZooKeeper服務器若希望連接到指定的ZooKeeper服務器,可以通過如下命令實現(xiàn):zkCli.sh-serverhost:port其中參數(shù)“host”表示提供ZooKeeper服務的節(jié)點IP或主機名,參數(shù)“port”是上文介紹的客戶端連接當前ZooKeeper服務器的端口號,一般設置為2181。例如,連接到slave1節(jié)點的ZooKeeper服務器通過如下命令實現(xiàn):[xuluhui@master~]$zkCli.sh-serverslave1:2181[zk:slave1:2181(CONNECTED)0]再如,如下命令并不是連接了兩個節(jié)點,而是按照順序連接一個,當?shù)谝粋€連接無法獲取時,就連接第二個。[xuluhui@master~]$zkCli.sh-serverslave1:2181,slave2:2181[zk:slave1:2181,slave2:2181(CONNECTED)0]讀者可以通過客戶端命令行工具zkCli.sh命令“help”來查看可以進行的所有操作,如圖4-6所示。圖4-6ZooKeeperShell客戶端命令用法圖4-6所展示的客戶端命令中,“create”用于新建節(jié)點,“set”用于設置節(jié)點數(shù)據(jù),“get”用于獲取節(jié)點數(shù)據(jù),“delete”只能刪除一個節(jié)點,“rmr”可以級聯(lián)刪除,“close”用于關閉當前session,“quit”用于退出客戶端命令行。關于幾個常用命令的使用方法如表4-3所示,由于命令眾多,此處不再一一講解,讀者可以自行查閱資料并進行實踐。表4-3ZooKeeperShell客戶端部分命令使用說明命令語法功能lslspath[watch]列出ZooKeeper指定數(shù)據(jù)節(jié)點下的所有子節(jié)點。這個命令僅能看到指定數(shù)據(jù)節(jié)點下第一級的所有子節(jié)點,其中,參數(shù)path用于指定數(shù)據(jù)節(jié)點的節(jié)點路徑createcreate[-s][-e]pathdataacl創(chuàng)建ZooKeeper數(shù)據(jù)節(jié)點。其中,參數(shù)-s和-e用于指定數(shù)據(jù)節(jié)點特性,-s為順序節(jié)點,-e為臨時節(jié)點。默認情況下,即不添加-s或-e參數(shù)的,創(chuàng)建的是持久節(jié)點;參數(shù)path指定節(jié)點路徑;參數(shù)data指定數(shù)據(jù)節(jié)點數(shù)據(jù)內容;參數(shù)acl用來進行權限控制,默認情況下,不做任何權限控制getgetpath[watch]獲取ZooKeeper指定數(shù)據(jù)節(jié)點的數(shù)據(jù)內容和屬性信息setsetpathdata[version]更新ZooKeeper指定數(shù)據(jù)節(jié)點的數(shù)據(jù)內容。其中,參數(shù)data就是要更新的新內容;參數(shù)version用于指定本次更新操作是基于數(shù)據(jù)節(jié)點的哪個版本進行的deletedeletepath[version]刪除ZooKeeper上指定數(shù)據(jù)節(jié)點。其中,參數(shù)version的作用與set命令中version參數(shù)一致3.ZooKeeperJavaAPIZooKeeper作為一個分布式服務框架,主要用來解決分布式數(shù)據(jù)一致性問題,提供了簡單的分布式原語,并且對多種編程語言提供了API。下面我們重點介紹ZooKeeper的Java客戶端API使用方式。ZooKeeperJavaAPI面向開發(fā)工程師,包含org.apache.zookeeper、org.apache.zookeeper.data、org.apache.zookeeper.server、org.apache.zookeeper.server.quorum及org.apache.zookeeper.server.upgrade等包,其中org.apache.zookeeper包含ZooKeeper類,它是編程時最常用的類文件。本小節(jié)僅講述幾個常用的ZooKeeperJavaAPI,完整的ZooKeeperJavaAPI請參考官方參考指南/doc/r3.4.13/api/index.html。4.5實驗步驟4.5.1規(guī)劃ZooKeeper集群1.ZooKeeper集群部署規(guī)劃本節(jié)擬將ZooKeeper集群運行在Linux上,將使用三臺安裝有Linux操作系統(tǒng)的機器,主機名分別為master、slave1、slave2。具體ZooKeeper集群規(guī)劃表如表4-4所示。表4-4ZooKeeper集群部署規(guī)劃表主機名IP地址運行服務軟硬件配置master30QuorumPeerMain內存:4GCPU:1個2核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191ZooKeeper:ZooKeeper3.4.13Eclipse:EclipseIDE2018-09forJavaDevelopersslave131QuorumPeerMain內存:1GCPU:1個1核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191ZooKeeper:ZooKeeper3.4.13slave232QuorumPeerMain內存:1GCPU:1個1核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191ZooKeeper:ZooKeeper3.4.132.軟件選擇本實驗部署ZooKeeper所使用的各種軟件的名稱、版本、發(fā)布日期及下載地址如表4-5所示。表4-5本實驗部署ZooKeeper使用的軟件名稱、版本、發(fā)布日期及下載地址軟件名稱軟件版本發(fā)布日期下載地址VMwareWorkstationProVMwareWorkstation14.5.7ProforWindows2017年6月22日/products/workstation-pro.htmlCentOSCentOS7.6.18102018年11月26日/download/JavaOracleJDK8u1912018年10月16日/technetwork/java/javase/downloads/index.htmlZooKeeperZooKeeper3.4.132018年7月15日/releases.html注意,本實驗采用的是ZooKeeper版本是3.4.13,3個節(jié)點的機器名分別為master、slave1、slave2,IP地址依次為30、31、32,后續(xù)內容均在表4-4規(guī)劃基礎上完成,讀者務必與之對照確認自己的ZooKeeper版本、機器名等信息。4.5.2部署ZooKeeper集群本實驗采用的ZooKeeper版本是3.4.13,因此本實驗的講解都是針對這個版本進行的。盡管如此,由于ZooKeeper各個版本在部署和運行方式上的變化不大,因此本實驗的大部分內容都適用于ZooKeeper其它版本。1.初始軟硬件環(huán)境準備(1)準備三臺機器,安裝操作系統(tǒng),編者使用CentOSLinux7。(2)對集群內每一臺機器,配置靜態(tài)IP、修改機器名、添加集群級別域名映射、關閉防火墻。(3)對集群內每一臺機器,安裝和配置Java,要求Java1.6或更高版本,編者使用OracleJDK8u191。(4)可以選擇性地安裝和配置Linux集群中各節(jié)點間的SSH免密登錄。關于安裝和配置SSH免密登錄并不是部署ZooKeeper集群必須的,這樣做僅是為了操作方便。以上步驟已在實驗1中詳細介紹,此處不再贅述。2.獲取ZooKeeperZooKeeper官方下載地址為/releases.html,建議讀者下載stable目錄下的當前穩(wěn)定版本,本書選用的ZooKeeper版本是2018年7月15日發(fā)布的穩(wěn)定版ZooKeeper3.4.13,其安裝包文件zookeeper-3.4.13.tar.gz例如存放在master機器的/home/xuluhui/Downloads中。3.安裝ZooKeeper切換到root,在master機器上解壓zookeeper-3.4.13.tar.gz到安裝目錄如/usr/local下,依次使用的命令如下所示。[xuluhui@master~]$suroot[root@masterxuluhui]#cd/usr/local[root@masterlocal]#tar-zxvf/home/xuluhui/Downloads/zookeeper-3.4.13.tar.gz4.配置ZooKeeper1)復制模板配置文件zoo_sample.cfg為zoo.cfg在master機器上使用命令“cp”將ZooKeeper示例配置文件zoo_sample.cfg復制并重命名為zoo.cfg,依次使用的命令如下所示。[root@masterlocal]#cdzookeeper-3.4.13[root@masterzookeeper-3.4.13]#cpconf/zoo_sample.cfgconf/zoo.cfg2)修改配置文件zoo.cfg讀者可以發(fā)現(xiàn),模板中已配置好tickTime、initLimit、syncLimit、dataDir及clientPort等配置項,此處,編者僅在master機器上修改配置參數(shù)dataDir和添加配置參數(shù)dataLogDir。首先,由于機器重啟后,系統(tǒng)會自動清空/tmp目錄下文件,所以將存放數(shù)據(jù)快照的目錄更改為某固定目錄,將原始的“dataDir=/tmp/zookeeper”修改為“/usr/local/zookeeper-3.4.13/data”;另外,添加事務日志存放路徑dataLogDir,設置為“/usr/local/zookeeper-3.4.13/datalog”。修改后的配置文件zoo.cfg內容如圖4-7所示。圖4-7修改配置文件zoo.cfg其次,在master機器上配置ZooKeeper集群地址,在配置文件zoo.cfg最后補充幾行內容,如下所示。server.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:38885.創(chuàng)建所需目錄和新建myid文件在上步修改配置文件zoo.cfg中,將存放數(shù)據(jù)快照和事務日志的目錄設置為目錄data和datalog,因此,首先需要在master機器上創(chuàng)建這兩個目錄,使用如下命令實現(xiàn),假設當前目錄為以上步驟操作后的所在目錄“/usr/local/zookeeper-3.4.13”。[root@masterzookeeper-3.4.13]#mkdirdata[root@masterzookeeper-3.4.13]#mkdirdatalog然后,在數(shù)據(jù)快照目錄下新建文件myid并填寫ID。在master機器配置項dataDir指定目錄下創(chuàng)建文件“myid”,例如在dataDir目錄“/usr/local/zookeeper3.4.13/data”下使用命令“vim”新建文件myid,并將其內容設置為“1”。之所以為“1”,是由于配置文件zoo.cfg中“server.id=host:port:port”配置項master機器對應的“id”為“1”。6.同步ZooKeeper文件至slave1、slave2使用scp命令將master機器中目錄“zookeeper-3.4.13”及下屬子目錄和文件統(tǒng)一拷貝至slave1和slave2上,依次使用的命令如下所示。[root@masterzookeeper-3.4.13]#scp-r/usr/local/zookeeper-3.4.13root@slave1:/usr/local/zookeeper-3.4.13[root@masterzookeeper-3.4.13]#scp-r/usr/local/zookeeper-3.4.13root@slave2:/usr/local/zookeeper-3.4.137.設置$ZOOKEEPER_HOME目錄屬主為了在普通用戶下使用ZooKeeper集群,依次將三臺機器master、slave1、slave2上的$ZOOKEEPER_HOME目錄屬主設置為Linux普通用戶例如xuluhui,使用以下命令完成。[root@masterzookeeper-3.4.13]#chown-Rxuluhui/usr/local/zookeeper-3.4.138.修改slave1、slave2文件myid內容配置文件conf/zoo.cfg中配置項“server.id=host:port:port”中的“id”表示與哪臺主機對應,該機器上的文件myid內容必須與“id”數(shù)字一致。本例中,三臺機器按master、slave1、slave2對應的“id”依次為“1、2、3”,因此將slave1機器上文件myid的內容修改為“2”,將slave2機器上文件myid的內容修改為“3”。至此,Linux集群中三臺機器的ZooKeeper均已安裝和配置完畢。9.在系統(tǒng)配置文件目錄/etc/profile.d下新建zookeeper.sh在ZooKeeper集群的所有機器上執(zhí)行以下操作。首先,切換到root用戶,使用“vim/etc/profile.d/zookeeper.sh”命令在/etc/profile.d文件夾下新建文件zookeeper.sh,添加如下內容。exportZOOKEEPER_HOME=/usr/local/zookeeper-3.4.13exportPATH=$ZOOKEEPER_HOME/bin:$PATH其次,重啟機器,使之生效。此步驟可省略,之所以將$ZOOKEEPER_HOME/bin目錄加入到系統(tǒng)環(huán)境變量PATH中,是因為當輸入啟動和管理ZooKeeper集群命令時,無需再切換到$ZOOKEEPER_HOME/bin目錄,否則會出現(xiàn)錯誤信息“bash:****:commandnotfound...”。4.5.3啟動ZooKeeper集群在ZooKeeper集群的每個節(jié)點上,在普通用戶xuluhui下使用命令“zkServer.shstart”來啟動ZooKeeper,使用的命令及運行效果如圖4-8所示,從圖中可以看出,3個節(jié)點均顯示“Startingzookeeper…STARTED”信息。圖4-8啟動ZooKeeper集群4.5.4驗證ZooKeeper集群ZooKeeper集群被啟動后,可查看其日志文件zookeeper.out。由于ZooKeeper集群啟動的時候,每個節(jié)點都試圖去連接集群中的其它節(jié)點,故存在啟動時后邊的節(jié)點還沒啟動,所以會出現(xiàn)異常的日志,這是正常的。啟動選出一個Leader后就穩(wěn)定了。查看ZooKeeper是否部署成功的第1種方法是:在各個節(jié)點上通過“zkServer.shstatus”命令查看狀態(tài),包括集群中各個節(jié)點的角色,使用命令及運行效果如圖4-9所示,從圖4-9中可以看出,slave1是Leader。圖4-9通過zkServer.shstatus查看ZooKeeper集群啟動狀態(tài)查看ZooKeeper是否部署成功的第2種方法是:在各個節(jié)點上通過“jps”命令查看進程服務,若部署成功的話,可在各個節(jié)點上看到QuorumPeerMain進程,運行效果如圖4-10所示。圖4-10通過jps查看進程服務4.5.5使用ZooKeeperShell客戶端命令【案例4-1】使用zkCli.sh實現(xiàn)對ZooKeeper文件系統(tǒng)中數(shù)據(jù)節(jié)點進行新建、查看或刪除等操作。(1)連接slave1節(jié)點ZooKeeper服務器,進入ZooKeeper客戶端命令行,使用的命令及運行效果如圖4-11所示。圖4-11進入ZooKeeper客戶端命令行連接成功之后,系統(tǒng)會輸出該ZooKeeper服務器的相關環(huán)境及配置信息,并在屏幕輸出“WelcometoZooKeeper!”等信息。(2)使用ZooKeeperShell命令進行下列一系列簡單操作。①查看ZooKeeper根目錄結構使用命令“l(fā)s”查看根數(shù)據(jù)節(jié)點下的所有子數(shù)據(jù)節(jié)點,使用命令及運行效果如下所示。[zk:slave1:2181(CONNECTED)1]ls/[zookeeper]②創(chuàng)建ZNode使用命令“create”在根目錄“/”下創(chuàng)建ZNode“xijing”及相關數(shù)據(jù)內容,默認創(chuàng)建持久數(shù)據(jù)節(jié)點,使用命令及運行效果如下所示。[zk:slave1:2181(CONNECTED)2]create/xijing"it'sapersistentnode"Created/xijing ③查看ZNode使用命令“get”查看ZNode“/xijing”數(shù)據(jù)內容及節(jié)點信息,使用命令及運行效果如下所示,這里,各個屬性信息后均人工添加了注釋。[zk:slave1:2181(CONNECTED)3]get/xijingit'sapersistentnode #數(shù)據(jù)節(jié)點的數(shù)據(jù)內容cZxid=0x100000002 #數(shù)據(jù)節(jié)點創(chuàng)建時的事務IDctime=ThuJul1404:32:51EDT2022 #數(shù)據(jù)節(jié)點創(chuàng)建時的時間mZxid=0x100000002 #數(shù)據(jù)節(jié)點最后一次更新時的事務IDmtime=ThuJul1404:32:51EDT2022 #數(shù)據(jù)節(jié)點最后一次更新時的時間pZxid=0x100000002 #數(shù)據(jù)節(jié)點的子數(shù)據(jù)節(jié)點列表最后一次被修改(子數(shù)據(jù)節(jié)點列表的變更而非子數(shù)據(jù)節(jié)點內容的變更)時的事務IDcversion=0 #子數(shù)據(jù)節(jié)點的版本號dataVersion=0 #數(shù)據(jù)節(jié)點的版本號aclVe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學奧數(shù)四套題目及答案
- 車間定法制度
- 誠信、廉潔的相關制度
- 2026年及未來5年市場數(shù)據(jù)中國城市綠化管理行業(yè)市場發(fā)展現(xiàn)狀及投資戰(zhàn)略咨詢報告
- 醫(yī)學導論:膽囊癌診療課件
- 行業(yè)協(xié)會監(jiān)督檢查制度
- 2025年技術能力評估筆試及答案
- 2025年色達人事考試及答案
- 2025年天津華電集團筆試及答案
- 2025年班主任技能比賽筆試題及答案
- 廣西南寧市2025-2026學年高一上學期期末物理試題(原卷版+解析版)
- 2026屆湖北省襄陽第四中學數(shù)學高一上期末考試模擬試題含解析
- 吉林省長春市2026屆高三年級質量檢測政治(一)(長春一模)(含答案)
- 2026年度駕駛員工作計劃
- 2026年常州工業(yè)職業(yè)技術學院單招職業(yè)技能測試題庫含答案詳解
- OEE的課件教學課件
- 混凝土施工作業(yè)環(huán)境管理方案
- 2025年初會職稱《經(jīng)濟法基礎》真題匯編及答案
- 2025年四川省成都市武侯區(qū)中考物理二診試卷
- 光纖線路架設施工方案
- 2025年監(jiān)理工程師市政公用工程繼續(xù)教育考試題及答案
評論
0/150
提交評論