Zookeeper——分散式叢集搭建
阿新 • • 發佈:2018-12-25
準備伺服器
- 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所用的埠。 |