ARTS打卡計劃(第三週)

  • Algorithm。主要是爲了編程訓練和學習。每週至少作一個 leetcode 的算法題(先從Easy開始,而後再Medium,最後才Hard)。進行編程訓練,若是不訓練你看再多的算法書,你依然不會作算法題,看完書後,你須要訓練。關於作Leetcode的的優點,你能夠看一下我在coolshell上的文章 Leetcode 編程訓練 - 酷 殼 - CoolShell(一個小時之內);php

  • Review:主要是爲了學習英文,若是你的英文不行,你基本上無緣技術高手。因此,須要你閱讀並點評至少一篇英文技術文章,我我的最喜歡去的地方是 Medium(須要×××,其餘的能夠社區的官方文檔以及論文學習)以及各個公司的技術blog,如Netflix的(30min);html

  • Tip:主要是爲了總結和概括你在是常工做中所遇到的知識點。學習至少一個技術技巧。你在工做中遇到的問題,踩過的坑,學習的點滴知識(也能夠學習【極客時間】上的實用課程);linux

  • Share:主要是爲了創建你的影響力,可以輸出價值觀。分享一篇有觀點和思考的技術文章,也能夠是技術總結的文章。nginx

Algorithm :Go實現c++

package main

import "fmt"

func BinarySearch(arr *[6]int,leftIndex int,rightIndex int ,findVal int ){
   if  leftIndex > rightIndex{
      fmt.Printf("%v中找不到\t元素%v\n",(*arr),findVal)
      return
   }

   //先找到中間下標
   midddle := (leftIndex+rightIndex)/2
   if   (*arr)[midddle] >findVal {
      //說明要查找的數在左邊  就應該向 leftIndex ---- (middle - 1)再次查找
      BinarySearch(arr,leftIndex,midddle-1,findVal)
   }else if  (*arr)[midddle] < findVal{
      //若是 arr[middle] < findVal , 就應該向 middel+1---- rightIndex
      BinarySearch(arr,midddle+1,rightIndex,findVal)
   }else {
      //找到了
      fmt.Printf("%v中找到元素%v,下標爲%v\n",(*arr),findVal,midddle)
   }


}


func main() {
     ArraryNum := [6]int{1,8, 10, 89, 1000, 1234}
     ArraryNum2 := [6]int{8,200, 300, 889, 1000, 1234}
   BinarySearch(&ArraryNum,0,len(ArraryNum),1234)
   BinarySearch(&ArraryNum2,0,len(ArraryNum),300)
   BinarySearch(&ArraryNum,0,len(ArraryNum),-8)
   BinarySearch(&ArraryNum2,0,len(ArraryNum),30)
}
結果:
[1 8 10 89 1000 1234]中找到元素1234,下標爲5
[8 200 300 889 1000 1234]中找到元素300,下標爲2
[1 8 10 89 1000 1234]中找不到	元素-8
[8 200 300 889 1000 1234]中找不到	元素30

Review:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/index  web

  CentOS 7 資源管理  Cgroup算法

Tip: shell

    一、zabbix-web 遷移編程

       本身部署zabbix環境都是lamp,而公司中使用的一套LNMP,虛擬機須要下架,因此須要對其遷移,主要有如下步驟:bash

      (1)部署lnmp環境

     (2)安裝zabbix-web的服務,爲了更好的兼容。使用和原來版本一致的zabbix-web服務

     (3)替換配置文件  將老的服務上的一些配置文件遷移到新的,對功能作測試,全部功能測試完畢,遷移完成

  二、openresty安裝腳本

#!/bin/bash

NGX_PATH=$(cd `dirname $0`; pwd)
BUILD_PATH=$NGX_PATH/build/openresty
INSTALL_PATH=/usr/install
OR_INSTALL_PATH=${INSTALL_PATH}/openresty
NGX_INSTALL_PATH=${OR_INSTALL_PATH}/nginx

PCRE="pcre-8.36"
ZLIB="zlib-1.2.8"
OPENSSL="openssl-1.1.0i"
OPENRESTY="openresty-1.13.6.2"

PCRE_PATH=${BUILD_PATH}/${PCRE}
ZLIB_PATH=${BUILD_PATH}/${ZLIB}
OPENSSL_PATH=${BUILD_PATH}/${OPENSSL}
OPENRESTY_PATH=${BUILD_PATH}/${OPENRESTY}

PCRE_TAR=${BUILD_PATH}/${PCRE}.tar.gz
ZLIB_TAR=${BUILD_PATH}/${ZLIB}.tar.gz
OPENSSL_TAR=${BUILD_PATH}/${OPENSSL}.tar.gz
OPENRESTY_TAR=${BUILD_PATH}/${OPENRESTY}.tar.gz

rm -rf ${BUILD_PATH} && mkdir -p ${BUILD_PATH}
yum -y install automake autoconf libtool make gcc gcc-c++ unzip patch 1>/dev/null
curl -L http://192.168.48.4/soft/nginx/openresty.tar.gz -o $NGX_PATH/openresty.tar.gz
if [ -f "$NGX_PATH/openresty.tar.gz" ]; then
    tar -zxvf ${NGX_PATH}/openresty.tar.gz -C ${BUILD_PATH} 1>/dev/null
