linux echo -e 脚本安装,Shell脚本实现自动安装zookeeper

本文介绍了一款用于一键部署ZooKeeper集群的自动化脚本。该脚本能够在指定的服务器上安装并配置ZooKeeper服务,支持1、3、5或7个服务器节点的集群部署,并自动配置必要的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 " 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值