zk_install.sh

  1. #!/bin/bash
  2. base_path=$(cd `dirname $0`; pwd)
  3. source ${base_path}/conf/config
  4. function install_java () {
  5. for (( i=0; i<${#zk_array[@]}; i++ ))
  6. do
  7. # 判断需要安装zookeeper的节点是否已有java环境 [zookeeper的启动依赖java环境]
  8. # 返回非零状态则表示java环境不存在,并安装java环境
  9. # $USER 为环境变量,输出的值为当前用户的名称 [建议使用普通用户]
  10. ssh $USER@${zk_array[i]} 'java -version' &> /dev/null
  11. if [[ "$?" -ne '0' ]];then
  12. ssh $USER@${zk_array[i]} "mkdir -p ${java_path}"
  13. # 如果准备的java安装包名称不是 jdk.tar.gz ,可以重命名成 jdk.tar.gz ,或者修改 jdk.tar.gz 为当前安装包的名称
  14. scp ${base_path}/package/jdk.tar.gz $USER@${zk_array[i]}:${pack_path}/
  15. # 如果上一行有修改,此处的 jdk.tar.gz 也需要修改
  16. ssh $USER@${zk_array[i]} "cd ${pack_path} && tar xf jdk.tar.gz -C ${java_path} && rm -f jdk.tar.gz"
  17. ssh $USER@${zk_array[i]} "echo \"export JAVA_HOME=${java_path}\" >> $HOME/.bashrc"
  18. ssh $USER@${zk_array[i]} "echo 'export PATH=\$PATH:\$JAVA_HOME/bin' >> $HOME/.bashrc"
  19. ssh $USER@${zk_array[i]} "echo 'source /etc/profile' >> $HOME/.bashrc"
  20. fi
  21. done
  22. }
  23. function install_zk () {
  24. # 将 conf 目录下的 zoo_template.cfg 文件重定向成 zoo_sample.cfg 文件,保持配置文件的干净
  25. # zoo_template.cfg 文件需要提前准备好
  26. cat ${base_path}/conf/zoo_template.cfg > ${base_path}/conf/zoo_sample.cfg
  27. # 定义一个变量conut,赋值为0,因为zookeeper是需要用到myid的,至于为什么不从1开始,程序员都懂的
  28. count=0
  29. for (( i=0; i<${#zk_array[@]}; i++ ))
  30. do
  31. # 每次循环,count的值则会加1
  32. let count++
  33. echo "server.${count}=${zk_array[i]}:2888:3888" >> ${base_path}/conf/zoo_sample.cfg
  34. done
  35. # 根据 conf 目录下的 config 文件来修改 zoo_sample.cfg 文件,以此来生成zookeeper的配置文件
  36. # 这里只修改了端口和数据目录,其他的可以自行使用增加sed命令即可
  37. sed -i "/clientPort/s/=.*/=${zk_clinet_port}/" ${base_path}/conf/zoo_sample.cfg
  38. sed -i "/dataDir/s#=.*#=${zk_data_dir}#" ${base_path}/conf/zoo_sample.cfg
  39. # 开始安装zookeeper
  40. for (( i=0; i<${#zk_array[@]}; i++ ))
  41. do
  42. ssh $USER@${zk_array[i]} "mkdir ${zk_path}"
  43. scp ${base_path}/package/${pack_name}.tar.gz $USER@${zk_array[i]}:${pack_path}/
  44. ssh $USER@${zk_array[i]} "cd ${pack_path} && tar xf ${pack_name}.tar.gz -C ${zk_path} && rm -f ${pack_name}.tar.gz"
  45. ssh $USER@${zk_array[i]} "mkdir ${zk_data_dir}"
  46. scp ${base_path}/conf/zoo_sample.cfg $USER@${zk_array[i]}:${zk_path}/${pack_name}/conf/zoo.cfg
  47. done
  48. # 生成myid
  49. id_num=0
  50. for (( i=0; i<${#zk_array[@]}; i++ ))
  51. do
  52. let id_num++
  53. ssh $USER@${zk_array[i]} "echo ${id_num} > ${zk_data_dir}/myid"
  54. done
  55. }
  56. # 启动zookeeper
  57. function start_zk () {
  58. for (( i=0; i<${#zk_array[@]}; i++ ))
  59. do
  60. ssh $USER@${zk_array[i]} "${zk_path}/${pack_name}/bin/zkServer.sh restart"
  61. done
  62. }
  63. # 检查zookeeper的状态
  64. function status_zk () {
  65. # 检查每个节点的zookeeper状态
  66. for (( i=0; i<${#zk_array[@]}; i++ ))
  67. do
  68. # 利用zkServer.sh status来查看zookeeper的状态,grep -o 是只过滤Mode这个关键字,存在的情况下,只会返回Mode
  69. local check_status=$(ssh $USER@${zk_array[i]} "${zk_path}/${pack_name}/bin/zkServer.sh status | grep -o Mode")
  70. # 通过while死循环加上字符串比较来等待zookeeper服务的状态 [依赖java环境的服务,启动普遍偏慢]
  71. while [[ x"${check_status}" != x"Mode" ]]
  72. do
  73. sleep 10
  74. # 重新赋值来刷新变量值
  75. local check_status=$(ssh $USER@${zk_array[i]} "${zk_path}/${pack_name}/bin/zkServer.sh status | grep -o Mode")
  76. done
  77. done
  78. if [[ $? -eq 0 ]];then
  79. echo "zookeeper cluster install success"
  80. else
  81. echo "zookeeper cluster install fail"
  82. exit 2
  83. fi
  84. }
  85. install_java
  86. install_zk
  87. start_zk
  88. status_zk

conf/config

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

conf/zoo_template.cfg

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

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

package

安装包存放的路径

  1. |___ jdk.tar.gz
  2. |___ 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. 【Azure 应用服务】一个 App Service 同时部署运行两个及多个 Java 应用程序(Jar包)

    问题描述 如何在一个AppService下同时部署运行多个Java 应用程序呢? 问题解答 因为App Service的默认根目录为 wwwroot.如果需要运行多个Java 应用程序,需要在 www ...

  2. FastDFS文件的上传和下载

    一.FastDFS概述: FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.下载)等,解决了大容量存储和负载均衡的问题,高度追求高性能 ...

  3. Abp vnext EFCore 实现动态上下文DbSet踩坑记

    背景 我们在用EFCore框架操作数据库的时候,我们会遇到在 xxDbContext 中要写大量的上下文 DbSet<>; 那我们表少还可以接受,表多的时候每张表都要写一个DbSet, 大 ...

  4. XXE题型记录

    XXE题型记录 [CSAWQual 2019]Web_Unagi 题解 打开题目,点开upload中的例子发现是上传xml文件 根据about中的提示Flag is located at /flag, ...

  5. windows10双系统删除linux

    问题 在这里删除后会发现有残留一个引导区,几百m(下图已经删除完),而且启动会进linux引导,然后必须f12进入选择启动项才可以启动windows 解决方法 使用删除引导就可以了 再使用傲梅分区助手 ...

  6. Chrome本地跨域请求设置,实现HTML模板页

    按照需求,公司现在需要通过第三方的API反馈的数据,进行在本地就可以打开的静态页面程序(完全脱离IIS等服务器).为了更好的维护项目,需要实现静态HTML引入HTML模板,完成ASP.NET模板页的类 ...

  7. Sentry 开发者贡献指南 - 浏览器 SDK 集成测试

    Sentry 的浏览器 SDK 的集成测试在内部使用 Playwright.这些测试在 Chromium.Firefox 和 Webkit 的最新稳定版本上运行. https://playwright ...

  8. covid19数据挖掘与可视化实验

    数据说明: 来源: https://www.kesci.com/mw/project/5e68db4acdf64e002c97b413/dataset (ncov) 日期:从2020年1月21日开始 ...

  9. vue项目再HBuilder打包成app后,有ui模块未添加的弹窗

    直接在打包后的mainifst.json的文件夹中加入标注部分,我是这样解决了的

  10. Git使用简单教程,从建库到远程操作

    本地库初始化 找到项目文件->右键git bash->git init 设置签名 形式: 用户名 邮箱地址 作用: 区分不同开发人员身份 注意:这里设置的签名和登录的远程库的账号密码没有任 ...