1. 程式人生 > >Zookeeper——分散式叢集搭建

Zookeeper——分散式叢集搭建

準備伺服器

- 192.168.214.150   centos6-1
- 192.168.214.151   centos6-2
- 192.168.214.152   centos6-3

Java環境

檢視java版本

[root@centos6-1 ~]# java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (rhel-2.5.5.4.el6-x86_64 u79-b14)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)
[root@centos6
-1 ~]#

使用Oracle JDK1.8,解除安裝OpenJDK

[root@centos6-1 ~]# yum remove java
[root@centos6-1 ~]# cd /export/servers/
[root@centos6-1 servers]# rz
rz waiting to receive.
Starting zmodem transfer.  Press Ctrl+C to cancel.
Transferring jdk-8u65-linux-x64.tar.gz...
  100%  177012 KB    14751 KB/sec    00:00:12
0 Errors [root@centos6-1 servers]#

解壓安裝

[root@centos6-1 servers]# ls
jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# tar -zvxf jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# ls
jdk1.8.0_65  jdk-8u65-linux-x64.tar.gz
[root@centos6-1 servers]# rm -rf jdk-8u65-linux-x64.tar.gz 
[root@centos6
-1 servers]#

配置環境變數

[root@centos6-1 servers]# vi /etc/profile

在檔案末尾新增以下內容:

JAVA_HOME=/export/servers/jdk1.8.0_65
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

重新載入環境變數

[root@centos6-1 servers]# source /etc/profile
[root@centos6-1 servers]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
[root@centos6-1 servers]# 

檢查伺服器環境

1.統一時間

#centos6-1
[[email protected] servers]# date
Wed Jun 27 20:03:19 CST 2018
#centos6-2
[[email protected] ~]# date
Wed Jun 27 19:10:09 CST 2018
#centos6-3
[[email protected] ~]# date
Fri Jun 29 00:11:32 CST 2018

發現時間不一致,統一使用北京時間(此處操作需要連線外網),在三臺主機下分別執行

[[email protected] servers]# ntpdate cn.pool.ntp.org
29 Jun 00:11:13 ntpdate[30493]: step time server 182.92.12.11 offset 101197.616054 sec
[[email protected] servers]# date
Fri Jun 29 00:11:41 CST 2018
[[email protected] servers]# 

2.關閉防火牆

直接關閉防火牆並設定開機不啟動

[root@centos6-1 servers]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
[root@centos6-1 servers]# chkconfig iptables off
[root@centos6-1 servers]#

3.設定ip主機對映

[[email protected]1 servers]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.214.150 centos6-1
192.168.214.151 centos6-2
192.168.214.152 centos6-3
[[email protected]1 servers]# 

已經配置,注意這裡三臺機器都得配置

Zookeeper下載安裝

此處省略下載上傳過程

1.解壓安裝
[root@centos6-1 ~]# cd /export/servers/
[root@centos6-1 servers]# ls
jdk1.8.0_65  zookeeper-3.4.5.tar.gz
[root@centos6-1 servers]# tar -zvxf zookeeper-3.4.5.tar.gz
[root@centos6-1 servers]# ls
jdk1.8.0_65  zookeeper-3.4.5.tar.gz  zookeeper-3.4.5
[root@centos6-1 servers]# rm -rf zookeeper-3.4.5.tar.gz
[root@centos6-1 servers]# ls
jdk1.8.0_65  zookeeper-3.4.5
2.配置環境變數

獲取Zookeeper所在目錄路徑

[root@centos6-1 servers]# cd zookeeper-3.4.5/
[root@centos6-1 zookeeper-3.4.5]# pwd
/export/servers/zookeeper-3.4.5
[root@centos6-1 zookeeper-3.4.5]#vi /etc/profile

將以下內容追加到profile檔案末尾

export ZOOKEEPER_HOME=/export/servers/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin

更新環境變數

[root@centos6-1 zookeeper-3.4.5]#source /ete/profile
3.修改Zookeeper配置檔案
[root@centos6-1 zookeeper-3.4.5]# mkdir -p /export/data/zkdata
[root@centos6-1 zookeeper-3.4.5]# cd conf/
[root@centos6-1 conf]# cp zoo_sample.cfg zoo.cfg
[root@centos6-1 conf]# vi zoo.cfg

