1. 程式人生 > >自動化運維之應用發布---應用下線

自動化運維之應用發布---應用下線

ffline hang config text copyright ups 均衡 過程 __init__

應用發布簡單的流程:
1.集群節點應用下線(下面會介紹為什麽將這個放在第一位.)
2.獲取最新代碼
3.編譯打包
4.推送到應用機器
5.差異復制
6.重啟
7.測試
8.加入集群

我公司都是使用nginx完成負載均衡的...當我們後端應用python,java,nodejs需要升級上線新的功能的時候,就會涉及到nginx的upstream的變動。之所以將應用下線放在的第一位,是因為nginx在去掉upstream節點的時候正在處理的應用連接是不會中斷還能正常的服務,我們需要預留更長的時間來等待應用結束。。所以將下線放在第一位(當然如是單節點肯定不能放第一位)。
以前上線的時候,都是人工修改之後reload然後等待應用處理釋放。。再去更新代碼的。。等一切都是人工的去完成的,幾乎每天都需要重復性的工作。後來開始借助jenkins完成發布過程。前期的時候都是直接不下線應用直接部署,後來出現過幾次問題,決定在升級應用之前先將nginx負載節點下。為此編寫了一個nginx online offline腳本。現在分享給大家。

#!/bin/sh

#================================================================
#   Copyright (C) 2018 Sangfor Ltd. All rights reserved.
#
#   文件名稱:reload_upstream.sh
#   創 建 者:YouShumin
#   創建日期:2018年09月04日
#   描    述:
#
#================================================================

CONFIG=/data/etc/nginx/conf/web_upstream.conf
CHANGE_HOST="$2"

Coler_Text(){
    echo -e "\e[0;$2m$1\e[0m"
}
Echo_Red(){
    echo $(Coler_Text "$1" "31")
}

#### 檢測修改前的狀態 ####
ChangeNum(){
    online_num=$(grpe -rn ${CHANGE_HOST} ${CONFIG} | grep -v "#" | wc -l)
    offline_num=$(grep -rn ${CHANGE_HOST} ${CONFIG} | grep "#" |wc -l)
}

OnLine(){
    sed -i "/${CHANGE_HOST}/s/^#//g" ${CONFIG}
    now_online_num=$(grep -rn ${CHANGE_HOST} ${CONFIG} | grep -v "#" | wc -l)
    if [ ${OnLine} != ${now_online_num} ];then
        Echo_Red "Online ${CHANGE_HOST} ok..."
    else
        Echo_Red "Online ${CHANGE_HOST} error!!!"
    fi
}

OffLine(){
    sed -i "/${CHANGE_HOST}/s/^/#/g" ${CONFIG}
    now_offline_num=$(grep -rn ${CHANGE_HOST} ${CONFIG} | grep "#" |wc -l)
    if [ ${OffLine} != ${now_offline_num} ];then
        Echo_Red "OffLine ${CHANGE_HOST} ok..."
    else
        Echo_Red "OffLine ${CHANGE_HOST} error!!!!"
    fi
}

__init__(){
    case $1 in
        online)
            ChangeNum
            OnLine
            ;;
        offline)
            ChangeNum
            OffLine
            ;;
        *)
            echo "Usage: $0 {[ online|offline ] [server:port]}"
            exit 1
            ;;
    esac
}

__init__ $1

使用方法 sh scrips.sh online webapp1:8833 腳本內容很簡單的。其中需要修改的好似 web_upstream的位置。
然後在自動化發布之前執行此腳本的,然後發布應用,進行測試,測試通過之後上線。

自動化運維之應用發布---應用下線