1.编写脚本自动部署反向代理、web、nfs;

要求:

I、部署nginx反向代理三个web服务,调度算法使用加权轮询;

反向代理服务器脚本配置脚本

  1. #!/bin/bash
  2. #安装eple和nginx
  3. function install(){
  4. rpm -qa | grep epel &> /dev/null
  5. if [ $? != 0 ]
  6. then
  7. yum install epel -y
  8. fi
  9. rpm -qa | grep nginx &> /dev/null
  10. if [ $? != 0 ]
  11. then
  12. yum install nginx -y
  13. fi
  14. }
  15. #启动nginx
  16. function startng(){
  17. ps aux | grep nginx | grep -v grep &> /dev/null
  18. if [ $? -ne 0 ]
  19. then
  20. systemctl restart nginx
  21. fi
  22. }
  23. #调用install()
  24. install
  25. echo 'install seccussful'
  26. #nginx.conf追加反向代理客户端ip地址和权重
  27. sed -r -i '/http[ ]*\{/a\upstream mynginx {\nserver 192.168.185.137 weight=3;\nserver 192.168.185.138;\nserver 192.168.185.139;\n}' /etc/nginx/nginx.conf
  28. echo 'insert1 ok'
  29. #追加location内容
  30. sed -r -i '/location \/ \{/a\proxy_pass http://mynginx;' /etc/nginx/nginx.conf
  31. echo 'insert1 ok'
  32. #调用startng()
  33. startng
  34. echo 'start nginx'

反向代理客户端脚本

  1. #!/bin/bash
  2. #安装eple和nginx
  3. function install(){
  4. rpm -qa | grep epel &> /dev/null
  5. if [ $? != 0 ]
  6. then
  7. yum install epel -y
  8. fi
  9. rpm -qa | grep nginx &> /dev/null
  10. if [ $? != 0 ]
  11. then
  12. yum install nginx -y
  13. fi
  14. }
  15. #启动nginx
  16. function startng(){
  17. ps aux | grep nginx | grep -v grep &> /dev/null
  18. if [ $? -ne 0 ]
  19. then
  20. systemctl restart nginx
  21. fi
  22. }
  23. #调用install()
  24. install
  25. #调用startng()
  26. startng

II、所有web服务使用共享存储nfs,保证所有web都对其有读写权限,保证数据一致性;

存储服务器脚本

  1. #!/bin/bash
  2. #yum安装nfs和RPC
  3. function install(){
  4. rpm -qa | grep rpcbind &> /dev/null
  5. if [ $? != 0 ]
  6. then
  7. yum install rpcbind -y
  8. fi
  9. rpm -qa | grep nfs-utils &> /dev/null
  10. if [ $? != 0 ]
  11. then
  12. yum install nfs-utils -y
  13. fi
  14. }
  15. #调用install()
  16. install
  17. #新建输出目录share,增加写权限
  18. mkdir /share_nfs
  19. chmod -R o+w /share_nfs
  20. #服务端修改配置文件
  21. echo '/share 192.168.185.0/24(rw,sync,fsid=0)'>/etc/exports
  22. #rpcbind和nfs服务开机启动
  23. systemctl enable nfs-server.service
  24. systemctl enable rpcbind.service
  25. #启动rpcbind和nfs服务
  26. function startrn(){
  27. ps aux | grep nfs-server | grep -v grep &> /dev/null
  28. if [ $? -ne 0 ]
  29. then
  30. systemctl restart nfs-server.service
  31. fi
  32. ps aux | grep rpcbind | grep -v grep &> /dev/null
  33. if [ $? -ne 0 ]
  34. then
  35. systemctl restart rpcbind.service
  36. fi
  37. }
  38. #调用startrn()
  39. startrn

web端脚本

  1. #!/bin/bash
  2. #yum安装nfs和RPC
  3. function install(){
  4. rpm -qa | grep rpcbind &> /dev/null
  5. if [ $? != 0 ]
  6. then
  7. yum install rpcbind -y
  8. fi
  9. rpm -qa | grep nfs-utils &> /dev/null
  10. if [ $? != 0 ]
  11. then
  12. yum install nfs-utils -y
  13. fi
  14. }
  15. #调用install()
  16. install
  17. #rpcbind和nfs服务开机启动
  18. systemctl enable rpcbind.service
  19. #启动rpcbind服务
  20. function startr(){
  21. ps aux | grep nfs-server | grep -v grep &> /dev/null
  22. if [ $? -ne 0 ]
  23. then
  24. systemctl restart rpcbind.serive
  25. fi
  26. }
  27. #调用startr()
  28. startr
  29. #挂载服务端/share目录
  30. mount -t nfs 192.168.185.130:/share_nfs /var/www/html/

2.编写监控脚本,监控nginx,nfs状态,内存、磁盘剩余率检测,异常则发送报警邮件