在zoo.cfg檔案中新增一下內容

//這個在原始檔中已經配置,修改即可
dataDir=/export/data/zkdata  //指定ZooKeeper資料儲存目錄
//直接在檔案中追加
server.1=centos6-1:2888:3888  //server.伺服器編號=主機名:心跳埠:選舉埠)
server.2=centos6-2:2888:3888
server.3=centos6-3:2888:3888

建立myid檔案

[root@centos6-1 conf]# cd /export/data/zkdata
[root@centos6-1 zkdata]# echo 1 > myid
[root@centos6-1 zkdata]# cat myid
1
[root@centos6-1 zkdata]#

此處的myid檔案的內容取決於當前伺服器的編號,這是在上面zoo.cfg檔案中配置的

同步至其他叢集伺服器

1.同步安裝的JDK(先配置ssh免密登入)
[root@centos6-1 zkdata]# scp -r /export/servers/jdk1.8.0_65/ root@centos6-2:/export/servers/
[root@centos6-1 zkdata]# scp -r /export/servers/jdk1.8.0_65/ root@centos6-3:/export/servers/
2.同步安裝的ZooKeeper
[root@centos6-1 zkdata]# scp -r /export/servers/zookeeper-3.4.5/ root@centos6-2:/export/servers/
[root@centos6-1 zkdata]# scp -r /export/servers/zookeeper-3.4.5/ root@centos6-3:/export/servers/
3.同步環境變數
[root@centos6-1 zkdata]# scp -r /etc/profile root@centos6-2:/etc/
[root@centos6-1 zkdata]# scp -r /etc/profile root@centos6-3:/etc/
4.建立centos6-2和centos6-3的myid檔案(首先對應資料夾已經建立)
[root@centos6-2 zkdata]# echo 2 > myid
[root@centos6-3 zkdata]# echo 3 > myid
5.注意防火牆關閉,時間同步和主機ip對映

逐一啟動ZooKeeper

//啟動centos6-1
[[email protected]1 zkdata]# zkServer.sh start
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected]1 zkdata]# 
//啟動centos6-2
[[email protected]2 ~]# zkServer.sh start
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected]2 ~]#
//啟動centos6-3
[[email protected]3 ~]# zkServer.sh start
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected]3 ~]# 

檢視ZooKeeper狀態

//centos6-1是follower角色
[root@centos6-1 zkdata]# zkServer.sh status
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@centos6-1 zkdata]# 
//centos6-2是leader角色
[root@centos6-2 ~]# zkServer.sh status
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: leader
[root@centos6-2 ~]# 
//centos6-3是follower角色
[root@centos6-3 ~]# zkServer.sh status
JMX enabled by default
Using config: /export/servers/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: follower
[root@centos6-3 ~]# 

如果啟動不成功,可以觀察zookeeper.out日誌,檢視錯誤資訊進行排查

總結

目前為止一個完整的ZooKeeper分散式叢集已經搭建成功了,當中的配置意義並沒有進行詳細解釋,如果你搭建成功了,你可以再去了解每個配置的意義。下面提供基本解釋:

引數 解釋
tickTime 這個時間是作為zookeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是說每個tickTime時間就會發送一個心跳。
initLimit 這個配置項是用來配置zookeeper接受客戶端(這裡所說的客戶端不是使用者連線zookeeper伺服器的客戶端,而是zookeeper伺服器叢集中連線到leader的follower 伺服器)初始化連線時最長能忍受多少個心跳時間間隔數。
syncLimit 這個配置項標識leader與follower之間傳送訊息,請求和應答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是5*2000=10秒。
dataDir 顧名思義就是zookeeper儲存資料的目錄,預設情況下zookeeper將寫資料的日誌檔案也儲存在這個目錄裡;
clientPort 這個埠就是客戶端連線Zookeeper伺服器的埠,Zookeeper會監聽這個埠接受客戶端的訪問請求;
server.A=B:C:D A是一個數字,表示這個是第幾號伺服器,B是這個伺服器的IP地址,C第一個埠用來叢集成員的資訊交換,表示這個伺服器與叢集中的leader伺服器交換資訊的埠,D是在leader掛掉時專門用來進行選舉leader所用的埠。