RHEL自動安裝zookeeper的shell指令碼,rhelzookeeper

來源:互聯網
上載者:User

RHEL自動安裝zookeeper的shell指令碼,rhelzookeeper
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 RedHator CentOS 6 x86_64name=Cloudera's Distribution for Hadoop, Version 5baseurl=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 = 1enabled  = 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


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.