zookeeper自動化安裝指令碼
阿新 • • 發佈:2018-12-17
用於減少操作人員安裝軟體的時間,將zookeeper軟體的安裝寫成指令碼形式,可以降低操作複雜性,提到可移植性。
一、指令碼前準備
1、zookeeper軟體下載
本文做測試的zookeeper版本為 zookeeper-3.4.13
2、zookeeper自定義配置檔案
touch zookeeper_install.conf
之後在zookeeper_install.conf中配置需要配置zookeeper多臺伺服器的DNS,使用者名稱和myid。
這裡沒有根據/etc/hosts檔案進行dns匹配是因為由於線上的hosts檔案中可能存在多個與配置無關的dns,我們再conf中只配置需要安裝zookeeper的dns。
hadoop1 hadoop 1
hadoop2 hadoop 2
hadoop3 hadoop 3
二、指令碼執行格式
指令碼需要傳遞三個引數:
這裡注意傳遞引數為絕對路徑
第一引數是zookeeper安裝包位置:/home/hadoop/packages/zookeeper-3.4.13.tar.gz
第二引數是zookeeper安裝位置:/home/hadoop/apps
第三引數是zookeeper自定義配置檔案位置:/home/hadoop/shell/zookeeper/zookeeper_install.conf
sh zookeeper_install.sh /home/hadoop/packages/zookeeper-3.4.13.tar.gz /home/hadoop/apps /home/hadoop/shell/zookeeper/zookeeper_install.conf
三、指令碼細節及解讀
#!/bin/bash
# 將安裝包解壓到安裝位置,不輸出日誌
tar -zxvf $1 -C $2 >/dev/null 2>&1
# 儲存配置檔案
# hadoop1 hadoop 1
# hadoop2 hadoop 2
# hadoop3 hadoop 3
CONFIG=$3
# 進入安裝位置,在檔案位置獲取到解壓後的檔名如zookeeper-3.4.13
cd $2
ZOOKEEPER_PARENT=`pwd`
ZOOKEEPER_OLDNAME=`ls | grep "zookeeper"`
ZOOKEEPER_OLD_PATH="${ZOOKEEPER_PARENT}/${ZOOKEEPER_OLDNAME}"
ZOOKEEPER_NEW_PATH="${ZOOKEEPER_PARENT}/zookeeper"
# 將zookeeper-3.4.13檔名改成zookeeper
mv ${ZOOKEEPER_OLD_PATH} ${ZOOKEEPER_NEW_PATH}
# 進入zookeeper資料夾內
cd $ZOOKEEPER_NEW_PATH
# 獲取ZOOKEEPER_HOME
ZOOKEEPER_HOME=`pwd`
modify_profile_and_myid(){
# 獲取profile位置
PROFILE="$HOME/.bash_profile"
cat $CONFIG | while read line
do
# 從自定義配置檔案中獲取到DNS,使用者名稱,myid
DNS=`echo $line | cut -d ' ' -f 1`
USERNAME=`echo $line | cut -d ' ' -f 2`
MYID=`echo $line | cut -d ' ' -f 3`
if [ "$1" == "step1" ]
then
# 將一下內容寫入zoo.cfg
# server.1=hadoop1:2888:3888
# server.2=hadoop2:2888:3888
# server.3=hadoop3:2888:3888
echo "server.${MYID}=${DNS}:2888:3888" >> $2
elif [ "$1" == "step2" ]
then
if [ ${MYID} -eq 1 ]
then
# 將~/.bash_profile進行修改
# ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper
# PATH=$PATH:$HOME/.local/bin:$HOME/bin:
# $JAVA_HOME/bin:$ZOOKEEPER_HOME/bin
sed -i /PATH=/i\\ZOOKEEPER_HOME=${ZOOKEEPER_HOME} ${PROFILE}
sed -i '/^PATH=/s/$/:\$ZOOKEEPER_HOME\/bin/' ${PROFILE}
else
# 將第一臺機器的~/.bash_profile拷貝到其他機器中
scp -r ${PROFILE} ${USERNAME}@${DNS}:"$HOME"
fi
# 將每臺機器上的~/.bash_profile生效
ssh -n ${USERNAME}@${DNS} "source ${PROFILE}"
elif [ "$1" == "step3" ]
then
if [ ${MYID} -ne 1 ]
then
# 將第一臺機器上的zookeeper資料夾拷貝到其他機器上
scp -r ${ZOOKEEPER_HOME} ${USERNAME}@${DNS}:"${ZOOKEEPER_PARENT}"
fi
else
# 將其他機器上的myid進行修改
ssh -n [email protected]$DNS "cd ${ZOOKEEPER_HOME}/data; echo "${MYID}" > ${ZOOKEEPER_HOME}/data/myid"
fi
done
}
# 進入zookeeper中的conf資料夾下,建立zoo.cfg,並將datadir和logdir填入zoo.cfg
cd "${ZOOKEEPER_HOME}/conf"
cp zoo_sample.cfg zoo.cfg
sed -i /dataDir=/d zoo.cfg
echo "dataDir=${ZOOKEEPER_HOME}/data" >> zoo.cfg
echo "dataLogDir=${ZOOKEEPER_HOME}/log" >> zoo.cfg
# 執行步驟1將server.1=hadoop1:2888:3888對應內容存入zoo.cfg
modify_profile_and_myid "step1" "zoo.cfg"
# 執行步驟2將多臺機器上的~/.bash_profile進行修改
modify_profile_and_myid "step2"
# 修改datadir和logdir的許可權
cd ${ZOOKEEPER_HOME}
mkdir -m 755 data
mkdir -m 755 log
# 執行步驟3將zookeeper資料夾拷貝到其他機器
modify_profile_and_myid "step3"
# 修改myid
modify_profile_and_myid "step4"