暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Keepalived+Nginx高可用集群(主从模式)

Whoooops 2021-04-15
1836

一:Nginx高可用集群解决的问题?

在我们负载均衡配置中有一台非常关键的服务器,nginx反向代理服务器,所有的任务分发都是从他这里发出的, 如果这台反向代理服务器挂了,整个流程全部down了,所以需要对负载均衡进行监听,添加一台备份服务器做容灾。

二:Nginx高可用集群实现思路


      1:如上所述我们需要有个程序一直去监听nginx是否down,这里我们使用Keepalived来做


      2:当我们发现nginx反向代理服务器down了,我们需要找一台服务器做替代


      当nginx主服务故障,使用备份服务器的时候,对外暴露的IP会发生改变,为了减少web端的操作,我们需要统一对外的IP,这就是所谓的虚拟IP, 虚拟IP解决的问题就是当我的nginx故障切换了,对外暴露的IP始终是不变的, 不会对web层有影响。


      主要是采用 nginx负载均衡 + 监控(keepalived)来实现,keepalived来监听Nginx是否存活,同时维护 虚拟IP对外访问解决静态路由的单点故障。



3.1:主备服务器安装配置keepalived

yum install keepalived –y

查看是否安装成功,成功后有版本提示

systemctl start keepalived

开启keepalived:

systemctl start keepalived

keepalived开机启动:systemctl enable keepalived





3.2:编写Nginx自动重启脚本

注意:主备之间都需要编写该文件。

脚本中使用到的非linux默认安装的命令

**安装killall 命令 **yum install -y psmisc

**安装 netstat 命令 **yum install -y net-tools

在keepalived配置文件存放目录中创建脚本

vim etc/keepalived/chk_nginx.sh


    #!/bin/bash
    # 这种方式是查询nginx的进程
    #A=`ps -C nginx --no-header | wc -l`
    # 这种方式是查询nginx的端口
    A=`netstat -tnlp | grep nginx | wc -l`
    if [ $A -eq 0 ];then
    # 启动Nginx ,根据你自己的路径启动
    usr/local/nginx/sbin/nginx
    sleep 2
    #if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
    if [ `netstat -tnlp | grep nginx | wc -l` -eq 0 ];then
    killall keepalived
    fi
    fi


    使用 chmod +x ``/etc/keepalived/chk_nginx.sh
     赋予文件执行权限

    3.3:修改keepalived.conf 配置文件

    vim etc/keepalived/keepalived.conf

    主机配置:

      ! Configuration File for keepalived
      #全局配置
      global_defs {
      router_id keep_135 #路由ID,局域网内应唯一
      script_user root #运行脚本的用户,避免 WARNING - default user 'keepalived_script' for script execution does not exist - please create.
      enable_script_security #避免SECURITY VIOLATION警告
      }


      #脚本检测
      vrrp_script check_nginx_alived {
      #脚本路径
      script "/etc/keepalived/chk_nginx.sh"
      # 脚本运行间隔
      interval 2
      # 如果脚本运行成功,则升权+10,如果配置负数(-10),则运行失败,降权。
      weight 10
      }


      #虚拟路由配置
      vrrp_instance VI_1 {
      state MASTER #初始情况下的主备状态
      interface ens33 #网卡文件名,注意应填写你的主机使用的网卡名称
      virtual_router_id 51 #虚拟路由id,主备应保持一致
      priority 100 #权重,发生主备切换时成为主机的优先级
      advert_int 1 #侦测心跳,单位s
      #鉴权配置
      authentication {
      auth_type PASS #鉴权类型 PASS
      auth_pass 1111 #密码
      }
      #脚本追踪
      track_script {
      #对应vrrp_script 的name
      check_nginx_alived
      }
      #虚拟IP,可以有多个,一行一个,主备之间应保持一致
      virtual_ipaddress {
      192.168.242.135
      }
      }


      备用机配置:

        ! Configuration File for keepalived
        #全局配置
        global_defs {
        router_id keep_130 #路由ID,局域网内应唯一
        script_user root #运行脚本的用户,避免 WARNING - default user 'keepalived_script' for script execution does not exist - please create.
        enable_script_security #避免SECURITY VIOLATION警告
        }


        #脚本检测
        vrrp_script check_nginx_alived {
        #脚本路径
        script "/etc/keepalived/chk_nginx.sh"
        # 脚本运行间隔
        interval 2
        # 如果脚本运行成功,则升权+10,如果配置负数(-10),则运行失败,降权。
        weight 10
        }


        #虚拟路由配置
        vrrp_instance VI_1 {
        state MASTER #初始情况下的主备状态
        interface ens33 #网卡文件名,注意应填写你的主机使用的网卡名称
        virtual_router_id 51 #虚拟路由id,主备应保持一致
        priority 80 #权重,发生主备切换时成为主机的优先级
        advert_int 1 #侦测心跳,单位s
        #鉴权配置
        authentication {
        auth_type PASS #鉴权类型 PASS
        auth_pass 1111 #密码
        }
        #脚本追踪
        track_script {
        #对应vrrp_script 的name
        check_nginx_alived
        }
        #虚拟IP,可以有多个,一行一个,主备之间应保持一致
        virtual_ipaddress {
        192.168.242.135
        }
        }



        测试

        文章转载自Whoooops,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论