開發腳本自動部署及監控


1.編寫腳本自動部署反向代理、web、nfs;

要求:
I、部署nginx反向代理三個web服務,調度算法使用加權輪詢;html

#!/bin/sh

 ngxStatus=`ps aux | grep -v grep |grep -c nginx`
 function ngxProxyInstall() {
if [ -e /usr/sbin/nginx ];
  then echo "nginx already installed" exit 111 else yum install epel-release -y -q yum install gcc-* glibc-* openssl openssl-devel pcre pcre-devel zlib zlib-devel -y -q yum install nginx -y -q echo "install nginx successful" fi
if [ -f /etc/nginx/nginx.conf ];
  then /bin/cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak sed -ri '/^http/a\\t upstream luchuangao { \n\t server 192.168.126.132 weight=3;\n\t server 192.168.126.133;\n\t server 192.168.126.134;\n\t }' /etc/nginx/nginx.conf sed -ri '/^ *location \/ \{/a\\t\t proxy_pass http://luchuangao;' /etc/nginx/nginx.conf echo "Configuration successful" fi if [ $ngxStatus -lt 2 ];
  then systemctl start nginx echo "Start nginx successful" fi } function nfsInstall() { if [ -e /usr/sbin/rpcinfo ];then echo "nfs already installed" exit 222 else yum install rpcbind nfs-utils -y -q echo "install NFS successful" fi if [ ! -d /share ];
  then mkdir -p /share chmod -R o+w /share fi echo '/share 192.168.126.0/24(rw,sync,fsid=0)' > /etc/exports systemctl enable rpcbind.service systemctl enable nfs-server.service
systemctl start rpcbind.service systemctl start nfs-server.service echo "Start NFS successful" } ngxProxyInstall nfsInstall

  

II、全部web服務使用共享存儲nfs,保證全部web都對其有讀寫權限,保證數據一致性;node

#poxy上安裝nginx代理,nfs客戶端,腳本以下
[root@proxy mnt]# cat install_nginx.sh
#!/bin/bash
#insatll nginx proxy
  
IP=`ifconfig | awk -F" " '/inet/{print $2}' | head -1`
  
#insyall nginx proxy
function install_nginx() {
yum remove nginx -y
yum install nginx -y
touch /etc/nginx/conf.d/proxy.conf
cat > /etc/nginx/conf.d/proxy.conf <<EOF
    upstream web {
        server 192.168.16.54;
        server 192.168.16.55;
    }
    
    server {
        listen 80;
        server_name $IP;
        location / {
            proxy_pass http://web;
        }
    }
EOF
systemctl start nginx
}
 
#install nfs server
function install_nfs_server() {
yum install rpcbind nfs-utils -y
[ -d /share ] || mkdir  /share && chmod o+w /share
echo "/share 192.168.16.128/24(rw,sync,fsid=0)" > /etc/exports
systemctl start rpcbind.service
systemctl start nfs-server.service
}
while :
do
    read -p "please choice your install server{nginx|nfs}: " server
    if [ $server = "nginx" ]
    then
        install_nginx
    elif [ $server = "nfs" ]
    then
        install_nfs_server
    else
        exit
    fi
done
 
 
[root@python_web01 mnt]# cat install_nginx.sh
#!/bin/bash
#insatll nginx proxy
  
IP=`ifconfig | awk -F" " '/inet/{print $2}' | head -1`
  
#insyall nginx proxy
function install_nginx() {
yum install nginx -y
echo "python_web01" >/usr/share/nginx/html/index.html
systemctl start nginx
}
 
#install nfs server
function install_nfs_server() {
yum install rpcbind nfs-utils -y
systemctl start rpcbind.service
systemctl start nfs-server.service
mount -t nfs 192.168.16.128:/share /usr/share/nginx/html/
}
while :
do
    read -p "please choice your install server{nginx|nfs}: " server
    if [ $server = "nginx" ]
    then
        install_nginx
    elif [ $server = "nfs" ]
    then
        install_nfs_server
    else
        exit
    fi
