Shell脚本实现自动安装zookeeper

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

(0)

相关推荐

  • 浅谈Storm在zookeeper上的目录结构

    Storm的所有的状态信息都保存在Zookeeper里面,nimbus通过在zookeeper上面写状态信息来分配任务: 使得nimbus可以监控整个storm集群的状态,从而可以重启一些挂掉的task. ZooKeeper使得整个storm集群十分的健壮--任何一台工作机器挂掉都没有关系,只要重启然后从zookeeper上面重新获取状态信息就可以了.那Storm在zookeeper里面存储了哪些状态呢?在James Xu的文章中有所涉及,但是该文章讲述的已经过时了.本文主要介绍Storm在Zo

  • java使用zookeeper实现的分布式锁示例

    使用zookeeper实现的分布式锁 分布式锁,实现了Lock接口 复制代码 代码如下: package com.concurrent; import java.io.IOException;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.TimeU

  • 使用curator实现zookeeper锁服务的示例分享

    复制代码 代码如下: import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit; import com.netflix.curator.RetryPolicy;import com.netflix.curator.framework.

  • Shell脚本实现自动安装zookeeper

    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: 复

  • shell脚本中一键部署zookeeper集群服务的方法

    目录 一键部署zookeeper集群服务 1. 编写脚本情况分析 2. 脚本代码部分 3. 实验测试部分 一键部署zookeeper集群服务 1. 编写脚本情况分析 Zookeeper是一个开源的分布式的,为分布式框架提供协调服务的Apache项目. Zookeeper适合安装奇数台服务器. 脚本完成后将会产生:一个领导者(Leader) ,多个跟随者(Follower) 组成的集群. 此脚本默认的安装包为:apache-zookeeper-3.5.7-bin.tar.gz,如果使用其他版本,自

  • 解决Centos7下crontab+shell脚本定期自动删除文件问题

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任务 1.创建shell文件 [root@zabbix script]# vim backup_sql_clean.sh #!/bin/sh find /data1/backup/KDKDA\$AGKDPAYKT/XNAKSD/FXUIJ -mtime +10 -name "*.bak" -

  • Python设置在shell脚本中自动补全功能的方法

    本篇博客将会简短的介绍,如何在ubuntu中设置python自动补全功能. 需求:由于python中的内建函数较多,我们在百纳乘时,可能记不清函数的名字,同时自动补全功能,加快了我们开发的效率. 方法以及要求:设置过程中需要看客具备一点ubuntu的基本知识,当然不懂也没有关系,跟着一步一步走,不懂得可以学习一下ubuntu的文件系统. 具体步骤 1.首先创建一个文件:~/.pythonrc 在ubuntu中创建文件的命令为: sudo gedit ~/.pythonrc #sudo表示使用管理

  • Shell脚本实现自动输入密码登录服务器

    使用Linux的程序员对输入密码这个举动一定不陌生,在Linux下对用户有严格的权限限制,干很多事情越过了权限就得输入密码,比如使用超级用户执行命令,又比如ftp.ssh连接远程主机等等,如下图: 那么问题来了,在脚本自动化执行的时候需要输入密码怎么办?比如你的脚本里有一条scp语句,总不能在脚本执行到这一句时手动输入密码吧. 针对于ssh或scp命令,可能有人会回答是建立信任关系,关于建立ssh信任关系的方法请自行百度Google,只需要两行简单的命令即可搞定,但这并不是常规的解决方案,如果是

  • Shell脚本实现自动修改IP、主机名等功能分享

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名在维护和管理方面也比较方便.如下脚本用途为:修改ip和主机名等相关信息,可以根据实际需求修改,举一反三! 复制代码 代码如下: #!/bin/sh  #auto Change ip netmask gateway scripts  #wugk 2012-12-17  cat <<EOF +++++

  • Shell脚本实现自动修改IP地址

    作为一名Linux SA,日常运维中很多地方都会用到脚本,而服务器的ip一般采用静态ip或者MAC绑定,当然后者比较操作起来相对繁琐,而前者我们可以设置主机名.ip信息.网关等配置.修改成特定的主机名在维护和管理方面也比较方便.如下脚本用途为:修改ip和主机名等相关信息,可以根据实际需求修改,举一反三! #!/bin/sh #auto Change ip netmask gateway scripts #wugk 2012-12-17 cat << EOF ++++++++自动修改ip和主机名

  • Shell脚本实现自动检测修改最快的Ubuntu软件源

    每次装好Ubuntu,对于大多数用户来说,首先要做的事就是手动修改/etc/apt/sources.list文件,将里面的官方软件源地址更换为自己学校或者公司的软件源.当我们更换一个工作环境后,可能伴随着又要替换旧的软件源地址. 笔者觉得这样每次手动更改软件源是一件及其麻烦重复的劳动,于是编写了一个自动更新最快软件源的脚本,从此一劳永逸. 原理 最直观的想法就是:对各个软件源进行测速,选出最快的那个,之后将其替换为新的软件源. 那么如何对各个软件源测速呢?有两种方法: 一.用ping命令 测量其

  • Shell脚本实现自动发送邮件的例子

    1.编辑用户Home目录下的.muttrc文件,设置发信环境. 复制代码 代码如下: # cat /root/.muttrc set envelope_from=yes set from=owinux@sina.cn set realname="Owinux" set use_from=yes set rfc2047_parameters=yes set charset="utf-8" 2.发信脚本 复制代码 代码如下: # cat automail.sh #!/b

  • 用shell脚本实现自动切换内网和外网实现高可用

    首先说明下我们的配置文件,都是类似格式的,假如内网是192.168.0.3,外网是123.123.123.123,配置文件如下: $db['salver']['hostname'] = '192.168.0.3:3306';//$db['salver']['hostname'] = '123.123.123.123:3306'; 这个时候就是外网是注释的状态.走的是内网.说下思路,就是一个配置文件,复制出来2分放到别的地方,这两份一个里面设置的是内网,一个里面设置的是外网,如果内网不通的情况下,

随机推荐