开发脚本自动部署及监控
1.编写脚本自动部署反向代理、web、nfs;
要求:
I、部署nginx反向代理三个web服务,调度算法使用加权轮询;
II、所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性;
部署ngix代理机
#!/bin/bash systemctl status nginx #查看nginx启动状态 if(($?==4)) #没有安装nginx then yum install -y nginx if(($?==0)) then echo 'install nginx success' systemctl start nginx if(($?==0)) then echo 'Congratulations!!Nginx is running!!' else echo 'Sorry is fail!!' fi else echo 'Sorry install is fail' fi elif(($==3)) #安装了nginx没有启动 then systemctl start nginx if(($?==0)) then echo 'Congratulations!!Nginx is running!!' else echo 'Sorry is fail!!' fi elif(($?==0)) #已经启动nginx then echo echo 'Congratulations!!Nginx is running!!' else echo 'I am so sorry' fi echo 'nigix configuration information' grep 'upstream myapp1' /etc/nginx/nginx.conf #配置ngixn反向代理 if(($?!=0)) then sed -ri '/^hettp/a upstream myapp1 { server 192.168.203.136 weight=3; server 192.167.203.137; }' /etc/nginx/nginx.conf sed -ri '/^ *location / {/a proxy_pass http://myapp1;' /etc/nginx/nginx.conf fi echo 'configuration information is ok' systemctl stop firewalld #修改完配置重新启动nginx systemctl reload nginx echo 'HTTP load balancer is OK!'
部署nfs服务器端
#!/bin/bash systemctl status nfs #查看nfs启动状态 if(($?==4)) #没有安装nfs then yum install rpcbind nfs-utils -y if(($?==0)) them systemctl start nfs if(($?==0)) then echo 'Congratulation!!nfs is running!' else echo 'Sorry!nfs does not running !!' fi else echo 'Sorry,install nfs is fail!!' fi else((&?==3)) #安装没有启动nfs then systemctl start nfs if(($?==0)) then echo 'Congratulation!!nfs is running!' else echo 'Sorry,nfs in death' fi else(($?==0)) #已经启动nfs then echo 'Congratulation!!nfs is running!' else echo 'nfs is missing' fi echo 'nfs configuration information' echo '/fenxiang 192.168.203.0/24(rw,sync,fsid=0)'>/etc/exports #设计nfs共享目录 echo 'nfs configuration information is ok' chmod +w /fenxiang #给予客户端写权限 systemctl reload nfs #修改完配置重新启动nfs if(($?==0)) then echo 'nfs is running!' else echo 'nfs is missing' fi
部署nginx服务端
#!/bin/bash systemctl status nginx #查看启动nginx没有 if(($?==4)) #没有安装nginx then yum install -y nginx if(($?==0)) then echo 'install nginx success' systemctl start nginx if(($?==0)) then echo 'Congratulations!!Nginx is running!!' else echo 'Sorry is fail!!' fi else echo 'Sorry install is fail' fi elif(($==3)) #安装了ngix,但是没有启动 then systemctl start nginx if(($?==0)) then echo 'Congratulations!!Nginx is running!!' else echo 'Sorry is fail!!' fi elif(($?==0)) #已经启动nginx then echo echo 'Congratulations!!Nginx is running!!' else echo 'I am so sorry' fi echo 'nigix configuration information' sed -ri '/^ *location {/a root /var/www/html;' /ect/nginx/nginx.conf #修改nginx服务端的配置,指定访问路径 echo 'configuration information is ok' systemctl stop firewalld systemctl reload nginx if(($?==0)) then echo 'HTTP load balancer is OK' else echo 'HTTP load balancer is not OK' fi systemctl status nfs #是否启动nfs if(($?==4)) #没有安装nfs then yum install rpcbind nfs-utils -y if(($?==0)) them systemctl start nfs if(($?==0)) then echo 'Congratulation!!nfs is running!' else echo 'Sorry!nfs does not running !!' fi else echo 'Sorry,install nfs is fail!!' fi else((&?==3)) #安装了nfs,但是没有启动 then systemctl start nfs if(($?==0)) then echo 'Congratulation!!nfs is running!' else echo 'Sorry,nfs in death' fi else(($?==0)) #已经启动nfs then echo 'Congratulation!!nfs is running!' else echo 'nfs is missing' fi echo 'nfs mount directory' mount -t nfs 192.168.203.138:/fengxiang /var/www/html #将自己的目录挂载到nfs服务端的分享目录下 echo 'nfs mount directory is OK' systemctl reload nfs if(($?==0)) then echo 'nfs is running!' else echo 'nfs is missing' fi
2.编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件
部署每台机器
一、准备发送邮件的脚本,将其拷贝到/usr/bin/my_mail
#!/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'] = 'check your service of nginx and nfs' msg['From'] = 'python4_mail@163.com' msg['To'] = 'python4_recvmail@163.com' user = 'python4_mail' pwd = '123456789' content='%s %s' %(' '.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)
二、编写监控脚本check.sh,监控集群内nginx和nfs存活状态,内存、磁盘剩余率检测
#!/bin/bash #监控脚本,监控集群内nginx和nfs存活状态,内存、磁盘剩余率检测,异常则发送报警邮件 function NginxCheck{ #监控nginx systemctl status nginx nginx=$? clear if(($nginx != 0)) msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig | awk 'NR==2{print $2}') MSG:nginx service is crash ,plese restart it" echo $msg /usr/bin/my_mail $msg systemctl restart nginx fi } function NfsCheck{ #监控nfs systemctl status nfs nfs=$? clear if(($nfs !=0)) then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig | awk 'NR==2{print $2}') MSG:nfs service is crash ,plese restart it" echo $msg /usr/bin/my_mail $msg systemctl restart nginx fi } function MenCheck{ #监控内存 men_total=`free |awk 'NR==2{print $2}'` men_use=`free |awk 'NR==2{print $3}'` men_per=`echo "scale=2;$men_use/$men_totall"|bc -l|cut -d . -f2` if[! -e /use/bin/bc] then yum install bc -y -q echo 'bc install successful' fi if(($men_per>10)) then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig | awk 'NR==2{print $2}') MSG:memory usage exceeds the limit, current value is ${men_per}%" echo $msg /usr/bin/my_mail $msg fi } function DiskCheck{ #监控磁盘 space_use=`df |awk 'NR==2{print $5}'|cut -d % -f1` if(($space_use>80)) then msg="TIME:$(date +%F_%T) HOSTNAME:$(hostname) IPADDR:$(ifconfig | awk 'NR==2{print $2}') MSG:disk usage exceeds the limit, current value is ${space_use}%" echo $msg /usr/bin/my_mail $msg fi }
三、chmod +x /usr/bin/my_mail chmod +x check.sh 放开执行权限
3.编写计划任务,定时运行监控脚本,完成监控操作
crontab -e -u root 编写计划任务
* * * * * /usr/bin/sh /root/check.sh