您的位置:首页 > 运维架构 > Shell

RHEL自动安装zookeeper的shell脚本

2014-12-21 11:48 721 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: