#!/bin/bash
#配置zk的安装目录 修改的地方1 脚本可以自己创建
currentTime=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "请输入zk的安装目录,不存在脚本自动创建,最后一个/不要写 /bigdata/install"
read zkinstallpath
#创建zk安装的目录
if [ ! -d $zkinstallpath ]; then
mkdir -p $zkinstallpath
fi
if [ ! -d $zkinstallpath ]; then
echo "创建目录$zkinstallpath失败!请检查目录是否有权限"
exit:
fi
#解压tar包
currentdir=$(cd $(dirname $0); pwd)
ls | grep 'zookeeper-.*[gz]$'
if [ $? -ne 0 ]; then
#当前目录没有zk的压缩包
echo "在$currentdir下没有发现zookeeper的gz压缩包,请自行上传!"
exit
else
#解压
tar -zxvf $currentdir/$(ls | grep 'zookeeper-.*[gz]$') -C $zkinstallpath
fi
zkbanben=`ls $zkinstallpath| grep 'zookeeper-.*'`
confpath=$zkinstallpath/$zkbanben/conf
cp $confpath/zoo_sample.cfg $confpath/zoo.cfg
echo -e "请输入zk数据存储目录:例如 /bigdata/data/zookeeper"
read zkdatapath
#创建zk数据的目录
if [ ! -d $zkdatapath ]; then
mkdir -p $zkdatapath
fi
if [ ! -d $zkdatapath ]; then
echo "创建目录$zkdatapath失败!请检查目录是否有权限"
exit
fi
#sed -i "s/^dataDir=\/tmp\/zookeeper/dataDir=$zkdatapath" $confpath/zoo.cfg
bak_dir='dataDir=/tmp/zookeeper'
new_dir='dataDir='$zkdatapath
sed -i "s!${bak_dir}!${new_dir}!g" $confpath/zoo.cfg
echo "请输入所有的zk集群节点:(按照空格分割) 例如 cdh01 cdh02 cdh03"
read redisPorts
array=(`echo $redisPorts | tr ' ' ' '` )
for i in `seq 0 $((${#array[@]}-1))`
do
echo "server.$((${i}+1))=${array[${i}]}:2888:3888" >>$confpath/zoo.cfg
done
echo "请输入zk的myid,不能重复,唯一值 例如 1"
read myid
echo $myid > $zkdatapath/myid
binpath=$zkinstallpath/$zkbanben/bin
sed -i 's/ZOO_LOG_DIR=\".\"/ZOO_LOG_DIR=\"${ZOOKEEPER_PREFIX}\/logs\"/g' $binpath/zkEnv.sh
echo "ZOO_LOG_DIR修改成功"
sed -i 's/ZOO_LOG4J_PROP=\"INFO,CONSOLE\"/ZOO_LOG4J_PROP=\"INFO,ROLLINGFILE\"/g' $binpath/zkEnv.sh
echo "ZOO_LOG4J_PROP修改成功"
sed -i 's/_ZOO_DAEMON_OUT=\"$ZOO_LOG_DIR\/zookeeper.out\"/_ZOO_DAEMON_OUT=\"$ZOO_LOG_DIR\/zookeeper.log\"/g' $binpath/zkServer.sh
echo "_ZOO_DAEMON_OUT修改成功"
sed -i 's/zookeeper.root.logger=INFO, CONSOLE/zookeeper.root.logger=INFO, ROLLINGFILE/g' $confpath/log4j.properties
echo "zookeeper.root.logger修改成功"
#PATH设置
#末行插入
echo "">>~/.bash_profile
echo "#zookeeper $currentTime">>~/.bash_profile
echo "export ZK_HOME=$zkinstallpath/$zkbanben">>~/.bash_profile
echo 'export PATH=$PATH:$ZK_HOME/bin'>>~/.bash_profile
source ~/.bash_profile
echo -e "是否远程复制 请输入y/n"
read flag
if [[ $flag == "y" ]]; then
#修改并分发安装文件
zkpath=$zkinstallpath/$zkbanben
zkpathtemp=$zkinstallpath/$zkbanben-temp
cp -r $zkpath $zkpathtemp
echo "以下输入的节点必须做免密登录"
echo -e '请输入除当前之外的节点(当前节点cdh01),严格符合以下格式IP:zkID,空格隔开, cdh02:2 cdh03:3 cdh04:4 cdh05:5'
read allnodes
user=`whoami`
array2=(${allnodes// / })
for allnode in ${array2[@]}
do
array3=(${allnode//:/ })
ip=${array3[0]}
zkid=${array3[1]}
echo ======= $ip =======
#修改文件
ssh $ip "mkdir -p $zkpath"
ssh $ip "mkdir -p $zkdatapath"
#修改zk的myid唯一值
ssh $ip "echo $zkid > $zkdatapath/myid"
scp -r $zkpathtemp/* ${user}@$ip:$zkpath/
ssh $ip "echo ''>>~/.bash_profile"
ssh $ip "echo '#zk $currentTime'>>~/.bash_profile"
ssh $ip "echo 'export ZK_HOME=$zkinstallpath/$zkbanben'>>~/.bash_profile"
ssh $ip 'echo "export PATH=\$PATH:\$ZK_HOME/bin">>~/.bash_profile'
ssh $ip "source ~/.bash_profile"
echo ======= $ip 远程复制完成 =======
done
#删除临时文件
rm -rf $zkpathtemp
for allnode in ${array2[@]}
do
echo ======= 在 $allnode 手动执行 source ~/.bash_profile 在通过 zkServer 查看是否安装成功 =======
done
fi
shell一键部署zk集群
最新推荐文章于 2025-04-06 14:30:23 发布