监控脚本monitor.sh

  1. #!/bin/bash
  2. #monitor nginx
  3. function monitor_nginx(){
  4. ps aux | grep nginx | grep -v grep &> /dev/null
  5. if [[ $? -ne 0 ]]
  6. then
  7. msg="TIME:$(date +%F_%T)
  8. HOSTNAME:$(hostname)
  9. IPADDR:$(ifconfig | awk 'NR==2{print $2}')
  10. MSG:nginx service stop"
  11. echo $msg
  12. /usr/bin/mail $msg
  13. fi
  14. }
  15. #monitor nfs
  16. function monitor_nfs(){
  17. ps aux | grep nfs | grep -v grep &> /dev/null
  18. if [[ $? -ne 0 ]]
  19. then
  20. msg="TIME:$(date +%F_%T)
  21. HOSTNAME:$(hostname)
  22. IPADDR:$(ifconfig | awk 'NR==2{print $2}')
  23. MSG:nfs service stop"
  24. echo $msg
  25. /usr/bin/mail $msg
  26. fi
  27. }
  28. mem_limit=20
  29. disk_space_limit=20
  30. #monitor memory
  31. function monitor_mem(){
  32. mem_total=`free | awk 'NR==2{print $2}'`
  33. mem_used=`free | awk 'NR==2{print $3}'`
  34. mem_used_per=`echo "scale=2;$mem_used/$mem_total" |bc -l |cut -d. -f2`
  35. if [[ mem_used_per -gt $mem_limit ]]
  36. then
  37. msg="TIME:$(date +%F_%T)
  38. HOSTNAME:$(hostname)
  39. IPADDR:$(ifconfig | awk 'NR==2{print $2}')
  40. MSG:Memory usage exceeds the limit,current value is ${mem_used_per}%"
  41. echo $msg
  42. /usr/bin/mail $msg
  43. fi
  44. }
  45. function monitor_disk_space(){
  46. space_use=`df $disk |awk 'NR==2{print $5}'|cut -d% -f1`
  47. if [[ $space_use -gt $disk_space_limit ]]
  48. then
  49. msg="TIME:$(date +%F_%T)
  50. HOSTNAME:$(hostname)
  51. IPADDR:$(ifconfig |awk 'NR==2{print $2}')
  52. MSG:Disk space usage exceeds the limit,current value is ${space_use}%"
  53. echo $msg
  54. /usr/bin/mail $msg
  55. fi
  56. }
  57. monitor_nginx &>> /tmp/monitor.log
  58. monitor_nfs &>> /tmp/monitor.log
  59. monitor_mem &>> /tmp/monitor.log
  60. monitor_disk_space &>> /tmp/monitor.log

准备发送邮件的工具(将下面述文件内容拷贝到/usr/bin/mail并chmod +x /usr/bin/mail)

  1. #!/usr/bin/python
  2. # -*- coding: UTF-8 -*-
  3. import sys
  4. import smtplib
  5. import email.mime.multipart
  6. import email.mime.text
  7. server = 'smtp.163.com'
  8. port = '25'
  9. def sendmail(server,port,user,pwd,msg):
  10. smtp = smtplib.SMTP()
  11. smtp.connect(server,port)
  12. smtp.login(user, pwd)
  13. smtp.sendmail(msg['from'], msg['to'], msg.as_string())
  14. smtp.quit()
  15. print('email has send out !')
  16. if __name__ == '__main__':
  17. msg = email.mime.multipart.MIMEMultipart()
  18. msg['Subject'] = 'From your monitor server'
  19. msg['From'] = 's*****6@163.com'
  20. msg['To'] = 's*****ve@163.com'
  21. user = 's*****6'
  22. pwd = 's*****3'
  23. content='%s\n%s' %('\n'.join(sys.argv[1:4]),' '.join(sys.argv[4:]))
  24. txt = email.mime.text.MIMEText(content, _charset='utf-8')
  25. msg.attach(txt)
  26. sendmail(server,port,user,pwd,msg)

3.编写计划任务,定时运行监控脚本,完成监控操作

  1. #用户(-u)root身份编辑(-e)计划任务
  2. crontab -e -u root
  3. #* * * * * [命令] 其中,五个星号表示:分钟 小时 日 月 周
  4. 25 14 * * 1-5 /shell/monitor.sh #每周1至周5的14点25分执行monitor脚本
  5. #查看计划任务执行日志
  6. tail -f /var/log/cron

