zookeeper單機和同一臺機器(即僞集羣)上搭建集羣部署 及錯誤Error contacting service. It is probably not running

在同一臺機器(即僞集羣)上,啓動三個zookeeper,三個分別使用不同的配置文件

 

Zookeeper的單機版安裝
從官網上下載zookeeper的安裝包

1 準備:安裝之前請自行安裝jdk(如java8)

2 使用wget 命令或者xshell editplus工具遠程上傳tar包到Linux

(1)使用wget 命令下載zookeeper安裝包到linux環境下

命令: wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz

(2)推薦方法zookeeper-3.4.14.tar.gz(或者zookeeper-3.4.6.tar.gz自己選擇下載):

點擊下載: https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

3 解壓zookeeper到安裝目錄(安裝目錄自己指定如:/usr/local/zk-standalone/)

tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/zk-standalone/

重命名:

mv zookeeper-3.4.14.tar.gz  zookeeper

進入到zookeeper的conf目錄

cd zookeeper/conf/  && cp zoo_sample.cfg   zoo.cfg

有三個文件,zookeeper的配置文件叫做zoo.cfg,這裏邊沒有,我們把 zoo_sample.cfg 拷貝一份出來,

使用vim 編輯器編輯zoo.cfg 這是原本的配置,

我們需要更改的地方有以下幾點

dataDir是zookeeper的數據目錄,可以任意選擇,但是這個目錄必須要提前創建好,zookeeper是不會幫你創建的

dataDir=/usr/local/zk-standalone/zookeeper3/data

dataLogdir是zookeeper的日誌目錄,應該要謹慎的選擇日誌目錄,目錄必須要提前創建好,如果將日誌存放在比較繁忙的設備上,將大大影響系統性能
dataLogDir=/usr/local/zk-standalone/zookeeper3/logData

限制zookeeper的客戶端鏈接數量,設置爲0或者不設置表示取消對併發連接的設置

maxClientCnxns=0

最小會話超時時間和最大會話超時時間
minSessionTimeout=4000
maxSessionTimeout=10000

server.id 其中1表示這是第幾號server,用來做集羣中的區別的192.168.9.103是該server所在的ip地址

2888是該server和集羣中的leader通信端口,3888是選舉leader的端口

server.1=zkcluster:2881:3881

注意:

指定主機名和ip映射關係=>Linux下/etc/hosts文件

寫入如:192.168.9.103  zkcluster 

在之前設置的dataDir中新建myid文件,寫入一個數字,該數字表示這是第幾號server,該數字必須和zoo.cfg文件中的server.X中的X一 一對應

#在dataDir中創建myid文件並寫入 1

echo 1  >myid 
#查看myid
cat myid

更改後的文件如下

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zk-standalone/zookeeper3/data
logDataDir=/usr/local/zk-standalone/zookeeper3/logData
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 


進入到zookeeper的安裝目錄 執行bin/zkServer.sh start

如圖所示,使用jps命令查看進程是否啓動成功

出現 QuorumPeerMain這個進程的時候就說明zookeeper已經安裝成功了

[root@sh_c zk-cluster]# jps
42913 QuorumPeerMain
43081 Jps

接下里進入zookeeper的客戶端查看 

進入zookeeper的安裝目錄執行bin/zkCli.sh

執行ls /   查看當前根目錄下的節點 發現有一個zookeeper的節點

至此zookeeper的單機版安裝成功!

集羣版
 

(1)安裝JDK  【此步驟省略】。

(2)Zookeeper壓縮包上傳到服務器

3)將Zookeeper解壓 ,創建data目錄 ,將 conf下zoo_sample.cfg 文件改名爲 zoo.cfg

4)建立/usr/local/zookeeper-cluster目錄,將解壓後的Zookeeper複製到以下三個目錄

/usr/local/zookeeper-cluster/zookeeper-1

/usr/local/zookeeper-cluster/zookeeper-2

/usr/local/zookeeper-cluster/zookeeper-3


  1. 配置每一個Zookeeper 的dataDir(zoo.cfgclientPort 分別爲2181  2182  2183

修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

clientPort=2181

dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data

dataLogDir=/usr/local/zk-cluster/zookeeper-1/logData

修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg

clientPort=2182

dataDir=/usr/local/zookeeper-cluster/zookeeper-2/data

dataLogDir=/usr/local/zk-cluster/zookeeper-2/logData

修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

clientPort=2183

dataDir=/usr/local/zookeeper-cluster/zookeeper-3/data

dataLogDir=/usr/local/zk-cluster/zookeeper-3/logData

2.2.3配置集羣

  1. 每個zookeeper的 data 目錄下創建一個 myid 文件,內容分別是1、2、3 。這個文件就是記錄每個服務器的ID

-------知識點小貼士------

如果你要創建的文本文件內容比較簡單,我們可以通過echo 命令快速創建文件

格式爲:

echo 內容 >文件名

例如我們爲第一個zookeeper指定ID爲1,則輸入命令

 

(2)在每一個zookeeper 的 zoo.cfg配置客戶端訪問端口(clientPort)和集羣服務器IP列表。

集羣服務器IP列表如下

server.1=192.168.25.140:2881:3881

server.2=192.168.25.140:2882:3882

server.3=192.168.25.140:2883:3883

解釋:server.服務器ID=服務器IP地址:服務器之間通信端口:服務器之間投票選舉端口

2.2.4啓動集羣

啓動集羣就是分別啓動每個實例。

啓動後我們查詢一下每個實例的運行狀態

先查詢第一個服務Mode爲follower表示是跟隨者(從)

再查詢第二個服務Mod 爲leader表示是領導者(主)

查詢第三個爲跟隨者(從)

2.2.5模擬集羣異常

1)首先我們先測試如果是從服務器掛掉,會怎麼樣

