zookeeper安装虽然不算复杂,但是还是存在一定的操作。
在部署过程中可能会出现人为操作失误,为避免这种情况,实际线上安装还是需要有安装脚本。
另外,最好应用作为服务注册在服务器。
安装脚本
我这里的zookeeper.zip下面,放的是安装文件、启动脚本、以及部分需要替换的配置文件:
这是我自己一行行写,经过验证的,现在把安装脚本放出来:
#!/bin/bash
# author: YoungLu
# desciption: zookeeper install program
##############zookeeper##############
# zookeeper version
ZOOKEEPER_VERSION="3.5.6"
ZOOKEEPER_COMPRESS_NAME="apache-zookeeper-"$ZOOKEEPER_VERSION"-bin"
# set zookeeper install path
INSTALL_PATH=/app/soft
# soft path
SOFT_PATH=/app/soft
#user app
USER_APP_USERNAME=app
USER_APP_PASSWD=app\$123
#################JAVA#################
# print JAVA_HOME
JAVA_INSTALL_PATH=`su - app -c "echo $JAVA_HOME"`
# java environment
JAVA_ENVIRVAR="#java configuration\nJAVA_HOME=/app/soft/jdk1.8.0_131\nPATH=$JAVA_HOME/bin:$PATH\nCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar\nexport JAVA_HOME\nexport PATH\nexport CLASSPATH"
# is user app exist?
egrep "^$USER_APP_USERNAME" /etc/passwd >& /dev/null
if [ $? -ne 0 ]
then
echo "user app is not created,prepared to create..."
useradd $USER_APP_USERNAME
echo $USER_APP_PASSWD | sudo passwd $USER_APP_USERNAME --stdin &>/dev/null
fi
# is java installed?
if [ "x" == $JAVA_INSTALL_PATH"x" ]
then
if [ ! -d "$SOFT_PATH/jdk1.8.0_131" ]; then
echo "jdk1.8 is not installed,please install \" powersi base environment \" first."
echo "zookeeper installer exit."
exit 1
fi
echo "JAVA_HOME is not set,prepared to set JAVA_HOME..."
echo -e $JAVA_ENVIRVAR >> /home/$USER_APP_USERNAME/.bashrc
source /home/$USER_APP_USERNAME/.bashrc
echo "SUCCESS."
fi
# move and unzip zookeeper.zip to $SOFT_PATH
mv ./zookeeper.zip $INSTALL_PATH
cd $INSTALL_PATH
unzip $INSTALL_PATH"/"zookeeper.zip
# decompress zookeeper
tar -xf $ZOOKEEPER_COMPRESS_NAME".tar.gz"
mv $ZOOKEEPER_COMPRESS_NAME zookeeper
# move configuration to zookeeper install path
mv -f log4j.properties zookeeper/conf
mv -f zoo.cfg zookeeper/conf
mv -f zookeeper.sh /etc/init.d/zookeeper
mkdir -p zookeeper/data
# change directory owner to user and user group
chown -R app.app $INSTALL_PATH"/"zookeeper
# add to system service
chmod a+x /etc/init.d/zookeeper
chown app.app /etc/init.d/zookeeper
chkconfig --add /etc/init.d/zookeeper
#clean rubbish files
rm -rf $INSTALL_PATH"/"$ZOOKEEPER_COMPRESS_NAME".tar.gz"
rm -rf $INSTALL_PATH"/"zookeeper.zip
echo "zookeeper installation complete."
注:这里记得要先装jdk1.8,因为我其他的脚本里面有安装jdk因此这里检测到没有jdk选择提示而不是安装,这里可以根据个人情况修改我的脚本。
另外,由于这里有修改用户环境变量的操作,因此这个脚本最好使用source命令安装。关于为何不用bash安装,可以自行百度。
启动脚本
zookeeper启动时是到bin目录下执行zkServer.sh start,关闭是执行zkServer.sh stop.
#!/bin/bash
# chkconfig: 2345 10 90
# author: YoungLu
# description: zookeeper
zookeeper=/app/soft/zookeeper
zookeeper_BIN=$zookeeper/bin
function Stop()
{
$zookeeper_BIN/zkServer.sh stop
rm -fr $zookeeper_BIN/zookeeper.pid
}
function Start()
{
if [ -f "$zookeeper_BIN/zookeeper.pid" ];then
echo "zookeeper is running...please stop first..."
exit 1
fi
if [ `whoami` = "app" ];then
echo -e "\033[32m--zookeeper is run by app user!--\033[0m"
$zookeeper_BIN/zkServer.sh start
else
echo -e "\033[33m--zookeeper switches to app user startup!--\033[0m"
su - app -c "$zookeeper_BIN/zkServer.sh start"
fi
pid=`ps -ef | grep zoo.cfg | grep -v grep | awk '{print $2}'`
su - app -c "echo $pid > $zookeeper_BIN/zookeeper.pid"
}
function Status()
{
if [ ! -f "$zookeeper_BIN/zookeeper.pid" ];then
echo "zookeeper is not running..."
else
echo "zookeeper is running..."
fi
}
case $1 in
stop)
Stop
;;
start)
Start
;;
restart)
Stop
sleep 1
Start
;;
status)
Status
;;
*)
echo "Usage: service `basename $0` {stop|start|restart|status}"
;;
esac
后续步骤: (1)zoo.cfg中需要配置安装zookeeper的服务器 server.1=192.168.133.14:2888:3888
server.2=192.168.133.15:2888:3888 server.3=192.168.133.13:2888:3888
(2)根据上述的对应的server.X,在data目录中创建一个myid的文件,内容是“X” 例,server.1就将“1”写入myid
echo “1” > data/myid