1. 程式人生 > >zookeeper叢集配置詳細教程

zookeeper叢集配置詳細教程

  第一步:環境準備
環境 版本 說明
JDK 1.8 zookeeper執行所需
centos
7 作業系統 需要配置好JDK的環境變數
zookeeper-3.4.9.tar.gz 3.4.9 zookeeper部署包
  環境準備完畢之後,安裝三臺centos7的虛擬機器,並分配好靜態IP。 假設三臺虛擬機器分配的IP分別為: 10.0.90.52 10.0.90.53 10.0.90.54   配置Jdk環境變數,確保“java -version”命令能夠執行成功,Jdk的環境變數配置不在贅述。   注意:為了確保zookeeper叢集能夠成功執行,確保萬一,這裡需要關閉一下centos的防火牆,關閉方法如下:   1. 安裝iptables: yum install -y iptables-services
2.關閉防火牆: service iptables stop 3. 檢視防火牆狀態 service iptables status 這個狀態說明已經關閉了,如下圖所示:  

 

  第二步:Zookeeper配置   選取其中一臺伺服器,比如ip為10.0.90.52的伺服器,將 zookeeper-3.4.9.tar.gz 移動到 /usr/local 目錄下。   解壓壓縮包: tar -zxvf zookeeper-3.4.9.tar.gz
解壓成功之後,會有一個zookeeper-3.4.9資料夾,這個是zookeeper的部署包,個人習慣將將資料夾名改成zk(mv zookeeper-3.4.9 zk),下文都以zk表示zookeeper的部署包名   修改配置檔案:   zookeeper的配置檔案都是放在 conf 目錄下的,在這裡,他有一個初始化的配置檔案,zoo_simple.cfg,將其重新命名為zoo.cfg。conf目錄結構圖如下:

 

接下來看看zoo.cfg:

 

  zookeeper的配置檔案註釋還是很全的,這裡重點講一下叢集的配置,上圖紅框部分,dataDir是zookeeper存放資料的目錄,預設情況是指定的/tmp/zookeeper。 根據實際的工程需要指定目錄的地址,這裡我是放在了 /opt/data/zk 目錄下。   注意:在配置zookeeper叢集時,還需要增加一個步驟,在上文指定的dataDir目錄下,新建檔案myid,並在其中寫入與其他不同伺服器不同的並且唯一的 myid 的值。 比如,現在有三臺伺服器,10.0.90.52伺服器myid的值是1,10.0.90.53伺服器myid的值是2,10.0.90.54伺服器myid的值是3。     叢集成員配置:在zoo.cfg最下方,加上叢集的成員,如下圖所示: 到這裡zookeeper部署包的配置基本完成了。   那麼接下來只需要在其他兩臺機器上,進行類似的操作即可。可以方便的操作,直接將10.0.90.52上的zookeeper部署包scp到其他兩臺上,命令如下: scp -r /usr/local/zk 10.0.90.53:/usr/local   切記,其他兩臺伺服器的dataDir目錄下的myid檔案的建立與值的唯一。   第三步:啟動叢集 zookeeper的指令碼和cli工具都是放在 bin 目錄下的,如下圖所示:

 

  依次啟動zookeeper,首先我先啟動 10.0.90.52上的服務,執行命令: sh zkServer.sh start 啟動成功輸出如下:

 

可以使用 “jps“命令檢視正在執行的Java程序,執行 jps

 

如果jps命名輸出中包含上圖紅框中的內容,則說明zookeeper服務啟動成功。   還可以通過檢視埠開啟的方式,執行命令: netstat -nltp | grep 2181 正常的執行結果如下圖所示:

 

  到此叢集中的第一個成員,啟動完畢,接著按照同樣的方式啟動第二個,第三個服務,到此叢集的所有服務啟動完畢。   檢視叢集狀態 還是在bin目錄下,執行命令: sh zkServer.sh status   輸出結果如下:

 

可以看到此服務已經成功叢集,並正扮演者leader的角色,再看看其他兩臺的情況。 如下圖所示,其他兩臺服務正扮演著follwers的角色。 通常來說,叢集中第一個啟動的服務,都會成為leader。   第四步:驗證   zookeeper提供了cli工具,可以完成基本的操作,只需要輸入簡單的命令即可。 工具是:bin目錄下的 zkCli.sh   既然叢集啟動成功了,那麼做一個小實驗,分為兩個步驟: 1. 在其中的一臺服務,建立一個節點:test 2. 然後在其他兩臺服務中檢視是否存在新建立的節點     執行 sh zkCli.sh 如下圖所示,cli工具就是自動連線上本機localhost的zookeeper

 

  檢視節點: 輸入命令 ls /

 

zookeeper節點是zookeeper服務中本身預設存在的節點,這裡我們手動建立一個節點test,並賦值 ‘123’。 執行命令: create /test 123 結果如下圖所示,節點建立成功。

 

轉到叢集中的其他服務,使用zkCli工具檢視該節點是否存在。 結果如下圖所示: test節點存在,說明叢集配置成功,叢集中的各個服務保證了資料一致性。     到此zookeeper的全部叢集配置完畢   常見錯誤解決   注意zookeeper啟動出差 會在bin目錄下生成一個zookeeper.out檔案,裡面記錄了錯誤資訊。 叢集啟動失敗 2018-10-11 11:00:18,461 [myid:] - INFO [main:[email protected]] - Reading configuration from: /usr/local/zk/bin/../conf/zoo.cfg 2018-10-11 11:00:18,484 [myid:] - INFO [main:[email protected]] - Resolved hostname: 10.0.90.52 to address: /10.0.90.52 2018-10-11 11:00:18,484 [myid:] - INFO [main:[email protected]] - Resolved hostname: 10.0.90.54 to address: /10.0.90.54 2018-10-11 11:00:18,485 [myid:] - INFO [main:[email protected]] - Resolved hostname: 10.0.90.53 to address: /10.0.90.53 2018-10-11 11:00:18,485 [myid:] - INFO [main:QuorumPeerC[email protected]] - Defaulting to majority quorums 2018-10-11 11:00:18,486 [myid:] - ERROR [main:[email protected]] - Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/local/zk/bin/../conf/zoo.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:144) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: java.lang.IllegalArgumentException: /tmp/zookeeper/myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:362) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:140) ... 2 more Invalid config, exiting abnormally   dataDir目錄下的myid檔案缺失,需要建立myid檔案,並賦值