1. 程式人生 > >Shell實戰之一鍵自動部署Zookeeper-yellowcong

Shell實戰之一鍵自動部署Zookeeper-yellowcong

自動部署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安裝目錄
這裡寫圖片描述

相關推薦

Shell實戰之一自動部署Zookeeper-yellowcong

自動部署zookeeper其實也不難,只是考慮的問題會比較多一點,需要考慮到架構的設計等情況,所以對於一鍵部署來說,需要確定的是規劃的儲存路徑,伺服器ip路徑等。我是單機的,所以早就規劃好了。PS(指令碼是我自己寫得,我也沒學幾天Shell,有很多紕漏,請

centos7 OpenStack 一自動部署

var one tar img tmp ima dmi kconfig ntp 1、[root@localhost ~]# systemctl stop NetworkManager [root@localhost ~]# systemctl enable Netw

Shell指令碼之一安裝LNMP環境

本指令碼和Nginx原始碼包、php-fpm的rpm包在一個目錄才能使用 本指令碼的LNMP為Linux、Nginx、Mariadb、PHP 指令碼內容: #!/bin/bash yum repolist &>/dev/null [ $? -eq 0 ]&

Docker實戰 | 第二篇:IDEA整合Docker外掛實現一自動打包部署微服務專案,一勞永逸的技術手段值得一試

## 一. 前言 大家在自己玩微服務專案的時候,動輒十幾個服務,每次修改逐一部署繁瑣不說也會浪費越來越多時間,所以本篇整理通過一次性配置實現一鍵部署微服務,實現真正所謂的一勞永逸。 ## 二. 配置伺服器 ### 1. Docker安裝 伺服器需要安裝Docker,如未安裝參考這篇文章安裝即可 [

shell之路--mysql主從自動部署

shell mysql主從 #!/bin/bash#auto make install Mysql AB Relication#by author max#date 2017-05-04MYSQL_SOFT="mysql mysql-server mysql-devel php-mysql"NUM=`

通過ssh主機互信打通內、外網,使用shell腳本自動部署測試環境

ssh 主機互信 scp 一、背景介紹 svnServer在內網環境,測試環境搭建在阿裏雲公網上,分為DBServer和WebServer。每次手動部署時都需要諸多步驟,開啟多個終端操作,可謂耗時又繁瑣,再加上新人經驗不足,部署過程時常出現問題。手動部署測試環境的步驟:服務器操作步驟

openvpn部署之快速入門實戰+一部署openvpn腳本

openvpn軟件環境: Centos6.9 x64 openvpn-2.4.3-1.el6.x86_64.rpm easy-rsa-2.2.2-1.el6.noarch.rpm #推薦使用2.2的版本 pkcs11-helper-1.11-3.el6.x86_64.rpm網絡環

shell腳本自動部署nignx反向代理及web服務器,共享存儲

echo pytho 修改 ^h pro lan nfs bash style #!/bin/bashsystemctl status nginx var=$? if [ $var -eq 4 ] then yum install epel-rel

實戰:Cobbler 無人值守自動部署系統

cobbler pxe 無人值守背景:裝系統相信大家都不陌生,對於運維攻城獅可以說是家常便飯,老大說:小劉今天裝一下系統,明天把那幾臺機器系統重裝一下。就這樣一上午,一天就這麽過去了。耗時費力不說,重點是沒有效率,沒錯這就是我的痛點。一個好的運維工作時間清閑才說明你的工作做到位了。萬一某天說小劉把100個新機

Shell實戰第一篇:自動批量創建用戶並配置保存自定義密碼

shell個人筆記分享(在線閱讀):http://note.youdao.com/noteshare?id=c4ee31bdcef0d28ec525bed113c93763&sub=CFE5180F8455421E9D5252FEC98AB1EDShell實戰第一篇:自動批量創建用戶並配置保存自定義密碼

Linux Shell完成Qt程序的自動部署

style nbsp code pan 直接 gnu cdi 命令行 col #!/bin/sh #取當前腳本的絕對路徑 srcDir=$(cd "$(dirname "$0")";pwd) #設置庫所在路徑 libDir=${srcDir}"/J1900RunLib/

編寫shell指令碼一啟動zookeeper叢集!!

踩了一個多小時坑終於解決了: 這裡分享給大家,更主要的目的是記住這些坑,避免以後重複走!!! 首先,這裡採用ssh祕鑰方式進行叢集主機之間免密登入執行啟動命令 這裡簡單說下原理: 通過ssh去另外一臺機器執行命令,直接執行還不行,因為需要環境變數,而ssh登入之後不在同一個程序裡面,所以環境變數不

使用Shell指令碼一部署Hadoop

測試環境 Linux系統版本:CentOS 7 實現功能 1、Java環境一鍵配置 2、Hadoop單機版一鍵安裝 3、Hadoop偽分散式一鍵安裝 4、Hadoop叢集部署 5、偽分散式hadoop初始化 6、叢集設定SSH免密登入(使用hadoop使用者操作)

Shell指令碼實現應用自動安裝部署

#!/bin/bash //設定指令碼中所需命令的執行路徑 PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH // $? 是取得上面執行命令的返回值,一般正確為0,錯誤為1 if [ "

使用shell自動部署tomcat專案

由於測試伺服器經常需要更新,覺得太麻煩就寫了個shell指令碼,記錄下來僅供大家參考 #!/bin/bash #------自動部署多個tomcat專案指令碼------ #1.刪除部署目錄下已存在的專案 #2.解壓war包到對應目錄下 #3.重新啟動tomcat伺服器

自動部署jar應用的shell指令碼

寫的一個自動部署jar應用的shell指令碼,如果有哪些地方不合適的還請各位大佬指正 #!/bin/sh #use deployjar.sh [-f ${jar file name}] [-d ${jar belong directory} [-s -m -l -xl -xxl]] JARFIL

jenkins自動部署中執行shell指令碼啟動tomcat,但是tomcat不啟動的問題

Jenkins會在構建完成後使用processTreeKiller殺掉了所有子程序,而且這是Jenkins的預設行為。其實回頭來看這個問題,就發現Jenkins的做法非常合理。當一次build異常結束,或被人終止時,必然需要結束所有這次build啟動的子程序。下面的link提供了更多細節,以及解決方法。htt

微服務之一部署git+maven+jenkins+docker

第一章 流程及原理流程梳理:    微服務一鍵部署實現後只需要將測試好的程式碼提交至版本管理工具(如:git、SVN),程式會自動實現更新程式碼並打包釋出等後面的流程,省心省力。第二章 實現過程前置環境:預設已經裝好Jenkins、maven、docker和git,我的Jen

jenkins自動部署應用到Tomcat,編譯後shell指令碼的簡單示例

1.先配置好jenkins需要用到的其他外部元件 jdk,maven,git/svn    安裝git: yum install git   git地址使用命令查詢 whereis git      maven jdk 安裝好後配置好環境變數

shell指令碼自動部署tomcat專案

自動部署shell指令碼由4個方法組成: deploy_backup(版本備份)、deploy_unzip(自動解壓新版本)、deploy_restart(重啟tomcat)、deploy_Rollback(版本回滾),當然,每個方法可以獨立執行,此處在開始執行