RHEL自动安装zookeeper的shell脚本

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

RHEL自动安装zookeeper的shell脚本的更多相关文章

  1. Linux自动安装JDK的shell脚本

    Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...

  2. 写个自动安装JDK的shell脚本

    #!/bin/bash ################################################# # # INSTALL JDK AUTOMATICALLY # # auth ...

  3. [PY3]——环境配置(1)——pyenv | pip | ipython | jupyter(含安装pyenv环境shell脚本)

    1.关于pyenv (1)pyenv是一个开源的.shell脚本编写的工具:Simple Python version management (2)为什么使用pyenv:当多个项目同时在开发与维护时, ...

  4. 写个自动下载安装Ant的shell脚本【二】

    #!/bin/bash ####################################################### file name: install_ant.sh# # fun ...

  5. 写个自动下载安装Ant的shell脚本【一】

    #!/bin/bash ###################################################### # file name: install_ant.sh # # f ...

  6. 分布式监控系统Zabbix-3.0.3-完整安装记录 - 添加shell脚本监控

    对公司的jira访问状态进行监控,当访问状态返回值是200的时候,脚本执行结果为1:其他访问状态返回值,脚本执行结果是0.然后将该脚本放在zabbix进行监控,当非200状态时发出报警.jira访问状 ...

  7. zabbix系列(九)zabbix3.0实现自动触发zabbix-agent端shell脚本任务

    zabbix实现自动触发远程脚本执行命令 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令 环境 Server:基于centos6.5 final ...

  8. centos 下安装redis 通过shell脚本

      #! /bin/bash echo -e "开始安装redis服务\n" download_url=http://download.redis.io/releases/redi ...

  9. 【转】CentOS 6.3 X64自动安装OpenERP 7.0脚本

    原文地址:OpenERP 7.0安装与配置 #!/bin/bash -e # Modified script from Carlos E. Fonseca Zorrilla # . Add the t ...

随机推荐

  1. 用Codility测试你的编码能力

    没有宏观的架构设计,没有特定的框架语言.在Codility提出的一些小问题上,用最纯粹的方式测试你最基本的编码能力. Codility第一课:算法复杂度 各种算法书的开篇大多是算法分析,而复杂度(co ...

  2. 详解EBS接口开发之库存事务处理-物料批次导入

    库存事务处理-物料批次导入 --系统批次表 SELECT * FROM MTL_LOT_NUMBERS T; --API创建批次 inv_lot_api_pub.create_inv_lot(x_re ...

  3. Android系统的安全设计与架构

    Android系统的安全设计与架构 一.安全策略 1.Android 的总体架构由5个主要层次上的组件构成,这5层是:Android应用层. Android框架层.Dalvik虚拟机层.用户空间原生代 ...

  4. Xcode7.3.1中SKAudioNode在Scene转换后无声的问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在新的Xcode中之前可以正常运行的SKAudioNode代码 ...

  5. Xcode的playground中对于SpriteKit物理对象的更新为何无效

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了便于SpriteKit中物理行为的调试,我们可以借助于Xc ...

  6. make、make clean、make install、make uninstall、make dist、make distcheck和make distclean

    Makefile在符合GNU Makefiel惯例的Makefile中,包含了一些基本的预先定义的操作:make根据Makefile编译源代码,连接,生成目标文件,可执行文件.make clean清除 ...

  7. ORACLE数据库学习之SQL性能优化详解

                                                                                    Oracle  sql 性能优化调整 ...

  8. NDK在windows下的开发环境搭建及开发过程

    在Android应用的开发工程中,不管是游戏还是普通应用,都时常会用到.so即动态链接库,关于.so是什么玩意儿,有什么好处,这个大家可以在网上查一下,本人不做过多解释..so本是linux下的文件类 ...

  9. 【移动开发】startForeground()让服务保持前台级别

    最近在使用android 4.1系统的时候,发现在手机休眠一段时间后(1-2小时),后台运行的服务被强行kill掉,有可能是系统回收内存的一种机制,要想避免这种情况可以通过startForegroun ...

  10. Cocos2D两个方法的重构一例

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在RPG游戏项目的GameSpace类中原来有一个方法: -( ...