把3號服務器停掉,觀察1號和2號,發現狀態並沒有變化

由此得出結論,3個節點的集羣,從服務器掛掉,集羣正常

(2)我們再把1號服務器(從服務器)也停掉,查看2號(主服務器)的狀態,發現已經停止運行了。

由此得出結論,3個節點的集羣,2個從服務器都掛掉,主服務器也無法運行。因爲可運行的機器沒有超過集羣總數量的半數。

  1. (3)我們再次把1號服務器啓動起來,發現2號服務器又開始正常工作了。而且依然是領導者。
  1. (4)我們把3號服務器也啓動起來,把2號服務器停掉(汗~~幹嘛?領導掛了?)停掉後觀察1號和3號的狀態。發現新的leader產生了~
  2.  

由此我們得出結論,當集羣中的主服務器掛了,集羣中的其他服務器會自動進行選舉狀態,然後產生新得leader

(5)我們再次測試,當我們把2號服務器重新啓動起來(汗~~這是詐屍啊!)啓動後,會發生什麼?2號服務器會再次成爲新的領導嗎?我們看結果

我們會發現,2號服務器啓動後依然是跟隨者(從服務器),3號服務器依然是領導者(主服務器),沒有撼動3號服務器的領導地位。哎~退休了就是退休了,說了不算了,哈哈。

由此我們得出結論,當領導者產生後,再次有新服務器加入集羣,不會影響到現任領導者。

error 錯誤

 

安裝zookeeper時候,可以查看進程啓動,但是狀態顯示報錯:Error contacting service. It is probably not running

安裝zookeeper-3.4.6的時候,啓動正常沒報錯,但zkServer.sh status查看狀態的時候卻出現錯誤,如下:

JMX enabled by default
Using config: /hadoop/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

jps查看進程,卻發現進程已啓動

7313  QuorumPeerMain

如:沒有jps命令時

安裝open-jdk後發現jps不能用,此時需要安裝另外一個包才能使用

通過以下命令進行安裝:

sudo yum install java-1.8.0-openjdk-devel.x86_64

在網上查閱資料一共有三種解決方法:

如果配置了日誌(dataLogDir=/usr/local/zk-cluster/zookeeper-1/logData)可以首先查看日誌記錄

1,打開zkServer.sh 找到status)

STAT=`echo stat | nc localhost $(grep clientPort "$ZOOCFG" | sed -e 's/.*=//') 2> /dev/null| grep Mode`
在nc與localhost之間加上 -q 1 (是數字1而不是字母l)
如果已存在則去掉
注:因爲zookeeper是3.4.5版本,所以在我的zkServer.sh腳本文件里根本沒有這一行,所以沒有生效

2,調用sh zkServer.sh status 遇到這個問題。百度,google了後發現有人是修改sh腳本里的一個nc的參數來解決,可在3.4.5的sh文件裏並沒有找到nc的調用。配置文檔裏指定的log目錄沒有創建導致出錯,手動增加目錄後重啓,問題解決。
注:我想不是日誌的問題所以這個方法根本就沒有試

3,創建數據目錄,也就是在你zoo.cfg配置文件裏dataDir指定的那個目錄下創建myid文件,並且指定id,改id爲你zoo.cfg文件中server.1=localhost:2888:3888中的    1.只要在myid頭部寫入1即可.
注:在我第二次安裝的時候,沒有將myid文件創建在dataDir指定的那個目錄下,也報了該錯誤。之後在dataDir指定的那個目錄下創建myid文件就沒有報錯。

4 因爲防火牆沒有關閉。關閉防火牆:

  #查看防火牆狀態

   service iptables status 或者systemctl status iptables

  #關閉防火牆
   service iptables stop 或者 systemctl stop iptables
  #查看防火牆開機啓動狀態
   chkconfig iptables --list 
  #關閉防火牆開機啓動
   chkconfig iptables off

 注意:我的確在開始時候沒有關閉防火牆,但是當我關閉防火牆之後也沒有解決問題。

5 沒有建立主機和ip之間的映射關係。

  建立主機和ip之間映射關係的命令爲 vim /etc/hosts   在文件的末端加入各個主機和ip地址之間的映射關係就可以了。

  注意:只有在建立了映射關係之後,纔可以將在同一個網段下的機器利用主機名進行文件傳遞。問題解決!

Linux的/etc/hosts文件

發佈了29 篇原創文章 · 獲贊 30 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章