done

  

2.編寫監控腳本,監控集羣內全部服務存活狀態,內存、磁盤剩餘率檢測,異常則發送報警郵件

步驟一:準備發送郵件的工具
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys
import smtplib
import email.mime.multipart
import email.mime.text
 
server = 'smtp.163.com'
port = '25'
 
def sendmail(server,port,user,pwd,msg):
    smtp = smtplib.SMTP()
    smtp.connect(server,port)
    smtp.login(user, pwd)
    smtp.sendmail(msg['from'], msg['to'], msg.as_string())
    smtp.quit()
    print('郵件發送成功email has send out !')
 
 
if __name__ == '__main__':
    msg = email.mime.multipart.MIMEMultipart()
    msg['Subject'] = '你是風兒我是沙,纏纏綿綿回我家'
    msg['From'] = 'python4_mail@163.com'
    msg['To'] = 'python4_recvmail@163.com'
    user = 'python4_mail'
    pwd = 'sbalex3714'
    content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:])) #格式處理,專門針對咱們的郵件格式
 
    txt = email.mime.text.MIMEText(content, _charset='utf-8')
    msg.attach(txt)
 
    sendmail(server,port,user,pwd,msg)


步驟二:將上述文件內容拷貝到/usr/bin/mail並chmod+x /usr/bin/mail

步驟三:而後新建監控腳本servermonitor.sh

#!/bin/bash
cpu_limit=0 #cpu使用超過90%則報警,此處咱們爲了獲得報警郵件的實驗效果,直接設置成0
mem_limit=0 #內存使用超過90%則報警,同上
disk='/dev/sda1' #須要監控的磁盤名
disk_inode_limit=0 #磁盤inode使用超過90%則報警,同上
disk_space_limit=0 #磁盤空間使用超過90%則報警,同上

function monitor_cpu(){
    cpu_free=`vmstat 1 5 |awk 'NR>=3{x = x + $15} END {print x/5}' |awk -F. '{print $1}'`
    cpu_use=$((100-cpu_free))
    if [ $cpu_use -gt $cpu_limit ]
        then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:CPU usage exceeds the limit,current value is ${cpu_use}%"
            echo $msg
            /usr/bin/mail $msg
    fi
}

function monitor_mem(){
    mem_total=`free |awk 'NR==2{print $2}'`
    mem_use=`free |awk 'NR==2{print $3}'`
    mem_per=`echo "scale=2;$mem_use/$mem_total" |bc -l|cut -d. -f2`
    if [ $mem_per -gt $mem_limit ]
        then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:Memory usage exceeds the limit,current value is ${mem_per}%"
            echo $msg
            /usr/bin/mail $msg
    fi
}

function monitor_disk_inode(){
    inode_use=`df -i $disk |awk 'NR==2{print $5}' |cut -d% -f1`
    if [ $inode_use -gt $disk_inode_limit ]
        then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:Disk inode usage exceeds the limit,current value is ${inode_use}%"
            echo $msg
            /usr/bin/mail $msg
    fi
}

function monitor_disk_space(){
    space_use=`df $disk |awk 'NR==2{print $5}'|cut -d% -f1`
    if [ $space_use -gt $disk_space_limit ]
        then
            msg="TIME:$(date +%F_%T)
                 HOSTNAME:$(hostname)
                 IPADDR:$(ifconfig |awk 'NR==2{print $2}')
                 MSG:Disk space usage exceeds the limit,current value is ${space_use}%"
            echo $msg
            /usr/bin/mail $msg
    fi
}

monitor_cpu &>> /tmp/monitor.log
monitor_mem &>> /tmp/monitor.log
monitor_disk_inode &>> /tmp/monitor.log
monitor_disk_space &>> /tmp/monitor.log

步驟四:編寫計劃任務

* * * * * /root/servermonitor.sh
相關文章
相關標籤/搜索