Shell实战之一键自动部署Zookeeper-yellowcong

14 篇文章 7 订阅
11 篇文章 0 订阅

自动部署zookeeper其实也不难,只是考虑的问题会比较多一点,需要考虑到架构的设计等情况,所以对于一键部署来说,需要确定的是规划的存储路径,服务器ip路径等。我是单机的,所以早就规划好了。PS(脚本是我自己写得,我也没学几天Shell,有很多纰漏,请包含啊) ,大家可以直接下载执行,下载地址,http://yellowcong.qiniudn.com/install.sh,具体使用方法,可以查看本文最后一节

本文是先从各个方面简单的讲解如何实现的自动 部署,然后在最后的部分做了整合,提供了写好的脚本,供大家测试安装。

修改zoo.cfg配置

通过sed来修改zoo.cfg的配置,这些地方,大家 写脚本,是可以 借鉴的

#修改原始路径
sed -i 's#/tmp/zookeeper#/tmp/zookeeper1/data#' test.cfg

#添加log日志
sed -i '/^dataDir/a\dataLogDir=\/tmp\/zookeeper1\/logs' test.cfg

#修改端口
sed -i 's/2181/2182/g' test.cfg

#追加服务配置
sed -i '$a \server.1=127.0.0.1:2222:2225 \
    server.2=127.0.0.1:3333:3335 \
    server.3=127.0.0.1:4444:4445 \
    ' test.cfg

下载与安装脚本

下载文件并解压到文件夹目录下, 这个地方注意wget 和tar的命令,是如何解压文件到指定的目录的

