Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 操作系统 / Linux / RHEL自动安装Zookeeper的shell脚本

A:本脚本运行的机器,Linux RHEL6B,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=1001function 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--------------------------------------分割线 --------------------------------------ZooKeeper集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm使用ZooKeeper实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm分布式服务框架 ZooKeeper -- 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htmZooKeeper集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htmZooKeeper服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htmZooKeeper集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm--------------------------------------分割线 --------------------------------------本文永久更新链接地址