Shell脚本实现自动安装zookeeper

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

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 Clouderas Distribution for Hadoop, Version 5, on RedHat or CentOS 6 x86_64

name=Clouderas 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 ” 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 ” clientPort: $clientPort” 

    echo -e ” 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 ” zookeeper servers in cluster: [$argc]” 

    else 

echo -e ” 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 “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 “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

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容