Zookeeper叢集設計與安裝部署(最完整版)
首先準備好3個節點分別為hadoop01、hadoop02、hadoop03,接下來帶著大家一起搭建最小規模的Zookeeper分散式叢集。
1.叢集規劃
1.1主機規劃
使用準備的3個節點,搭建一個最小規模的Zookeeper分散式叢集。
1.2軟體規劃
為了方便叢集各個元件相容性管理,這裡選擇一個CDH穩定版本的zookeeper-3.4.5-cdh5.10.0.tar.gz,軟體規劃如下圖所示。
1.3使用者規劃
在每個節點規劃好自己的使用者和使用者組,為後面在哪個使用者下安裝Zookeeper做好準備。
1.4目錄規劃
我們規劃大資料相關軟體統一放在app目錄下,指令碼統一放在tools目錄下,日誌資料放在data目錄下。
2.環境準備
2.1時鐘同步
使用上海時間覆蓋本地時間
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
使用NTP(網路時間協議)實現時鐘同步
#線上安裝ntp
yum install ntp
#網路時間同步
ntpdate pool.ntp.org
2.2Hosts 檔案配置
一般情況下通過主機名是無法訪問虛擬機器的,需要通過IP地址才可以訪問虛擬機器。但是IP地址不容易記住,這時可以通過配置主機名與IP地址的對映關係,從而可以通過主機名來訪問虛擬機器。
為了方便各個節點相互通過主機名訪問,每個節點都需要相同配置。修改示例如下所示:
vi /etc/hosts
192.168.20.121 hadoop01
192.168.20.122 hadoop02
192.168.20.123 hadoop03
2.3關閉防火牆
防火牆是對我們的伺服器進行的一種保護,但是有時候也會妨礙叢集間的相互通訊,為了方便起見我們可以關閉掉防火牆。
針對centos6.x各個節點防火牆操作如下所示:
#檢視防火牆狀態
service iptables status
#永久關閉防火牆
chkconfig iptables off
#臨時關閉防火牆
service iptables stop
備註:如果使用centos7,以上命令不適用。
2.4SSH免密碼登入
2.4.1首先對每個節點單獨配置ssh免密碼登入
下面以hadoop01節點為例:
切換到使用者根目錄操作,生成祕鑰
mkdir .ssh
ssh-keygen -t rsa
進入.ssh目錄,將公鑰拷貝到認證檔案
cd .ssh
cat id_rsa.pub >> authorized_keys
退回到根目錄,對.ssh賦予許可權
chmod 700 .ssh
chmod 600 .ssh/*
測試當前節點ssh免密碼登入
ssh hadoop01
2.4.2實現各個節點之間免密碼登入
將hadoop02和hadoop03的共鑰id_ras.pub拷貝到hadoop01中的authorized_keys檔案中。
cat ~/.ssh/id_rsa.pub | ssh [email protected] 'cat >> ~/.ssh/authorized_keys'
然後將hadoop01中的authorized_keys檔案分發到hadoop02和hadoop03節點上面。
scp -r authorized_keys [email protected]:~/.ssh/
scp -r authorized_keys [email protected]:~/.ssh/
然後hadoop01、hadoop02和hadoop03就可以免密碼互通
2.5叢集指令碼準備
2.5.1編寫配置檔案及叢集指令碼
選一個主節點,比如hadoop01,建立/home/hadoop/tools指令碼存放目錄
mkdir /home/hadoop/tools
分別編寫指令碼配置檔案和分發檔案
deploy.conf deploy.sh runRemoteCmd.sh
deploy.conf 具體內容如下所示:
#### NOTES # There is crontab job using this config file which would compact log files and remove old log file. # please be carefully while modifying this file until you know what crontab exactly do #hdp hadoop01,all,namenode,zookeeper,resourcemanager, hadoop02,all,slave,namenode,zookeeper,resourcemanager, hadoop03,all,slave,datanode,zookeeper,
備註:第一列為各個節點的主機名,其他列為自己對各個節點打的標籤。
deploy.sh具體內容如下所示:
#!/bin/bash #set -x if [ $# -lt 3 ] then echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag" echo "Usage: ./deply.sh srcFile(or Dir) descFile(or Dir) MachineTag confFile" exit fi src=$1 dest=$2 tag=$3 if [ 'a'$4'a' == 'aa' ] then confFile=/home/hadoop/tools/deploy.conf else confFile=$4 fi if [ -f $confFile ] then if [ -f $src ] then for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` do scp $src $server":"${dest} done elif [ -d $src ] then for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` do scp -r $src $server":"${dest} done else echo "Error: No source file exist" fi else echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory" fi
備註:該指令碼為叢集分發指令碼,可以快速、方便地將主節點的檔案或者目錄分發到其他從節點。
runRemoteCmd.sh具體內容如下所示:
#!/bin/bash #set -x if [ $# -lt 2 ] then echo "Usage: ./runRemoteCmd.sh Command MachineTag" echo "Usage: ./runRemoteCmd.sh Command MachineTag confFile" exit fi cmd=$1 tag=$2 if [ 'a'$3'a' == 'aa' ] then confFile=/home/hadoop/tools/deploy.conf else confFile=$3 fi if [ -f $confFile ] then for server in `cat $confFile|grep -v '^#'|grep ','$tag','|awk -F',' '{print $1}'` do echo "*******************$server***************************" ssh $server "source ~/.bashrc; $cmd" done else echo "Error: Please assign config file or run deploy.sh command with deploy.conf in same directory" fi
備註:該指令碼為叢集遠端命令執行指令碼,方便在各個節點分別執行傳入的命令。
2.5.2給指令碼新增執行許可權
分別給以下指令碼新增執行許可權
chmod u+x deploy.sh
chmod u+x runRemoteCmd.sh
2.5.3配置指令碼環境變數
vi ~/.bashrc
PATH=/home/hadoop/tools:$PATH
export PATH
2.5.4使用指令碼建立規劃目錄
批量建立各個節點相應目錄
runRemoteCmd.sh "mkdir /home/hadoop/app" all
runRemoteCmd.sh "mkdir /home/hadoop/data" all
3.JDK安裝
Zookeeper是由Java編寫,執行在JVM上,所以需要提前安裝JDK執行環境。
3.1下載JDK
可以到官網下載對應版本的jdk,這裡選擇安裝jdk1.8版本,並上傳至主節點(hadoop01)/home/hadoop/app目錄下。
3.2解壓JDK
通過tar -zxvf命令對jdk安裝包進行解壓即可。
3.3建立軟連線
為了方便版本的更換和學習使用,可以建立jdk軟連線指向jdk真實安裝路徑。可以使用如下命令:ln -s jdk1.8.0_51 jdk
3.4配置環境變數
3.4.1修改/etc/profile檔案
如果你的計算機僅僅作為開發使用時推薦使用這種方法,因為所有使用者的shell都有權使用這些環境變數,可能會給系統帶來安全性問題。 這裡是針對所有的使用者的,所有的shell。
vi /etc/profile JAVA_HOME=/home/hadoop/app/jdk CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:/home/hadoop/tools:$PATH export JAVA_HOME CLASSPATH PATH
3.4.2修改.bashrc檔案
這種方法更為安全,它可以把使用這些環境變數的許可權控制到使用者級別,這裡是針對某一個特定的使用者,如果你需要給某個使用者許可權使用這些環境變數,你只需要修改其個人使用者主目錄下的.bashrc檔案就可以了。
vi ~/.bashrc JAVA_HOME=/home/hadoop/app/jdk CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar PATH=$JAVA_HOME/bin:/home/hadoop/tools:$PATH export JAVA_HOME CLASSPATH PATH
3.5使配置檔案生效
通過source ~/.bashrc命令使得剛剛配置的環境變數生效。
3.6驗證JDK是否安裝成功
通過命令:java –version檢視jdk版本,如果能檢視到當前jdk版本,說明jdk安裝成功
3.7JDK安裝包同步到其他節點
通過指令碼命令:deploy.sh jdk1.8.0_51 /home/hadoop/app/ slave將jdk安裝包同步到其他節點,然後重複3.3~3.6步驟完成各個節點的jdk安裝。
4.Zookeeper安裝部署
4.1下載Zookeeper
Apache版本下載地址:https://archive.apache.org/dist/
CDH版本下載地址:http://archive-primary.cloudera.com/cdh5/cdh/5/
下載對應版本Zookeeper,這裡下載zookeeper-3.4.5-cdh5.10.0.tar.gz版本,並上傳至/home/hadoop/app目錄下。
4.2解壓Zookeeper
通過tar -zxvf命令對Zookeeper安裝包進行解壓即可。
4.3建立軟連線
為了方便版本的更換和學習使用,可以建立zookeeper軟連線指向zookeeper真實安裝路徑。可以使用如下命令:ln -s zookeeper-xxx zookeeper
4.4修改zoo.cfg
4.4.1拷貝一份zoo.cfg配置檔案
預設情況下,Zookeeper的conf目錄沒有zoo.cfg,此時需要通過如下命令拷貝一份:
cp zoo_sample.cfg zoo.cfg
4.4.2修改zoo.cfg配置檔案
# The number of milliseconds of each tick #這個時間是作為Zookeeper伺服器之間或客戶端與伺服器之間維持心跳的時間間隔 tickTime=2000 # The number of ticks that the initial # synchronization phase can take #配置 Zookeeper 接受客戶端初始化連線時最長能忍受多少個心跳時間間隔數。 initLimit=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement #Leader 與 Follower 之間傳送訊息,請求和應答時間長度 syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. #資料目錄需要提前建立 dataDir=/home/hadoop/data/zookeeper/zkdata #日誌目錄需要提前建立 dataLogDir=/home/hadoop/data/zookeeper/zkdatalog # 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 # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1 #server.每個節點服務編號=伺服器ip地址:叢集通訊埠:選舉埠 server.1=hadoop01:2888:3888 server.2=hadoop02:2888:3888 server.3=hadoop03:2888:3888
4.5zk安裝目錄同步到其他節點
將Zookeeper安裝目錄整體分發到其他節點
deploy.sh zookeeper-3.4.5-cdh5.10.0 /home/hadoop/app/ slave
並分別建立軟連線
ln -s zookeeper-3.4.5-cdh5.10.0 zookeeper
4.6建立規劃的目錄
使用叢集指令碼統一建立規劃目錄
runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdata" all
runRemoteCmd.sh "mkdir -p /home/hadoop/data/zookeeper/zkdatalog" all
4.7修改每個節點服務編號
分別到各個節點,進入/home/hadoop/data/zookeeper/zkdata目錄,建立檔案myid,裡面的內容分別填充為:1、2、3
[[email protected] zkdata]$ vi myid
[[email protected] zkdata]$ cat myid
1
[[email protected] zkdata]$ vi myid
[[email protected] zkdata]$ cat myid
2
[[email protected] zkdata]$ vi myid
[[email protected] zkdata]$ cat myid
3
4.8測試執行
啟動Zookeeper
runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh start" all
檢視Zookeeper程序
runRemoteCmd.sh "jps" all
檢視Zookeeper狀態
runRemoteCmd.sh "/home/hadoop/app/zookeeper/bin/zkServer.sh status" all
如果檢視到Zookeeper節點狀態包含leader 和follower,說明Zookeeper叢集安裝成功。