zk_install.sh

#!/bin/bash
base_path=$(cd `dirname $0`; pwd)
source ${base_path}/conf/config function install_java () {
for (( i=0; i<${#zk_array[@]}; i++ ))
do
# 判断需要安装zookeeper的节点是否已有java环境 [zookeeper的启动依赖java环境]
# 返回非零状态则表示java环境不存在,并安装java环境
# $USER 为环境变量,输出的值为当前用户的名称 [建议使用普通用户]
ssh $USER@${zk_array[i]} 'java -version' &> /dev/null
if [[ "$?" -ne '0' ]];then
ssh $USER@${zk_array[i]} "mkdir -p ${java_path}"
# 如果准备的java安装包名称不是 jdk.tar.gz ,可以重命名成 jdk.tar.gz ,或者修改 jdk.tar.gz 为当前安装包的名称
scp ${base_path}/package/jdk.tar.gz $USER@${zk_array[i]}:${pack_path}/
# 如果上一行有修改,此处的 jdk.tar.gz 也需要修改
ssh $USER@${zk_array[i]} "cd ${pack_path} && tar xf jdk.tar.gz -C ${java_path} && rm -f jdk.tar.gz"
ssh $USER@${zk_array[i]} "echo \"export JAVA_HOME=${java_path}\" >> $HOME/.bashrc"
ssh $USER@${zk_array[i]} "echo 'export PATH=\$PATH:\$JAVA_HOME/bin' >> $HOME/.bashrc"
ssh $USER@${zk_array[i]} "echo 'source /etc/profile' >> $HOME/.bashrc"
fi
done
} function install_zk () {
# 将 conf 目录下的 zoo_template.cfg 文件重定向成 zoo_sample.cfg 文件,保持配置文件的干净
# zoo_template.cfg 文件需要提前准备好
cat ${base_path}/conf/zoo_template.cfg > ${base_path}/conf/zoo_sample.cfg
# 定义一个变量conut,赋值为0,因为zookeeper是需要用到myid的,至于为什么不从1开始,程序员都懂的
count=0
for (( i=0; i<${#zk_array[@]}; i++ ))
do
# 每次循环,count的值则会加1
let count++
echo "server.${count}=${zk_array[i]}:2888:3888" >> ${base_path}/conf/zoo_sample.cfg
done
# 根据 conf 目录下的 config 文件来修改 zoo_sample.cfg 文件,以此来生成zookeeper的配置文件
# 这里只修改了端口和数据目录,其他的可以自行使用增加sed命令即可
sed -i "/clientPort/s/=.*/=${zk_clinet_port}/" ${base_path}/conf/zoo_sample.cfg
sed -i "/dataDir/s#=.*#=${zk_data_dir}#" ${base_path}/conf/zoo_sample.cfg
# 开始安装zookeeper
for (( i=0; i<${#zk_array[@]}; i++ ))
do
ssh $USER@${zk_array[i]} "mkdir ${zk_path}"
scp ${base_path}/package/${pack_name}.tar.gz $USER@${zk_array[i]}:${pack_path}/
ssh $USER@${zk_array[i]} "cd ${pack_path} && tar xf ${pack_name}.tar.gz -C ${zk_path} && rm -f ${pack_name}.tar.gz"
ssh $USER@${zk_array[i]} "mkdir ${zk_data_dir}"
scp ${base_path}/conf/zoo_sample.cfg $USER@${zk_array[i]}:${zk_path}/${pack_name}/conf/zoo.cfg
done
# 生成myid
id_num=0
for (( i=0; i<${#zk_array[@]}; i++ ))
do
let id_num++
ssh $USER@${zk_array[i]} "echo ${id_num} > ${zk_data_dir}/myid"
done
}
# 启动zookeeper
function start_zk () {
for (( i=0; i<${#zk_array[@]}; i++ ))
do
ssh $USER@${zk_array[i]} "${zk_path}/${pack_name}/bin/zkServer.sh restart"
done
}
# 检查zookeeper的状态
function status_zk () {
# 检查每个节点的zookeeper状态
for (( i=0; i<${#zk_array[@]}; i++ ))
do
# 利用zkServer.sh status来查看zookeeper的状态,grep -o 是只过滤Mode这个关键字,存在的情况下,只会返回Mode
local check_status=$(ssh $USER@${zk_array[i]} "${zk_path}/${pack_name}/bin/zkServer.sh status | grep -o Mode")
# 通过while死循环加上字符串比较来等待zookeeper服务的状态 [依赖java环境的服务,启动普遍偏慢]
while [[ x"${check_status}" != x"Mode" ]]
do
sleep 10
# 重新赋值来刷新变量值
local check_status=$(ssh $USER@${zk_array[i]} "${zk_path}/${pack_name}/bin/zkServer.sh status | grep -o Mode")
done
done
if [[ $? -eq 0 ]];then
echo "zookeeper cluster install success"
else
echo "zookeeper cluster install fail"
exit 2
fi
} install_java
install_zk
start_zk
status_zk

conf/config

#!/bin/bash
base_path=$(cd `dirname $0`; pwd)
# 此处的ip为zookeeper节点ip
zk_hosts='
192.168.72.107
192.168.72.108
192.168.72.109
'
# 这个是格式转换,将上面的变量转换成数组的格式
zk_array=($(printf "%q\n" ${zk_hosts}))
# 一般zookeeper的安装包名称格式是zookeeper-版本,这里只需要和安装包的一样就可以了,去掉后缀
pack_name='zookeeper-3.4.10'
# java和zookeeper安装的目录 [注意查看磁盘空间大小,以实际情况来修改]
pack_path='/approot1'
java_path="${pack_path}/jdk"
zk_path="${pack_path}/zookeeper"
zk_data_dir="${zk_path}/${pack_name}/data"
# zookeeper的默认端口是2181,根据实际需求修改
zk_clinet_port=7181

conf/zoo_template.cfg

这是zookeeper安装包里面的配置文件模板

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper-3.4.10/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

package

安装包存放的路径

|___ jdk.tar.gz
|___ zookeeper-3.4.10.tar.gz

shell脚本部署zookeeper-3.4.10 [含注释]的更多相关文章

  1. springboot打包不同环境配置与shell脚本部署

    本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作: profiles指定不同环境的配置 maven-assembly-plu ...

  2. 解决Jenkins用shell脚本部署后,Jenkins自动杀掉启衍生出来的守护进程

    Jenkins部署java项目遇到的问题: 1.Jenkins执行构建后,需要手动执行startup.sh,站点才能正常访问 产生原因: shell脚本发布时,会衍生进程,Jenkins默认会自动杀掉 ...

  3. shell脚本部署redis以及redis主从复制和redis-cluster集群

    # 关于脚本: # 使用root用户执行此脚本,提前关闭selinux: # 执行脚本之前,hostsIP内的IP修改成自己的机器IP: # hostsIp内的IP数量如果有增加或者减少,for循环的 ...

  4. shell脚本部署apache并能通过浏览器访问!

    第一步:导入httpd-2.2.17.tar包 第二步:创建一个test.sh文件(可在/root下) 第三步编写shell脚本 > 会重写文件,如果文件里面有内容会覆盖 >>这个是 ...

  5. CentOS部署多台服务器JDK(shell脚本部署)

    部署7台新服务器的jdk,数量不算多,但也不打算一台一台的部署,写了个脚本执行 [ #!/bin/bash# JDK 安装包名jdk_packge="jdk-8u162-linux-x64. ...

  6. shell脚本--部署应用到tomcat并启动tomcat

    #!/bin/sh #----------------------------------------------------------------------------- #备份 #------ ...

  7. 自动化部署-从maven到shell脚本到jenkins

    Java代码自动部署 [ ①Java代码自动部署-总结简介] 代码部署是每一个软件开发项目组都会有的一个流程,也是从开发环节到发布功能必不可少的环节.对于Java开发者来说,Java代码的发布部署也是 ...

  8. shell脚本自动部署及监控

    一.shell脚本部署nginx反向代理和三个web服务 1 对反向代理服务器进行配置 #!/bin/bash #修改用户交互页面 用户输入参数执行相应的参数 #安装epel扩展包和nginx fun ...

  9. linux 的基本操作(编写shell 脚本)

    终于到shell 脚本这章了,在以前笔者卖了好多关子说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维工作中非常非常重要.下面笔者就带你正式进入shell脚本的世界吧. 到现 ...

随机推荐

  1. HTML、CSS、Javascript、jQuery、Xml

    HTML HTML简介 Hyper Text Markup Language (超文本标记语言)简写:HTML.通过标签来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加 ...

  2. 【Java】comparable、comparator

    comparable.comparator接口 说明 Java中的对象,正常情况下,只能进行比较:== 或 != .不能使用 > 或 < 的,但是在开发场景中,我们需要对多个对象进行排序, ...

  3. dubbo系列二、dubbo请求流程记录

    目录 1.dubbo请求处理流程 1.1. consumer端处理流程 1.2.provider端处理流程 1.3.dubbo请求分析记录-图 泳道图 xmind图 2.dubbo请求核心说明 1.d ...

  4. 《剑指offer》面试题10- II. 青蛙跳台阶问题

    问题描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...

  5. leeetcode 20. 有效的括号

    20. 有效的括号 问题描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的 ...

  6. [Windows]为windows系统鼠标右键添加软件和图标

    转载自 https://blog.csdn.net/p312011150/article/details/81207059 一.打开注册表 首先打开windows的注册表,当然了,我个人倾向于 (1) ...

  7. 【一个idea】YesSql,一种在经典nosql数据库redis上实现SQL引擎的方案(我就要开历史的倒车)

    公众号链接 最高级的红酒,一定要掺上雪碧才好喝. 基于这样的品味,我设计出了一套在经典nosql数据库redis上实现SQL引擎的方法.既然redis号称nosql,而我偏要把SQL加到redis上, ...

  8. Java如何对一个对象进行深拷贝

    Java如何对一个对象进行深拷贝? Posted by Wudashan on October 14, 2018 深拷贝实现代码:https://github.com/wudashan/java-de ...

  9. jsp FN 标签库的使用方法

    1.   在jsp  导入标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="f ...

  10. 海康NVR设备上传人脸图片到人脸库

    海康开放平台--海康文档链接--海康开发包和文档下载链接 硬件:海康超脑NVR(全称Network Video Recorder,即网络视频录像机).人脸摄像机. 环境:JDK_1.8 Windows ...