Zookeeper3.5.5 安裝部署(轉載)

       ZooKeeper是一個爲分佈式應用所設計的分佈的、開源的協調服務,它主要是用來解決分佈式應用中經常遇到的一些數據管理問題,簡化分佈式應用協調及其管理的難度,提供高性能的分佈式服務。ZooKeeper本身可以以Standalone模式安裝運行,不過它的長處在於通過分佈式ZooKeeper集羣(一個Leader,多個Follower),基於一定的策略來保證ZooKeeper集羣的穩定性和可用性,從而實現分佈式應用的可靠性。ZooKeeper是作爲分佈式協調服務,是不需要依賴於Hadoop的環境,也可以爲其他的分佈式環境提供服務。

      zookeeper有單機、僞集羣、集羣三種部署方式,可根據自己對可靠性的需求選擇合適的部署方式。下邊對這三種部署方式逐一進行講解。

一、單機安裝

準備:

關閉防火牆:systemctl stop firewalld.service
禁止防火牆自動啓動:systemctl disable firewalld.service

關閉selinux : setenforce 0
禁止selinux啓動:vim /etc/selinux/config

SELINUX=disabled

各節點的host解析:

10.0.0.11 node01
10.0.0.12 node02
10.0.0.13 node03

1.1 下載
進入要下載的版本的目錄,選擇.tar.gz文件下載,這裏我們選擇最新版
下載鏈接:http://archive.apache.org/dist/zookeeper/

wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.5/apache-zookeeper-3.5.5-bin.tar.gz

1.2 安裝
使用tar解壓要安裝的目錄即可
這裏以解壓到/usr/local,實際安裝根據自己的想安裝的目錄修改(注意如果修改,那後邊的命令和配置文件中的路徑都要相應修改)

tar xf apache-zookeeper-3.5.5-bin.tar.gz
-C /usr/local/src/ ln -s /usr/local/src/apache-zookeeper-3.5.5-bin /usr/local/zookeeper

1.3 配置
在主目錄下創建data和logs兩個目錄用於存儲數據和日誌:

mkdir  -p /data/zookeeper/{data,logs}

在conf目錄下新建zoo.cfg文件,寫入以下內容保存:

vim /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181

添加環境變量:

echo -e 'export ZOOKEEPER_HOME=/usr/local/zookeeper\nexport PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

1.4 啓動和停止
進入bin目錄,啓動、停止、重啓(start、stop、restart和status)分和查看當前節點狀態(包括集羣中是何角色)別執行:

zkServer.sh start

二、僞集羣模式
僞集羣模式就是在同一主機啓動多個zookeeper並組成集羣,下邊以在node01主機上創3個zookeeper組集羣爲例。將單節點的zookeeper,複製成zookeeper1/zookeeper2/zookeeper3三份。

2.1 zookeeper1配置
zookeeper1配置文件修改如下:

vim /usr/local/zookeeper1/conf/zoo.cfg

tickTime=2000
dataDir=/usr/local/zookeeper1/data
dataLogDir=/usr/local/zookeeper1/logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=node01:2888:3888
server.2=node01:4888:5888
server.3=node01:6888:7888

zookeeper1的/data/zookeeper/data/myid配置如下:

echo '1' > /data/zookeeper/data/myid

2.2 zookeeper2配置
zookeeper2配置文件conf/zoo.cfg修改如下:

vim /usr/local/zookeeper2/conf/zoo.cfg

tickTime=2000
dataDir=/usr/local/zookeeper2/data
dataLogDir=/usr/local/zookeeper2/logs
clientPort=3181
initLimit=5
syncLimit=2
server.1=node01:2888:3888
server.2=node01:4888:5888
server.3=node01:6888:7888

zookeeper2的/data/zookeeper/data/myid配置如下:

echo '2' > /data/zookeeper/data/myid

2.3 zookeeper3配置
zookeeper3配置文件conf/zoo.cfg修改如下:

vim /usr/local/zookeeper3/conf/zoo.cfg

tickTime=2000
dataDir=/usr/local/zookeeper3/data
dataLogDir=/usr/local/zookeeper3/logs
clientPort=4181
initLimit=5
syncLimit=2
server.1=node01:2888:3888
server.2=node01:4888:5888
server.3=node01:6888:7888

zookeeper3的/data/zookeeper/data/myid配置如下:

echo '3' > /data/zookeeper/data/myid

啓動zookeeper,啓動順序隨意沒要求。

zkServer.sh start

三、集羣模式
集羣模式就是在不同主機上安裝zookeeper然後組成集羣的模式;下邊以在node01、node02和node03三臺主機爲例。將第1.1到1.3步中安裝好的zookeeper打包複製到node02和node03上,並都解壓到同樣的目錄下。

3.1 conf/zoo.cfg文件修改
三個zookeeper的conf/zoo.cfg修改如下:

vim /usr/local/zookeeper/conf/zoo.cfg

tickTime=2000
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
initLimit=5
syncLimit=2
server.1=node01:2888:3888
server.2=node02:2888:3888
server.3=node03:2888:3888

#2888端口號是zookeeper服務之間通信的端口,而3888是zookeeper與其他應用程序通信的端口,對於137和138,由於安裝目錄都是zookeeper所以dataDir和dataLogDir不需要改變,又由於在不同機器上所以clientPort也不需要改變
所以此時137和138的conf/zoo.cfg的內容與136一樣即可。

3.2 /data/zookeeper/data/myid文件修改
136 /data/zookeeper/data/myid修改如下:

echo '1' > /data/zookeeper/data/myid

137 /data/zookeeper/data/myid修改如下:

echo '2' > /data/zookeeper/data/myid

138 /data/zookeeper/data/myid修改如下:

echo '3' > /data/zookeeper/data/myid

啓動zookeeper集羣,啓動順序隨意沒要求。

zkServer.sh start

四、 驗證Zookeeper集羣是否安裝成功。
可以驗證一下是否啓動成功:

ps -ef | grep zookeeper

4.1分別在3臺虛擬機上查看zookeeper的狀態。

zkServer.sh status

4.2連接其中一臺的zookeeper

zkCli.sh -server node02:2181

4.3寫入數據

create /test data

4.4再連接另外一臺的zookeeper

zkCli.sh -server node03:2181

4.5如果能獲取到剛纔寫入的數據,則Zookeeper集羣安裝成功。

get /test

五、報錯及處理
應用連接zookeepr報錯:Session 0x0 for server node01/node01:2181,unexpected error,closing socket connection and attempting reconnect;
先看端口能否telnet通,如果通則使用zkServer.sh status查看zk是否確實已啓動,沒啓查看zookeeper.out中的報錯。
zookeeper.out中報錯:“zookeeper address already in use”;顯然端口被佔用,要麼是其他進程佔用了配置的端口,要麼是上邊配置的clientPort和server中的端口有重複。
zookeeper.out中報錯:Cannot open channel to 2 at election address /node01:3888;這應該只是組成集羣的node02節點未啓動,到node02啓動起來zk即會正常。



轉載自:https://www.cnblogs.com/wzxmt/p/11031480.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章