Linux安装Zookeeper(PS:附Shell脚本)

1. 准备阶段

     注意,zookeeper3.5版本以后需要下载带bin的安装包,不带bin的是源代码,部署完成后启动会报错:Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain

  • 脚本复制:修改脚本中参数后拷贝脚本,将下面的脚本内容复制,在虚拟机的任意路径下执行命令vim zookeeper_install.sh -> 按下键盘的Inster键 ->鼠标右键粘贴或使用键盘上的shift+Insert组合快捷键粘贴->按键盘ESC键->输入:wq!
  • 执行脚本安装zookeeper:sh zookeeper_install.sh install
  • 执行脚本启动zookeeper:sh zookeeper_install.sh start

2. 脚本

#!/usr/bin/env bash
#######################################
# This shell is for manager ZOOKEEPER
# Author: Coline
# Date: 2020/02/27 00:17
#######################################
readonly SCRIPT_PATH=$(cd `dirname $0`; pwd)
SHELL_NAME=$0
ACTION=$1
CURRENT_USER=`whoami`


# declare where the install package
readonly INSTALL_PACKAGE_WAY=
# declare the install way
readonly INSTALL_WAY=
# declare the zookeeper owner
readonly USER=
# declare the zookeeper owner group
readonly USER_GROUP=
# zookeeper data path
readonly ZOOKEEPER_DATA_DIR=
# zookeeper log path
readonly ZOOKEEPER_LOG_DIR=

function usage() {
    echo "Usage: $SHELL_NAME {start|stop|restart|install|uninstall}"
    exit 2
}

function log_info() {
    echo "[$(date -d today +"%Y-%m-%d %H:%M:%S %:::z")] $1"
}

function log_error() {
    echo -e "[$(date +"%Y-%m-%d %H:%M:%S %Z%:z")] [ERROR] $* \n"
    exit 1

}

function check_result()
{
    local ret_code=$1
    shift
    local error_msg=$*
    if [[ ${ret_code} -ne 0 ]]; then
        log_error ${error_msg}
    fi
}

function normal_check() {
  # check current director whether have zookeeper package
  if [[ ! -f ${INSTALL_PACKAGE_WAY} ]]; then
    log_error "pleas check whether install package exists"
  fi

  # check param whether empty
  if [[ -z ${INSTALL_WAY} ]] || [[ -z ${USER} ]] || [[ -z ${USER_GROUP} ]] || [[ -z ${ZOOKEEPER_DATA_DIR} ]] || [[ -z ${ZOOKEEPER_LOG_DIR} ]]; then
    log_error "param can not be empty"
  fi
}

# do something before install
function pre_install(){
  # make install way
  mkdir -p ${INSTALL_WAY}/install

  #create group ${USER}
  grep "^${USER_GROUP}" /etc/group &> /dev/null
  if [[ $? -ne 0 ]]; then
    log_info "add user group"
    groupadd ${USER_GROUP}
  fi

  #create user group
  id ${USER} &> /dev/null
  if [[ $? -ne 0 ]]; then
    log_info "add user"
    useradd -g ${USER_GROUP} ${USER}
    chage -M 99999 ${USER}
  fi
}

# do install job
function install_zookeeper(){
  # unzip the package to install way
  tar -zxvf ${INSTALL_PACKAGE_WAY} -C ${INSTALL_WAY}/install
}

function post_install() {
  # create ln of zookeeper
  local zookeeper_dir=$(ls -lt ${INSTALL_WAY}/install|grep zookeeper|head -1|awk '{print $9}')
  ln -s install/${zookeeper_dir} ${INSTALL_WAY}/zookeeper

  cp -p ${INSTALL_WAY}/zookeeper/conf/zoo_sample.cfg ${INSTALL_WAY}/zookeeper/conf/zoo.cfg
  mkdir -p ${ZOOKEEPER_DATA_DIR}
  mkdir -p ${ZOOKEEPER_LOG_DIR}
  if [[ -n $(cat ${INSTALL_WAY}/zookeeper/conf/zoo.cfg |grep dataDir) ]] ;then
    sed -i "s/^dataDir=.*/dataDir=${ZOOKEEPER_DATA_DIR//\//\\/}/g" ${INSTALL_WAY}/zookeeper/conf/zoo.cfg
  else
    echo "dataDir=${ZOOKEEPER_DATA_DIR}" >> ${INSTALL_WAY}/zookeeper/conf/zoo.cfg
  fi

  if [[ -n $(cat ${INSTALL_WAY}/zookeeper/conf/zoo.cfg |grep dataLogDir) ]] ;then
    sed -i "s/^dataLogDir=.*/dataLogDir=${ZOOKEEPER_LOG_DIR//\//\\/}/g" ${INSTALL_WAY}/zookeeper/conf/zoo.cfg
  else
    echo "dataLogDir=${ZOOKEEPER_LOG_DIR}" >> ${INSTALL_WAY}/zookeeper/conf/zoo.cfg
  fi

  # change the owner of dir
  chown -R ${USER}:${USER_GROUP} ${INSTALL_WAY}
  chown -R ${USER}:${USER_GROUP} ${ZOOKEEPER_DATA_DIR}
  chown -R ${USER}:${USER_GROUP} ${ZOOKEEPER_LOG_DIR}
}

function install() {
  log_info "------------normal_check------------"
  normal_check
  check_result $? "normal_check failed."
  log_info "normal_check success"

  log_info "------------pre_install-------------"
  pre_install
  check_result $? "pre_install failed."
  log_info "pre_install success"

  log_info "------------install_zookeeper-------------"
  install_zookeeper
  check_result $? "install_zookeeper failed."
  log_info "install_zookeeper success"

  log_info "------------post_install-------------"
  post_install
  check_result $? "post_install failed."
  log_info "post_install success"

}

# uninstall zookeeper
function uninstall() {
  # delete the zookeeper install way
  rm -f ${INSTALL_WAY}/zookeeper
  rm -rf ${INSTALL_WAY}/install/*zookeeper*
}

# start zookeeper
function start() {
  local zookeeper_pid=$(ps -ef|grep zookeeper|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${zookeeper_pid} ]] ;then
    log_info "zookeeper has been start"
    return 0
  fi

  if [[ ${CURRENT_USER} = ${USER} ]]; then
    source /etc/profile && nohup ${INSTALL_WAY}/zookeeper/bin/zkServer.sh start >> ${ZOOKEEPER_LOG_DIR}/zookeeper_start.log 2>&1 &
  else
    su - ${USER} -c "source /etc/profile && nohup ${INSTALL_WAY}/zookeeper/bin/zkServer.sh start >> ${ZOOKEEPER_LOG_DIR}/zookeeper_start.log 2>&1 &"
  fi
}

# stop zookeeper
function stop() {
  ${INSTALL_WAY}/zookeeper/bin/zkServer.sh stop
  local zookeeper_pid=$(ps -ef|grep zookeeper|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${zookeeper_pid} ]] ;then
    log_info "zookeeper pid still exists pid= ${zookeeper_pid}"
    kill -9 ${zookeeper_pid}
  fi
}

# check zookeeper status
function check_status() {
  ${INSTALL_WAY}/zookeeper/bin/zkServer.sh status
}

case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        start
    ;;
    check_status)
        check_status
    ;;
    install)
        install
    ;;
    uninstall)
        uninstall
    ;;
    *)
        usage
;;
esac

    参数修改:

INSTALL_PACKAGE_WAY安装包路径,需要全路径,例如:/root/apache-zookeeper-3.5.7-bin.tar.gz
INSTALL_WAYzookeeper安装路径,例如:/opt/cloud/middleware
USER服务用户属主,例如:root
USER_GROUP服务用户用户组,例如:root
ZOOKEEPER_DATA_DIRzookeeper数据路径,例如:/opt/cloud/zookeeper/data
ZOOKEEPER_LOG_DIRzookeeper日志路径,例如:/opt/cloud/logs/zookeeper

    脚本命令:

sh zookeeper_install.sh install安装zookeeper
sh zookeeper_install.sh uninstall卸载zookeeper
sh zookeeper_install.sh start启动zookeeper
sh zookeeper_install.sh stop关闭zookeeper
sh zookeeper_install.sh check_status检查zookeeper
sh zookeeper_install.sh restart重启zookeeper

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要在Linux安装Zookeeper,您可以按照以下步骤进行操作: 1. 下载Zookeeper安装包:您可以从Zookeeper官方网站上下载最新版本的安装包。 2. 解压安装包:使用tar命令解压下载的安装包,例如:tar -zxvf zookeeper-3.4.14.tar.gz。 3. 配置Zookeeper:在解压后的目录中,找到conf目录,复制zoo_sample.cfg文件并将其重命名为zoo.cfg。然后,使用文本编辑器打开zoo.cfg文件并进行必要的配置。 4. 启动Zookeeper:在bin目录中,使用./zkServer.sh start命令启动Zookeeper。 5. 验证Zookeeper是否正常运行:使用./zkServer.sh status命令来检查Zookeeper是否正在运行。 6. 停止Zookeeper:使用./zkServer.sh stop命令停止Zookeeper。 希望这些步骤能够帮助您成功安装Zookeeper。 ### 回答2: Zookeeper是一个用于协调分布式应用程序的开源软件。在Linux系统上安装Zookeeper相对比较简单,只需要下载并解压缩安装文件,然后根据官方文档进行配置即可。 以下是安装Zookeeper的步骤: 1.下载安装文件:可以在Zookeeper官网下载最新版本的安装文件,也可以在Linux系统上使用wget命令下载,具体命令如下: wget https://www.apache.org/dist/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz 2.解压安装文件:使用tar命令将下载的压缩包解压缩,具体命令如下: tar zxvf apache-zookeeper-3.6.2-bin.tar.gz 3.修改配置文件:Zookeeper的配置文件位于conf目录下,使用vi或nano等编辑器打开zoo_sample.cfg并另存为zoo.cfg,具体命令如下: cd apache-zookeeper-3.6.2-bin/conf cp zoo_sample.cfg zoo.cfg vi zoo.cfg 在zoo.cfg中修改配置信息,主要包括dataDir、clientPort、tickTime等参数。其中,dataDir指定Zookeeper的数据存储路径,clientPort指定客户端连接端口,tickTime指定Zookeeper中时间的基本单位。 4.启动Zookeeper:使用bin目录下的zkServer.sh文件启动Zookeeper,具体命令如下: cd apache-zookeeper-3.6.2-bin/bin ./zkServer.sh start 注意:在启动之前需要确认本地环境中没有占用clientPort端口的进程,否则会启动失败。 5.查看状态:使用zkServer.sh status命令查看Zookeeper的运行状态,具体命令如下: ./zkServer.sh status 如果显示“Mode: standalone”说明Zookeeper已经成功启动。 6.停止Zookeeper:使用zkServer.sh stop命令停止Zookeeper,具体命令如下: ./zkServer.sh stop 以上是在Linux系统上安装Zookeeper的步骤,安装过程主要包括下载安装文件、解压缩、修改配置文件、启动、查看状态和停止等步骤。通过这些步骤,可以快速部署Zookeeper,实现分布式应用程序的协调和管理。 ### 回答3: Zookeeper是一个分布式协调服务,用于管理分布式环境中的进程通信和协调。在Linux系统中安装Zookeeper需要按照以下步骤: 1. 下载Zookeeper 可以从Zookeeper官网(http://zookeeper.apache.org/)下载最新版本的Zookeeper,也可以使用命令行下载,命令如下: wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz 2. 解压Zookeeper 使用tar命令解压Zookeeper,命令如下: tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz 3. 配置Zookeeper 进入Zookeeper解压后的目录,将conf目录下的zoo_sample.cfg文件复制一份并重命名为zoo.cfg,命令如下: cd apache-zookeeper-3.7.0-bin/conf/ cp zoo_sample.cfg zoo.cfg 修改zoo.cfg文件,设置Zookeeper的数据目录、端口、实例个数等参数。 4. 启动Zookeeper 执行Zookeeper的启动脚本zkServer.sh,命令如下: cd ../bin/ ./zkServer.sh start 启动后可以执行命令查看Zookeeper状态: ./zkServer.sh status 5. 配置Zookeeper客户端 在使用Zookeeper时需要安装Zookeeper客户端,可以在pom.xml中添加以下依赖: <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.5.7</version> </dependency> 在代码中使用Zookeeper客户端连接Zookeeper,并进行相关操作,如: ZooKeeper zk = new ZooKeeper("localhost:2181", 3000, null); 6. 停止Zookeeper 执行命令停止Zookeeper: ./zkServer.sh stop 以上就是在Linux系统中安装Zookeeper的步骤,Zookeeper在分布式系统中扮演着重要的角色,通过学习它的使用方法可以更好地理解分布式系统架构和协调。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值