手机
当前位置:查字典教程网 >脚本专栏 >linuxshell >Shell脚本实现自动安装zookeeper
Shell脚本实现自动安装zookeeper
摘要:A:本脚本运行的机器,LinuxRHEL6B,C,D,...:待安装zookeepercluster的机器,LinuxRHEL6首先在脚本运...

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

【Shell脚本实现自动安装zookeeper】相关文章:

Shell脚本模拟多线程功能分享

Shell脚本实现查杀子进程、僵尸进程

Shell脚本实现根据端口号kill相应进程功能

Shell脚本实现的猜数字小游戏

Shell脚本实现自动发送邮件的例子

Shell脚本for循环语句简明教程

Shell脚本实现删除一年前文件功能分享

Shell脚本实现自动修改IP、主机名等功能分享

Linux下使用Shell脚本实现ftp的自动上传下载的代码小结

shell脚本实现拷贝大文件显示百分比的代码分享

精品推荐
分类导航