关于使用Keepalived实现Nginx的自动重启及双主热备高可用问题

目录
  • 1、概述
  • 2、使用keepalived实现nginx的自动重启
    • 2.1 借助shell脚本,完成nginx的重启
    • 2.2 为脚本赋予运行权限
    • 2.3 在keepalived配置文件中增加配置
    • 2.4 重启keepalived服务
  • 3、双主热备的搭建
    • 3.1 双主热备概述
    • 3.2 场景说明
    • 3.3 修改a服务器配置
    • 3.4 修改b服务器配置
    • 3.5 重启两台服务器的keepalived
    • 3.6 设置dns轮询
  • 4、云服务器的负载均衡
    • 5、综述

      1、概述

      之前我们使用keepalived实现了nginx服务的双机主备高可用,但是有几个问题没有解决,今天一起探讨一下。

      1)在双机主备机制中,keepalived服务如果宕了,会自动启用备机进行服务,但nginx服务如果负载过大宕了,虚拟ip是不会指向备机的。

      2)双机主备的特点是,只有1台机器在提供服务,备机在主机的keepalived服务宕掉后才会提供服务,大大的造成了资源的浪费。

      3)目前比较流行租用云服务器去运营公司的产品,那云服务器支不支持虚拟ip呢?

      今天我们就上述的三个问题来讲解一下。

      2、使用keepalived实现nginx的自动重启

      2.1 借助shell脚本,完成nginx的重启

      keepalived不能直接启动nginx,但可以执行shell脚本,因此这里我们需要借助shell脚本启动nginx。

      在 /etc/keepalived 目录下,新建一个脚本 check_nginx.sh,以下是脚本的具体内容:

      #!/bin/bash
      
      # 执行查看nginx进程的命令,并放在变量a中
      a=`ps -c nginx --no-header | wc -l`
      
      # 判断是否宕机,如果宕机尝试重启,如果重启不成功,则停止keepalived
      if [ $a -eq 0 ];then
          /usr/local/nginx/sbin/nginx
          sleep 3
          if [ `ps -c nginx --no-header | wc -l` -eq 0 ];then
              killall keepalived
      
          fi
      fi

      脚本来源于网络

      2.2 为脚本赋予运行权限

      # chmod +x /etc/keepalived/check_nginx.sh

      2.3 在keepalived配置文件中增加配置

      打开keepalived配置文件,# vi /etc/keepalived/keepalived.conf

      修改配置文件,增加vrrp_script 和track_script的配置,配置如下:

      global_defs {
         
         # 全局唯一的主机标识
         router_id server_a
         
      }
      
      vrrp_script check_nginx {
          script "/etc/keepalived/check_nginx.sh"
          interval 3 # 每隔3秒运行一次shell脚本
          weight 10 # 脚本运行成功,权重加10
      }
      
      vrrp_instance vi_1 {
      
          # 标识是主节点还是备用节点,值为 master 或 backup
          state master
          # 绑定的网卡
          interface ens33
          # 虚拟路由id,保证主备节点是一致的
          virtual_router_id 51
          # 权重
          priority 100
          # 同步检查时间,间隔默认1秒
          advert_int 1
          # 认证授权的密码,所有主备需要一样
          authentication {
              auth_type pass
              auth_pass 1111
          }
      
          track_script {
              check_nginx
          }
      
          # 虚拟ip
          virtual_ipaddress {
              192.168.1.88
          }
      }

      2.4 重启keepalived服务

      重启后,发现,nginx停掉后,很快会自动启动。

      3、双主热备的搭建

      3.1 双主热备概述

      由于双机主备机制,每次只会由一台服务器对外提供服务,且主备机的配置是相同的,因此极大地造成了资源的浪费。

      双主热备则解决了这个问题,双主热备的原理是两台服务器利用keepalived互为主备,因此需要两个虚拟ip,再利用dns轮询的配置,让一个域名按轮询的方式分别路由到两个虚拟ip上,最终达到高可用的目的。

      3.2 场景说明

      虚拟ip1:192.168.1.88

      虚拟ip2:192.168.1.66

      a服务器ip(主):192.168.1.144

      b服务器ip(备):192.168.1.22

      3.3 修改a服务器配置

      配置如下:

      ! configuration file for keepalived
      
      global_defs {
         
         # 全局唯一的主机标识
         router_id server_a
         
      }
      
      vrrp_instance vi_1 {
      
          # 标识是主节点还是备用节点,值为 master 或 backup
          state master
          # 绑定的网卡
          interface ens33
          # 虚拟路由id,保证主备节点是一致的
          virtual_router_id 51
          # 权重
          priority 100
          # 同步检查时间,间隔默认1秒
          advert_int 1
          # 认证授权的密码,所有主备需要一样
          authentication {
              auth_type pass
              auth_pass 1111
          }
          # 虚拟ip
          virtual_ipaddress {
              192.168.1.88
          }
      }
      
      vrrp_instance vi_2 {
      
          # 标识是主节点还是备用节点,值为 master 或 backup
          state backup
          # 绑定的网卡
          interface ens33
          # 虚拟路由id,保证主备节点是一致的
          virtual_router_id 52
          # 权重
          priority 80
          # 同步检查时间,间隔默认1秒
          advert_int 1
          # 认证授权的密码,所有主备需要一样
          authentication {
              auth_type pass
              auth_pass 1111
          }
          # 虚拟ip
          virtual_ipaddress {
              192.168.1.66
          }
      }

      3.4 修改b服务器配置

      配置如下:

      ! configuration file for keepalived
      
      global_defs {
         
         router_id server_b
         
      }
      
      vrrp_instance vi_1 {
          
          # 设置为备机
          state backup
          interface ens33
          virtual_router_id 51
          # 权重设置的要比主机低
          priority 90
          advert_int 1
          authentication {
              auth_type pass
              auth_pass 1111
          }
          # 虚拟ip需要主备设置成一样
          virtual_ipaddress {
              192.168.1.88
          }
      }
      
      vrrp_instance vi_2 {
          
          # 设置为主机
          state master
          interface ens33
          virtual_router_id 52
          # 权重设置的要比主机低
          priority 100
          advert_int 1
          authentication {
              auth_type pass
              auth_pass 1111
          }
          # 虚拟ip需要主备设置成一样
          virtual_ipaddress {
              192.168.1.66
          }
      }

      3.5 重启两台服务器的keepalived

      重启keepalived即可。

      3.6 设置dns轮询

      联系网络运营商解决。

      4、云服务器的负载均衡

      现在,很多公司都会选择租用云服务器运行自己的产品,因为更划算、更稳定,有专业人员负责运维。

      但使用了云服务器,就要受云服务运营商的限制。

      就拿虚拟ip这个事儿来说,一些云服务运营商就是不支持的。

      如果不支持虚拟ip,则keepalived这个方案就只能放弃了。

      但即使keepalived用不了,nginx的高可用还是有解决方案的,很多云服务商都已经推出了自己的负载均衡服务(例如:阿里云的负载均衡 slb 和 腾讯云的负载均衡 clb)。我们直接租用就好了,不需要我们自己去配置。

      5、综述

      今天大概聊了一下keepalived自动重启nginx,keepalived的双主热备高可用的搭建,以及云服务器负载均衡的解决方案,希望能对大家有所帮助。

      到此这篇关于使用keepalived实现nginx的自动重启及双主热备高可用的文章就介绍到这了,更多相关keepalived实现nginx的自动重启内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

      THE END
      喜欢就支持一下吧
      点赞7分享