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操作符(05-结合操作)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51656736 本文出自:[openXu的博客] 目录: CombineLatest Join ...
- android解析网络json数据(1)
1.首先获得url,传入URL类,利用URL的openconnection方法,获得URLConnection,去的输入流,进行操作,具体代码如下: public class NetConnectio ...
- Spring开发环境搭建教程
Spring开发环境搭建 JDK7以上版本 eclispe for j2ee 4.0以上版本 Spring frameWorks 3.0以上版本 至于前两个我们就不介绍,直接百度就可以了,对于Spri ...
- 剑指Offer——简述堆和栈的区别
剑指Offer--简述堆和栈的区别 堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建: Java虚拟机规范描述:所有的对象实例及数组都要在堆上分配: Java堆可以处于物理 ...
- MySQL 存储过程探秘
关于存储过程的优点,本文不再阐述.这里只是对创建存储过程时可能遇到的问题做一下简单的分析. 必备基础 这里说的基础,是相关于如何创建一个存储过程的. DELIMITER:分隔符,定界符. 作用就是:作 ...
- 【并发编程】AIDL关键字
oneway Oneway interfaces In early betas, the Android IPC was strictly synchronous. This means that s ...
- SYBASE的select into与insert into使用和区别
对于表的部分或全部字段的复制,Sybase数据库提供了两种方式:select into和insert into. select into: 语法:select value1, value2, val ...
- 【安卓中的缓存策略系列】安卓缓存策略之综合应用ImageLoader实现照片墙的效果
在前面的[安卓缓存策略系列]安卓缓存之内存缓存LruCache和[安卓缓存策略系列]安卓缓存策略之磁盘缓存DiskLruCache这两篇博客中已经将安卓中的缓存策略的理论知识进行过详细讲解,还没看过这 ...
- Android简易实战教程--第五话《开发一键锁屏应用》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...
- 学习笔记-JS公开课二
typeof运算符的使用 JS中内置对象Array/Date/Math/String可以看成引用类型 做如下测试: <scripttype="text/javascript" ...