我们使用Nginx配置负载均衡的时候,当我们的tomcat宕机了,我们的nginx会自动给我剔除掉宕掉的服务器,但是我们应该也会联想到,如果Nginx宕机了呢?我们的请求就无法到达我们的反向代理服务器了

Nginx宕机了,解决方案

  • 配置nginx配置高可用

  • 配置多个nginx,一台master主服务器,多台从服务器

  • 我们配置主从配置的时候需要一个软件 KeepAlived 用来检查nginx服务器是否还活着

  • 我们还需要一个虚拟的IP地址

  • 安装 keeplive 使用 yum命令进行安装 yum -y install keepalived 查看是否安装成功 rpm -q -a keepalived

  • 安装成功之后会在 etc/keepalived下 生成keeplived.conf配置文件

  • 分别配置 主和从服务器etc/keepalived下的keepalived.conf文件

    • keepalived.conf配置

      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
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      global_defs {

      notification_email {
      liu997121@gmail.com
      }

      notification_email_from liu997121@gmail.com

      smtp_server imap.gmail.com

      smtp_connect_timeout 30

      router_id LVS_DEVEL

      }

      vrrp_script chk_http_port {

      script "/usr/local/src/nginx_check.sh"

      interval 2 #(检测脚本执行的间隔)

      weight 2
      }

      vrrp_instance VI_1 {
      state MASTER # 备份服务器上将 MASTER 改为 BACKUP

      interface ens33 #网卡

      virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同

      priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小

      advert_int 1

      authentication {

      auth_type PASS

      auth_pass 1111

      }

      virtual_ipaddress {

      192.168.17.50 # VRRP H 虚拟地址

      }

      }
    • keepalived.conf配置

      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
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      global_defs {

      notification_email {
      liu997121@gmail.com
      }

      notification_email_from liu997121@gmail.com

      smtp_server imap.gmail.com

      smtp_connect_timeout 30

      router_id LVS_DEVELBACKUP

      }

      vrrp_script chk_http_port {

      script "/usr/local/src/nginx_check.sh"

      interval 2 #(检测脚本执行的间隔)

      weight 2
      }

      vrrp_instance VI_1 {
      state BACKUP # 备份服务器上将 MASTER 改为 BACKUP

      interface ens33 #网卡

      virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同

      priority 80 # 主、备机取不同的优先级,主机值较大,备份机值较小

      advert_int 1

      authentication {

      auth_type PASS

      auth_pass 1111

      }

      virtual_ipaddress {

      192.168.17.50 #VRRP H 虚拟地址

      }

      }
    • check_nginx_pid.sh校验脚本配置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      #!/bin/bash

      A=`ps -C nginx –no-header |wc -l`

      if [ $A -eq 0 ];then

      /usr/local/nginx/sbin/nginx

      sleep 2

      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

      killall keepalived

      fi

      fi

    keepalived_master.conf

    keepalived_Slave.conf

    check_nginx_pid.sh

这里还有一个坑,就是虚拟ip网段要和real server 真实ip的网络地址一致,比如 192.168.171.128,那么虚拟ip必须是 192.168.171. ,否则虚拟ip无法访问*

  • 配置自动检测脚本
    • 注意:一定要给这个脚本文件可执行权限(看到变成可执行的颜色),执行命令:chmod u+x /usr/local/src/nginx_check.sh
  • 配置完成后分别启动ngxin 和 keepalived
  • 打开配置的虚拟IP地址,看是否可以访问到 nginx首页