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 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
RHEL自动安装zookeeper的shell脚本的更多相关文章
- Linux自动安装JDK的shell脚本
Linux自动安装JDK的shell脚本 A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在 ...
- 写个自动安装JDK的shell脚本
#!/bin/bash ################################################# # # INSTALL JDK AUTOMATICALLY # # auth ...
- [PY3]——环境配置(1)——pyenv | pip | ipython | jupyter(含安装pyenv环境shell脚本)
1.关于pyenv (1)pyenv是一个开源的.shell脚本编写的工具:Simple Python version management (2)为什么使用pyenv:当多个项目同时在开发与维护时, ...
- 写个自动下载安装Ant的shell脚本【二】
#!/bin/bash ####################################################### file name: install_ant.sh# # fun ...
- 写个自动下载安装Ant的shell脚本【一】
#!/bin/bash ###################################################### # file name: install_ant.sh # # f ...
- 分布式监控系统Zabbix-3.0.3-完整安装记录 - 添加shell脚本监控
对公司的jira访问状态进行监控,当访问状态返回值是200的时候,脚本执行结果为1:其他访问状态返回值,脚本执行结果是0.然后将该脚本放在zabbix进行监控,当非200状态时发出报警.jira访问状 ...
- zabbix系列(九)zabbix3.0实现自动触发zabbix-agent端shell脚本任务
zabbix实现自动触发远程脚本执行命令 Zabbix触发器(trigger)达到阀值后会有动作(action)执行:发送告警信息或执行远程命令 环境 Server:基于centos6.5 final ...
- centos 下安装redis 通过shell脚本
#! /bin/bash echo -e "开始安装redis服务\n" download_url=http://download.redis.io/releases/redi ...
- 【转】CentOS 6.3 X64自动安装OpenERP 7.0脚本
原文地址:OpenERP 7.0安装与配置 #!/bin/bash -e # Modified script from Carlos E. Fonseca Zorrilla # . Add the t ...
随机推荐
- RxJava操作符(09-算术/聚合操作&连接操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51692493 本文出自:[openXu的博客] 目录: 算术聚合 Count Concat ...
- Python descriptor
class A: def __init__(self, name): self.name = name def __get__(self, ins, cls): print('call get') i ...
- 不规则递归转换为while,留底
我发现当参数并不太多时,从性能的角度来看,没必要用一个class来保存参数(虽然看起来更加生动形象),直接用最简单的元组就可以了. from hanoi import * # example tree ...
- 快速索引 (对View的自定义)
快速索引 (对View的自定义) 快速索引应用场景: 微信好友列表, 联系人通讯录, 应用管理, 文件管理等. 快速索引7步曲: *1. A-Z索引的绘制. * 2. 处理Touch事件. * 3. ...
- activiti源码编译
个小时,大家安装的时候一定要耐心. 最终编译之后的效果部分如下图所示: 因为我这里有些xml文件没有去除验证,所以有红色的警告,不过也不影响使用. 下面看一下下载之后文件的变化如下图所示: 我们导入主 ...
- [tornado]使用webscoket的使用总是403错误
使用的tornado版本为4.0+ 后台: PS D:\CodeHouse\tornado\websocket> python .\ws_app.py WARNING:tornado.acces ...
- Android的RadioButton和checkBox的用法-android学习之旅(十九)
RadioButton和checkBox简介 单选按钮(RadioButton)和复选框(CheckBox)都继承了Button,因此属性的设置和Button差不多,只是加了一个android:che ...
- 简单RPC实现之Netty实现
所谓RPC就是远程方法调用(Remote Process Call ),简单的来说就是通过MQ,TCP,HTTP或者自己写的网络协议来传输我要调用对方的什么接口,对方处理之后再把结果返回给我.就这么 ...
- Activity简单几步支持向右滑动返回
向右滑动返回,对于屏幕过大的手机来说,在单手操作时,是一个不错的用户体验,用户不必再费力的或者用另一个手去点击屏幕左上角的返回按钮或者,手机右下角的返回按钮,轻轻向右滑动屏幕即可返回上一页,这个功能如 ...
- 打Patch实践
一.找到相应PATCH 确认系统已安装模块版本. SELECTapp.application_short_name, app.application_name, pi.patch_level FR ...