• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Shell脚本实现自动安装zookeeper

    A:本脚本运行的机器,Linux RHEL6
    B,C,D,...:待安装zookeeper cluster的机器, Linux RHEL6

    首先在脚本运行的机器A上确定可以ssh无密码登录到待安装zk的机器B,C,D,...上,然后就可以在A上运行本脚本:

    复制代码 代码如下:

    $ ./install_zookeeper 

    前提:

    B, C, D机器必须配置好repo,本脚本使用的是cdh5的repo, 下面的内容保存到:/etc/yum.repos.d/cloudera-cdh5.repo:

    复制代码 代码如下:

    [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个服务器。

    复制代码 代码如下:

    #!/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" 

    根据配置修改最后一行:

    复制代码 代码如下:

    install_zookeeper "2181" "192.168.122.201" "192.168.122.202" "192.168.122.203"

    注意:需要把zk-cluster的每台机器上的防火墙停掉,再启动zookeeper:

    复制代码 代码如下:

    $ /usr/lib/zookeeper/bin/zkServer.sh start-foreground

    您可能感兴趣的文章:
    • centos7下搭建ZooKeeper3.4中间件常用命令小结
    • 基于Zookeeper的使用详解
    • 理解zookeeper选举机制
    • 为zookeeper配置相应的acl权限
    • 深入浅析ZooKeeper的工作原理
    • Docker搭建Zookeeper&Kafka集群的实现
    • centos6使用docker部署redis主从数据库操作示例
    • centos6使用docker部署kafka项目的方法分析
    • CentOS8上用Docker部署开源项目Tcloud的教程
    • centos6使用docker部署zookeeper操作示例
    上一篇:Shell脚本实现在Linux系统中自动安装JDK
    下一篇:Shell定时删除指定时间之前的文件
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Shell脚本实现自动安装zookeeper Shell,脚本,实现,自动,安装,