shell脚本安装部署反向代理 监控进程 计划任务的更多相关文章

  1. Shell脚本-自动化部署反向代理、WEB、nfs

    部署nginx反向代理三个web服务,调度算法使用加权轮询(由于物理原因只开启两台服务器) AutoNginxNfsService.sh #/bin/bash systemctl status ngi ...

  2. 编写脚本自动部署反向代理、web、nfs

    服务器端 #!/bin/bash function nginx_install(){ if [[ -f /usr/sbin/nginx ]]; then echo 'Nginx has been in ...

  3. Shell脚本一键部署——源码编译安装MySQL及自动补全工具

    Shell脚本一键部署--源码编译安装MySQL及自动补全工具 编译安装MySQL 1.软件包 Mysql安装包 将安装包拖至/opt目录下,编辑一个脚本文件,将以下内容复制进去,然后source或者 ...

  4. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践

    欢迎转载,转载时请保留全文及出处. Apache 2.4.7在CentOS6.4中安装配置反向代理解决单外网IP对应多个内网主机的方法实践 Apache安装 下载源程序(http://httpd.ap ...

  5. Docker学习3-简单shell脚本安装mysql5.7与docker小技巧

    前言 玩过Windows中的 .bat 的小伙伴是不是觉得很有意思呢,github中一键推送.同步拉取等等操作,哈哈,当然shell脚本也是很类似,可以运行一个脚本就可以自动给我们部署好环境啦!但是这 ...

  6. shell脚本自动化部署

    由于公司技术部团队较小,没有专门的运维团队,所以运维工作技术部承包了. 一.纯人工部署是这样的: 1. 本地打包:一般 maven clean package 2. 借助xftp上传到服务器对应目录 ...

  7. Nginx的安装及反向代理设置

    因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5. ...

  8. shell脚本自动化部署服务

    shell脚本自动化部署 !/bin/bash #export PATH=$PATH:/export/maven/bin run_flag_dir="/data0/shell/deploy_ ...

  9. shell脚本安装python、pip--这种写法是错误的---每一个命令执行完都要判断是否执行成功,否则无法进行下一步

    shell脚本安装python.pip--不需要选择安装项目--不管用总报错,必须带上判断符号,while没有这种用法,写在这里为了以后少走弯路,所以不要用下面的执行了 首先把pip-.tgz 安装包 ...

随机推荐

  1. PHP 多进程开发

    pcntl_fork(); https://blog.csdn.net/wujiangwei567/article/details/77006724 https://blog.csdn.net/qq_ ...

  2. 微服务架构之思维三部曲:What、Why、How

    本文转自:http://www.servicemesh.cn/?/article/49 What:什么是微服务? 某百科对微服务架构的定义和阐述:微服务可以在“自己的程序”中运行,并通过“轻量级设备与 ...

  3. Linux 压缩 解压缩 命令相关

    1.命令格式:tar[必要参数][选择参数][文件] 2.命令功能:用来压缩和解压文件.tar本身不具有压缩功能.他是调用压缩功能实现的 3.命令参数:必要参数有如下:-A 新增压缩文件到已存在的压缩 ...

  4. CF271D_Good Substrings

    给一个原串,以及那些字符是坏的,现在问你可以从原串中取出多少个不同子串,使得其所含的坏字符的个数不超过一个定数. 这个题目网上有各种各样的解法.如hash,tire. 我说一下我的解法. 解法一:后缀 ...

  5. 子类的实例给父类的引用 在编译器时候 jvm认为他是父类的实例 只会去寻找父类里面的方法 如果调用子类里面的属性或者方法时候 jvm会认为该引用并没有 所以会报错

  6. MT【161】韦恩图

    (清华2017.4.29标准学术能力测试25) 若$N$的三个子集$A,B,C$满足$|A\cap B|=|B\cap C|=|C\cap A|=1$,且$A\cap B\cap C=\varnoth ...

  7. linux内核分析 第七周 Linux内核如何装载和启动一个可执行程序

    一.编译链接的过程和ELF可执行文件格式 vi hello.c gcc -E -o hello.cpp hello.c -m32 //预处理.c文件,预处理包括把include的文件包含进来以及宏替换 ...

  8. 毕业设计预习:VHDL入门知识学习(一) VHDL程序基本结构

    VHDL入门知识学习(一) VHDL程序基本结构 简介 VHDL程序基本结构 简介 概念: HDL-Hardware Description Language-硬件描述语言-描述硬件电路的功能.信号连 ...

  9. [USACO10OPEN]牛跳房子Cow Hopscotch

    题目描述 奶牛们正在回味童年,玩一个类似跳格子的游戏,在这个游戏里,奶 牛们在草地上画了一行N个格子,(3 <=N <= 250,000),编号为1..N. 就像任何一个好游戏一样,这样的 ...

  10. Stamp Rally

    Stamp Rally 最大值最小,可以二分,然后并查集看能不能到z个点 但是询问过多,并且发现每次二分要加入的点并不是所有的m条边 于是就考虑整体二分 并查集的处理是重点: 对于一般的dfs分治树, ...