else
    echo -e "$NGX_PATH/nginx.tar.gz does not exist"
    exit
fi

function configure_f {
    if [ "$?" != 0 ];then
        echo -e "\tCompile failed, please check"
        exit
    else
        echo -e "\tCompile successfully"
    fi
}

function make_f {
    if [ "$?" != 0 ];then
        echo -e "\tMake is failed, please check"
        exit
    else
        echo -e "\tMake successfully"
    fi
}

function make_install_f {
    if [ "$?" != 0 ];then
        echo -e "\tMake install is failed, please check"
        exit
    else
        echo -e "\tMake install successfully"
    fi
}

if [ -f "$PCRE_TAR" ]; then
    tar -zxvf ${PCRE_TAR} -C ${BUILD_PATH} 1>/dev/null
    echo -e "\t$PCRE_TAR is uncompress complete"
else
    echo -e "\t$PCRE_TAR does not exist"
    exit
fi

if [ -f "$ZLIB_TAR" ];then
    tar -zxvf ${ZLIB_TAR} -C ${BUILD_PATH} 1>/dev/null
    echo -e "\t$ZLIB_TAR is uncompress complete"
else
    echo -e "\t$ZLIB_TAR does not exist"
    exit
fi

if [ -f "$OPENSSL_TAR" ]; then
    tar -zxvf ${OPENSSL_TAR} -C ${BUILD_PATH} 1>/dev/null

    echo -e "\t$OPENSSL_TAR is uncompress complete"
else
    echo -e "\t$OPENSSL_TAR does not exist"
    exit
fi

if [ -f "$OPENRESTY_TAR" ]; then
    tar -zxvf ${OPENRESTY_TAR} -C ${BUILD_PATH} 1>/dev/null

    echo -e "\tStart configure install $OPENRESTY_TAR"
    cd ${OPENRESTY_PATH}
    ./configure -j8 --user=admin --group=admin \
        --prefix=${OR_INSTALL_PATH} \
        --with-openssl=${OPENSSL_PATH} \
        --with-pcre=${PCRE_PATH} \
        --with-pcre-jit \
        --with-zlib=${ZLIB_PATH} \
        --with-stream \
        --with-stream_ssl_module \
        --with-http_ssl_module \
        --with-http_stub_status_module \
        --with-http_realip_module
    configure_f
    make -C ${OPENRESTY_PATH} 1>/dev/null
    make_f
    make -C ${OPENRESTY_PATH} install 1>/dev/null
    make_install_f
    echo -e "\t$OPENRESTY_TAR is install complete"
else
    echo -e "\t$OPENRESTY_TAR does not exist"
    exit
fi

chown -R admin:admin ${NGX_INSTALL_PATH}
chown root:admin ${NGX_INSTALL_PATH}/sbin/nginx
chmod 4755 ${NGX_INSTALL_PATH}/sbin/nginx
ln -s ${NGX_INSTALL_PATH} ${INSTALL_PATH}/nginx

echo -e "Nginx installation is complete : $NGX_INSTALL_PATH"


Share:

  

關於運維標準化的一些想法

   由於這一週作了一個基建nginx的遷移,踩了不少的坑,先列一下踩到的坑,而後再分析總結一下,應該怎麼作,

(1)光遷移nginx,防火牆NAT綁定新的VIP後發現zabbix不能訪問,通過排查原先的nginx服務器還安裝了zabbix-web,php-fpm等環境。

(2)部署zabbix和php等環境再次更改防火牆NAT信息,此次全部服務正常沒發生意外,由於原來的機器要下架,因此不知道里面還有什麼依賴,就將原來的服務中止了,而後諸多應用不可用,服務啓動後又正常,事情有點妖,明明更改的是對外服務的nginx,可是內部的服務掛了一堆。。。。 心理難以接受,去排查最後發現DNS裏以及若干機器的host文件中綁定了原來的ip和域名。。踩了若干的坑,花了好久,最後才讓全部服務恢復正常。

想法「    

    一個簡單的遷移,也是一次變動,要是核心業務在上面就是一次故障,一直提倡運維標準化,運維自動化,如何作到自動化呢,確定是先作到標準化,總不可能400臺機器,3多臺的的服務和配置都沒標準和規律,這時候程序、腳本都機關用盡。如何作自動化?

    另外一方面,部署環境和項目必定要有相關的技術文檔,誰也不能保證本身不跑路,後期工做交接、帶新人、查閱資料等都是須要文檔的,雖然當時部署的時候說本身記在腦子裏,可是時間長了就尷尬了。。你還記得嗎? 其餘人問你怎麼作的時候,徹底能夠給別人一份文檔,既能減去你的工做量,同時別人還認爲你作事完美

相關文章
相關標籤/搜索