注意事项
- 执行shell脚本需要参数,例:安装集群第一台: sh zk_install.sh 1
- 需配置 INSTALL_PATH 和 CLUSTER_HOSTS_ARRAY
- 单台安装,CLUSTER_HOSTS_ARRAY 只填一个
- 建议配主机名,可使用ip
#!/bin/bash
INSTALL_PATH='/opt/software'
CLUSTER_HOSTS_ARRAY=(node02 node03 node04)
MACHINE_ID=$1
PKG_NAME='zookeeper-3.4.14.tar.gz'
DIR_NAME='zookeeper-3.4.14'
function check_jdk()
{
if [[ ! -d $JAVA_HOME ]];
then
echo "JAVA_HOME not set"
exit 1
else
echo "JAVA_HOME=$JAVA_HOME"
fi
}
function check_package()
{
if [ ! -d "${INSTALL_PATH}" ];
then
echo "${INSTALL_PATH} not exit, mkdir"
mkdir -p "${INSTALL_PATH}"
else
echo "${INSTALL_PATH} is exit"
fi
PKG_NAME=`ls | grep zookeeper | grep .tar.gz`
if [ ! -f "${PKG_NAME}" ]
then
echo "you need install package!"
exit
fi
DIR_NAME=`ls -l | grep '^d' |grep zookeeper |awk '{print$9}'`
if [ -d "${DIR_NAME}" ];
then
echo "${DIR_NAME} is exit, rm unzip path"
rm -rf "${DIR_NAME}"
else
echo "DIR_NAME is ok"
fi
}
function install_info(){
if [ ! -z "$MACHINE_ID" ];
then
echo 'current MACHINE_ID='$MACHINE_ID
else
MACHINE_ID="1"
echo "empty input param('$1'),using default 1"
fi
echo
echo "INSTALL_PATH: ${INSTALL_PATH}"
echo "MACHINE_ID: ${MACHINE_ID}"
echo "CLUSTER_HOSTS_ARRAY: ${CLUSTER_HOSTS_ARRAY[*]}"
echo
while true; do
read -p "Check that the configuration, press [y/n] to continue: " yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) echo "please input Y/N.";;
esac
done
}
function install_zk(){
tar -xf $PKG_NAME
DIR_NAME=`ls -l | grep '^d' |grep zookeeper |awk '{print$9}'`
mv $DIR_NAME $INSTALL_PATH
TARGET_PATH=$INSTALL_PATH/$DIR_NAME
cp $TARGET_PATH/conf/zoo_sample.cfg $TARGET_PATH/conf/zoo.cfg
zk_conf=$TARGET_PATH/conf/zoo.cfg
zk_data=$TARGET_PATH/data
mkdir -p $zk_data
sed -i 's|dataDir=/tmp/zookeeper|dataDir='$zk_data'|g' $zk_conf
for (( i = 1; i <= "${#CLUSTER_HOSTS_ARRAY[@]}"; i++ ))
do
echo server.$i="${CLUSTER_HOSTS_ARRAY[$(($i-1))]}:2888:3888" >> $zk_conf
done;
server=$2
echo "server=$server"
echo $MACHINE_ID > $zk_data/myid
if [[ -z $ZOOKEEPER_HOME ]];then
echo "### zk env begin" >> /etc/profile
echo "export ZOOKEEPER_HOME=$TARGET_PATH" >> /etc/profile
echo 'export PATH=$PATH:$ZOOKEEPER_HOME/bin' >> /etc/profile
echo "### zk env end" >> /etc/profile
fi
echo
echo "you can use command to start zk..."
echo "$TARGET_PATH/bin/zkServer.sh start"
echo
}
function main()
{
check_jdk
check_package
install_info
install_zk
}
main