RHEL自動安裝zookeeper的shell指令碼
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
#!/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