源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Shell脚本实现自动安装zookeeper

  • 时间:2022-02-09 11:48 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Shell脚本实现自动安装zookeeper
A:本脚本运行的机器,Linux RHEL6 B,C,D,...:待安装zookeeper cluster的机器, Linux RHEL6 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装zk的机器B,C,D,...上,然后就可以在A上运行本脚本:
[u]复制代码[/u] 代码如下:
$ ./install_zookeeper 
前提: B, C, D机器必须配置好repo,本脚本使用的是cdh5的repo, 下面的内容保存到:/etc/yum.repos.d/cloudera-cdh5.repo:
[u]复制代码[/u] 代码如下:
[cloudera-cdh5]  # Packages for Cloudera's Distribution for Hadoop, Version 5, on RedHat or CentOS 6 x86_64  name=Cloudera's Distribution for Hadoop, Version 5  baseurl=http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5/  gpgkey = http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera      gpgcheck = 1  enabled  = 1 
自动安装脚本将自动在B,C,D机器上安装好zookeeper, 配置好相关配置文件。但没有启动它们。支持1,3,5,7个服务器。
[u]复制代码[/u] 代码如下:
#!/bin/bash  #  # @file  #   install_zookeeper.sh  #  # @date  #   2014-12-21  #  # @author  #   cheungmine@hgdb.net  #  # @version  #   0.0.1pre  #  # @usage  #   ./install_zookeeper.sh  ################################################################################    #***********************************************************  # split_to_array  #   split string into array  #***********************************************************  function split_to_array() {      OLD_IFS="$IFS"      IFS="$2"      array=($1)      IFS="$OLD_IFS"  }      #***********************************************************  # install_zookeeper  #   install zookeeper on 1, 3 or 5 servers  #  # Parameters:  #   clientPort - the port at which the clients will connect to  #   servers - varying arguments: 1, 3, 5, up to 7  #     "zkServer:serverPort:appPort"  #     zkServer - ipaddr of zookeeper server  #     serverPort - communication port for zookeeper servers  #     appPort - communication port between zookeeper with other applications  #  # Example:  #   1) install_zookeeper 2181 zk1 zk2 zk3  #   2) install_zookeeper 2181 192.168.122.201 192.168.122.202 192.168.122.203  #   3) install_zookeeper "2181" "192.168.122.201:2888:3888" "192.168.122.202:2888:3888" "192.168.122.203:2888:3888"  #   4) install_zookeeper "2181:/var/lib/zookeeper" "192.168.122.201:2888:3888" "192.168.122.202:2888:3888" "192.168.122.203:2888:3888"  #***********************************************************  ERR_INVALID_ZK_SERVERS=1001    function install_zookeeper() {      echo -e "<INFO> install zookeeper on cluster ..."      #chk_root        local ret clientPort dataDir len i ZOO_CFG server serverPort appPort destip destlogin        serverPort=2888      appPort=3888        # parse the first argument      split_to_array $1 ":"        # the port at which the clients will connect      clientPort=${array[0]}        # the directory where the snapshot is stored      dataDir="/var/lib/zookeeper"      if [ ${#array[*]} -eq 2 ]; then          dataDir=${array[1]}      fi        echo -e "<INFO> clientPort: $clientPort"      echo -e "<INFO> dataDir: $dataDir"        # zookeeper configure file      ZOO_CFG="/usr/lib/zookeeper/conf/zoo.cfg"        # get list of servers: args      shift      local argc=$#        if [ $argc -eq 1 -o $argc -eq 3 -o $argc -eq 5 -o $argc -eq 7 ]; then          echo -e "<INFO> zookeeper servers in cluster: [$argc]"      else          echo -e "<ERROR> invalid zookeeper servers: [$argc]"          exit $ERR_INVALID_ZK_SERVERS;      fi        local argv="$@"        OLD_IFS="$IFS"      IFS=" "      local args=($argv)      IFS="$OLD_IFS"        # array variable      local ipaddrs=()      local servers=()        local sid=0      for a in ${args[@]}      do          let sid++            # check if server format is either of:          #   serverIP          # or:          #   serverIP:serverPort:appPort          split_to_array $a ":"          serverIP=${array[0]}            if [ ${#array[*]} -ne 3 ]; then              a="$serverIP:$serverPort:$appPort";          fi            local server="server.$sid=$a"          servers[sid-1]=$server          echo $server            ipaddrs[sid-1]=$serverIP      done        # output array to one line string: echo ${servers[@]}      # get length of array      len=${#servers[*]}      i=0      while [ $i -lt $len ]      do          let sid=i+1          destip=${ipaddrs[$i]}          destlogin=root@$destip          echo -e "<INFO> configuring server.$sid: $destip ...\c"            ret=`ssh $destlogin "yum install -y zookeeper zookeeper-server && service zookeeper-server init --myid=$sid"`            ret=`ssh $destlogin "echo '#!{{install_zookeeper@hgdb.net==>' >> $ZOO_CFG"`            for s in ${servers[*]}          do              ret=`ssh $destlogin "echo '$s' >> $ZOO_CFG"`          done            ret=`ssh $destlogin "echo '#!<==install_zookeeper@hgdb.net}}' >> $ZOO_CFG"`            echo -e "OK."            let i++      done        echo "<INFO> zookeeper cluster installation completed successfully!"  }    #=======================================================================  install_zookeeper "2181" "192.168.122.201" "192.168.122.202" "192.168.122.203" 
根据配置修改最后一行:
[u]复制代码[/u] 代码如下:
install_zookeeper "2181" "192.168.122.201" "192.168.122.202" "192.168.122.203"
注意:需要把zk-cluster的每台机器上的防火墙停掉,再启动zookeeper:
[u]复制代码[/u] 代码如下:
$ /usr/lib/zookeeper/bin/zkServer.sh start-foreground
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部