前提: 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
#*********************************************************** # 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
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"