#!/bin/bash
#下载的zookeeper版本
ZOOKEEPER=zookeeper-3.4.10.tar.gz
downloadFile(){

    echo "开始下载文件"
    echo "默认指定下载目录为/usr/local/"

    read -p "指定下载的目录:" name
    path="/usr/local"
        if [ "$name" == "" ]
        then
                echo "设置为默认路径:/usr/local/"
        elif $(test -d "$name")
        then
                #echo $name
        path=$name
    fi

    out_file_path=$path/zookeeper

    echo "当保存载目录是"$out_file_path

    mkdir -p $out_file_path    

    #wget -O $out_file_path/$ZOOKEEPER http://yellowcong.qiniudn.com/zookeeper-3.4.10.tar.gz 

    echo "下载地址"$out_file_path/$ZOOKEEPER
    #创建文件夹
    echo "创建文件夹"$out_file_path/zookeeper1
    echo "创建文件夹"$out_file_path/zookeeper4
    echo "创建文件夹"$out_file_path/zookeeper3

    #清空以前解压的
    rm -rf  $out_file_path/zookeeper1
    rm -rf  $out_file_path/zookeeper4
    rm -rf  $out_file_path/zookeeper3

    #创建文件夹
    mkdir -p $out_file_path/zookeeper1
    mkdir -p $out_file_path/zookeeper4 
    mkdir -p $out_file_path/zookeeper3

    #解压文件
    echo "解压文件"

    #解压到指定的文件夹
    tar -zxvf $out_file_path/$ZOOKEEPER -C $out_file_path/zookeeper1/
    cp -rf $out_file_path/zookeeper1/* $out_file_path/zookeeper4/
    cp -rf $out_file_path/zookeeper1/* $out_file_path/zookeeper3/

    #配置集群
    sh /usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/conf/test.sh $out_file_path/zookeeper1/zookeeper-3.4.10/conf/zoo_sample.cfg zookeeper1 2182
    sh /usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/conf/test.sh $out_file_path/zookeeper4/zookeeper-3.4.10/conf/zoo_sample.cfg zookeeper4 2183
    sh /usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/conf/test.sh $out_file_path/zookeeper3/zookeeper-3.4.10/conf/zoo_sample.cfg zookeeper3 2184


    #配置文件夹

    mkdir -p /tmp/zookeeper1/data
    mkdir -p /tmp/zookeeper1/logs
    echo 1 > /tmp/zookeeper1/data/myid

    mkdir -p /tmp/zookeeper4/data
    mkdir -p /tmp/zookeeper4/logs
    echo 2 > /tmp/zookeeper4/data/myid


    mkdir -p /tmp/zookeeper3/data
    mkdir -p /tmp/zookeeper3/logs
    echo 3 > /tmp/zookeeper3/data/myid


    sh $out_file_path/zookeeper4/zookeeper-3.4.10/bin/zkServer.sh start 
    sh $out_file_path/zookeeper3/zookeeper-3.4.10/bin/zkServer.sh start
    sh $out_file_path/zookeeper1/zookeeper-3.4.10/bin/zkServer.sh start


    sh $out_file_path/zookeeper4/zookeeper-3.4.10/bin/zkServer.sh status
    sh $out_file_path/zookeeper3/zookeeper-3.4.10/bin/zkServer.sh status
    sh $out_file_path/zookeeper1/zookeeper-3.4.10/bin/zkServer.sh status

}
downloadFile

变量设置

#!/bin/bash

#获取当期脚本执行的位置
#file_real_path=$(readlink -f .)
#echo $file_real_path

#拷贝配置文件
copyFile(){

        conf_file_path=$1

        #获取当前传递进来的文件夹的路径
        conf_file_dir=$(cd "$(dirname "$1")"; pwd)
        new_file_path=$conf_file_dir"/zoo2.cfg"

        #创建一个新文件
        #touch $new_file_path

        cp $conf_file_path $new_file_path

        #新文件地址
        echo $new_file_path
}


if [ "$1" != "" ]
then

        new_file_path=$(copyFile $1)
        #新文件地址
        echo $new_file_path

        echo $2
        #--------------------update file----------------------
        sed -i 's#/tmp/zookeeper#/tmp/'$2'/data#' $new_file_path

        #添加log日志
        sed -i '/^dataDir/a\dataLogDir=\/tmp\/'$2'\/logs' $new_file_path

        #设定ip
        sed -i 's/2181/'$3'/g'  $new_file_path

        #追加服务配置
        sed -i '$a \server.1=127.0.0.1:2222:2225\nserver.2=127.0.0.1:3333:3335\nserver.3=127.0.0.1:4444:4445 ' $new_file_path

else
        echo '大兄弟,请指定你的zookeeperのzoo.cfg文件路径啊'
        exit 1
fi
exit 0

这里写图片描述

启动脚本

这个脚本需要传递三个参数

$1 配置文件 zoo_sample.cfg 配置文件
$2 缓存目录
$3 端口号

#!/bin/bash

SERVER1="/usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/bin/zkServer.sh"
SERVER2="/usr/local/zookeeper/zookeeper2/zookeeper-3.4.10/bin/zkServer.sh"
SERVER3="/usr/local/zookeeper/zookeeper3/zookeeper-3.4.10/bin/zkServer.sh"

case $1 in
start)
        echo "start zookeeper"
        sh $SERVER1 start
        sh $SERVER2 start
        sh $SERVER3 start
        ;;
stop)
        echo "stop zookeeper"
        sh $SERVER1 stop
        sh $SERVER2 stop
        sh $SERVER3 stop
        ;;
restart)
        echo "restart zookeeper"
        sh $SERVER1 restart
        sh $SERVER2 restart
        sh $SERVER3 restart
        ;;
status)
        echo "zookeeper info"
        sh $SERVER1 status
        sh $SERVER2 status
        sh $SERVER3 status
        ;;

*)
        echo "./zookeeper.sh start|stop|restart"
        exit 1
        ;;
esac
exit 0

这里写图片描述

整合的完整版代码

下载下来我的代码后,需要配置 sh的执行权限chmod +x install.sh
这里写图片描述

#!/bin/bash
#下载的zookeeper版本
ZOOKEEPER=zookeeper-3.4.10.tar.gz

#定义服务名称  需要自己配置,看自己的机器
SERVER1=zookeeper1
SERVER2=zookeeper2
SERVER3=zookeeper3

#定义端口  需要自己配置,看自己的机器
SERVER1_PORT=2182
SERVER2_PORT=2183
SERVER3_PORT=2184

#拷贝配置文件
copyFile(){

        conf_file_path=$1

        #获取当前传递进来的文件夹的路径
        conf_file_dir=$(cd "$(dirname "$1")"; pwd)
        new_file_path=$conf_file_dir"/zoo.cfg"

        #创建一个新文件
        #touch $new_file_path

        cp $conf_file_path $new_file_path

        #新文件地址
        echo $new_file_path
}

#配置文件
configFile(){
if [ "$1" != "" ]
    then

        new_file_path=$(copyFile $1)
        #新文件地址
        echo $new_file_path

        echo $2
        #--------------------update file----------------------
        sed -i 's#/tmp/zookeeper#/tmp/'$2'/data#' $new_file_path

        #添加log日志
        sed -i '/^dataDir/a\dataLogDir=\/tmp\/'$2'\/logs' $new_file_path

        #设定ip
        sed -i 's/2181/'$3'/g'  $new_file_path

        #追加服务配置
        sed -i '$a \server.1=127.0.0.1:2222:2225\nserver.2=127.0.0.1:3333:3335\nserver.3=127.0.0.1:4444:4445 ' $new_file_path

else
        echo '大兄弟,请指定你的zookeeperのzoo.cfg文件路径啊'
fi
}

#安装文件
installFile(){

    echo "开始下载文件"
    echo "默认指定下载目录为/usr/local/"

    read -p "指定下载的目录:" name
    path="/usr/local"
        if [ "$name" == "" ]
        then
                echo "设置为默认路径:/usr/local/"
        elif $(test -d "$name")
        then
                #echo $name
        path=$name
    fi

    out_file_path=$path/zookeeper

    echo "当保存载目录是"$out_file_path

    #创建文件夹
    mkdir -p $out_file_path    

    SERVER1_OUT_PATH=$out_file_path/$SERVER1/
    SERVER2_OUT_PATH=$out_file_path/$SERVER2/
    SERVER3_OUT_PATH=$out_file_path/$SERVER3/

    ehco "-------------------清空文件夹------------------" 
    #清空以前解压的
    rm -rf $SERVER1_OUT_PATH
    rm -rf $SERVER2_OUT_PATH
    rm -rf $SERVER3_OUT_PATH

    #创建文件夹
    mkdir -p $SERVER1_OUT_PATH
    mkdir -p $SERVER2_OUT_PATH
    mkdir -p $SERVER3_OUT_PATH

    #创建文件夹
    echo "创建文件夹"$SERVER1_OUT_PATH
    echo "创建文件夹"$SERVER2_OUT_PATH
    echo "创建文件夹"$SERVER3_OUT_PATH


    #下载文件
    wget -O $out_file_path/$ZOOKEEPER http://yellowcong.qiniudn.com/zookeeper-3.4.10.tar.gz 

    echo "文件下载地址"$out_file_path/$ZOOKEEPER

    #解压文件
    echo "-------------------解压文件----------------"

    #解压到指定的文件夹
    tar -zxvf $out_file_path/$ZOOKEEPER -C $SERVER1_OUT_PATH
    cp -rf $SERVER1_OUT_PATH/* $SERVER2_OUT_PATH
    cp -rf $SERVER1_OUT_PATH/* $SERVER3_OUT_PATH

    echo "----------------集群配置-------------------"
    #配置集群,配置集群文件
    configFile $SERVER1_OUT_PATH/zookeeper-3.4.10/conf/zoo_sample.cfg $SERVER1 $SERVER1_PORT
    configFile $SERVER2_OUT_PATH/zookeeper-3.4.10/conf/zoo_sample.cfg $SERVER2 $SERVER2_PORT
    configFile $SERVER3_OUT_PATH/zookeeper-3.4.10/conf/zoo_sample.cfg $SERVER3 $SERVER3_PORT


    echo "----------------配置myid文件---------------"
    #配置文件夹
    mkdir -p /tmp/$SERVER1/data
    mkdir -p /tmp/$SERVER1/logs
    echo 1 > /tmp/$SERVER1/data/myid

    mkdir -p /tmp/$SERVER2/data
    mkdir -p /tmp/$SERVER2/logs
    echo 2 > /tmp/$SERVER2/data/myid

    mkdir -p /tmp/$SERVER3/data
    mkdir -p /tmp/$SERVER3/logs
    echo 3 > /tmp/$SERVER3/data/myid

    echo "------------------启动文件-----------------"
    #启动集群   
    sh $out_file_path/$SERVER2/zookeeper-3.4.10/bin/zkServer.sh start 
    sh $out_file_path/$SERVER3/zookeeper-3.4.10/bin/zkServer.sh start
    sh $out_file_path/$SERVER1/zookeeper-3.4.10/bin/zkServer.sh start

    echo "-----------------查看启动状态---------------"
    #查看集群情况
    sh $out_file_path/$SERVER2/zookeeper-3.4.10/bin/zkServer.sh status
    sh $out_file_path/$SERVER3/zookeeper-3.4.10/bin/zkServer.sh status
    sh $out_file_path/$SERVER1/zookeeper-3.4.10/bin/zkServer.sh status
}

#执行安装
installFile

执行结果,可以查看到结果启动正常,zk启动ok
这里写图片描述

脚本使用

#下载脚本
wget http://yellowcong.qiniudn.com/install.sh

#配置脚本执行权限
chmod +x install.sh

#看是否需要配置
#vim install.sh

#执行脚本文件
./install.sh

文件存储目录
这里写图片描述

zookeeper安装目录
这里写图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的yellowcong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值