开发脚本自动部署及监控
1.编写脚本自动部署反向代理、web、nfs;
要求:
I、部署nginx反向代理三个web服务,调度算法使用加权轮询;
II、所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性;
2.编写监控脚本,监控集群内所有服务存活状态,内存、磁盘剩余率检测,异常则发送报警邮件
3.编写计划任务,定时运行监控脚本,完成监控操作
一、shell脚本部署nginx反向代理和三个web服务
1 对反向代理服务器进行配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| function ng_yum_install(){ yum install epel-release -y yum install nginx -y yum install rpcbind nfs-utils -y } function ng_init(){ systemctl start nginx systemctl enable nginx } ng_yum_install sed -ri '/^http/a \ \ \ \ upstream pythonweb{\n server\ 192.168.43.21;weight=3;\n server\ 192.168.43.23;\nserver\ 192.168.43.24;\n}' /etc/nginx/nginx.conf sed -ri '/^ +location \/ /a proxy_pass http:\/\/pythonweb;' /etc/nginx/nginx.conf systemctl stop firewalld systemctl enable firewalld echo 'share 192.168.43.0/24(rw,sync,fsid=0)' >/etc/exports chmod -R o+w /share systemctl enable nfs-service.service systemctl enable rpcbind.service systemctl start rpcbind.service systemctl start nfs_service.service
|
2 对三台web服务器分别进行配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| function ng_yum_install(){ yum install epel-release -y yum install nginx -y yum install rpcbind nfs-utils -y systemctl enable rpcbind.service && systemctl start rpcbind.service } function ng_init(){ systemctl start nginx systemctl enable nginx } ng_yum_install mkdir /html touch /html/index.html echo 'welcome nginx' >/html/index.html sed -ri '/^ +location \/ /a root \/html;\nindex index.html; ' /etx/nginx/nginx.conf ng_init systemctl stop firewalld systemctl enable firewalld mount -t nfs 192.168.43.20:/share /var/www.html
|
二、编写监控脚本 服务 内存 磁盘使用率 异常报警
1 2 3 4 5 6 7 8 9 10
| ps aux |grep nginx |grep -v 'grep' if[ $? -ne 0 ] then echo 'nginx is die' systemctl start nginx if[ $? -eq 0 ] then echo 'nginx now is activing' fi fi
|
1 Python 发送邮件工具
将此文件放到/bin下并给予可执行权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #!/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'] = 'python' msg['From'] = 'example@163.com' #发件人地址 msg['To'] = 'example@163.com' #收件人地址 user = '邮箱用户名' pwd = 'stmp客户端密码' 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)
|
2 内存监控脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #!/bin/bash mem_limit=0 #测试的时候设置成0 后期根据实际需要设置 function memcheck(){ memtotal=`free |awk 'NR==2{print $2}'` memuse1=`free |awk 'NR==2{print $3}'` memuse2=`free |awk 'NR==2{print $6}'` mempercent=`echo "scale=2;($memuse1+$memuse2)/$memtotal"|bc -l |cut -d. -f2` #echo ${mempercent}% if [ $mempercent -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_percent}%" echo $msg /usr/bin/mail $msg fi } memcheck #执行函数
|
下面是shell中执行成功的界面

这是邮箱收到的信息

3 计划任务crond
crond默认是开机启动的
1 2 3 4 5
| crontab -e -u root # 为root用户添加计划任务 * * * * * *代表分钟、小时、日、月、周
|
1 2
| tail -f /var/log/cron # 查看日志
|