当前位置:首页 > 技术文章 > 正文内容

Nginx+keepalived实现高可用 nginx和keepalived如何搭建高可用集群

arlanguage5个月前 (12-11)技术文章36

Nginx一般用来做服务网关,虽然Nginx的性能非常高,但是还是有宕机的风险,所以Nginx的高可用也是我们需要考虑的。常见的Nginx的高可用方案是使用keepalived浮动IP技术来实现。

通过keepalived虚拟一个vip出来作为虚拟网关,所有请求都先通过虚拟网关找到真正网关,再往下走。当主宕机了后,从会接过主的责任对外提供服务,当主复活后从又会将权限还给主,如图:

image.png

keepalived主要功能

  • 管理LVS负载均衡软件
  • 实现LVS集群节点的健康检查
  • 作为系统网络服务的高可用性(failover)

使用keepalived来监控nginx

keepalived通过shell脚本的方式来监控nginx的进程数量,从而判断nginx是否死掉,如果死掉就通过命令重启Nginx,脚本文件/usr/local/src/chk_nginx_pid.sh如下:

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`     #统计nginx进程数    
if [ $A -eq 0 ];then                            
      /usr/local/nginx/sbin/nginx                #重启nginx
      if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then    #nginx重启失败,则停掉keepalived服务,进行VIP转移
              killall keepalived    #杀掉,vip就漫游到另一台机器                
      fi
fi
  1. 统计nginx进程数 ,如果进程数为0则重启nginx。
  2. 重启nginx后重新统计nginx进程数,如果还是0表示nginx重启失败。
  3. nginx重启失败,则杀掉本机keepalived进程,这时虚IP就会浮动到从Nginx服务器上。

keepalived配置

keepalived需要和nginx安装在一台机器上,然后打开/etc/keepalived/keepalived.conf配置keepalived。

keepalived主:

! Configuration File for keepalived

global_defs {
   router_id LVS_1
}
vrrp_script chk_http_port {
    script "/usr/local/src/chk_nginx_pid.sh" #心跳执行的脚本
    interval 2                          #(检测脚本执行的间隔,单位是秒)
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0   #系统网卡
    virtual_router_id 51 #主备两机器一致
    priority 100   #值大的机器,胜出
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_http_port            #(调用检测脚本)
    }
    virtual_ipaddress { #可虚拟多个ip
        192.168.244.200
    }
}

keepalived从:

! Configuration File for keepalived

global_defs {
   router_id LVS_2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 50 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.244.200
    }
}

主从差异配置只有两个,如下:

  • state BACKUP:指定keepalived的角色,MASTER为主,BACKUP为备。
  • priority 50:优先级,数值越大,处理请求的优先级越高,备用数字小些。

keepalived脑裂

keepalived的主节点会定期往备节点发送心跳包,当备节点没有接收到心跳包的时候,会认为主节点挂了,那么他就会接过主节点的责任对外提供服务,表现形式就是备节点上出现了虚拟IP。这时有可能发生脑裂情况,所以我们还需要通过shell脚本监控keepalived的脑裂情况,脚本如下:

#!/bin/bash
# 检查脑裂的脚本,在备节点上进行部署
LB01_VIP=10.10.10.229
LB01_IP=10.10.10.129
LB02_IP=10.10.10.130
while true
do
  ping -c 2 -W 3 $LB01_VIP &>/dev/null
    if [ $? -eq 0 -a `ip add|grep "$LB01_VIP"|wc -l` -eq 1 ];then
        echo "ha is brain."
    else
        echo "ha is ok"
    fi
    sleep 5
done


来源:https://www.jianshu.com/p/bd4946ff59ec

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/78.html

标签: nginx if 语法
分享给朋友:

“Nginx+keepalived实现高可用 nginx和keepalived如何搭建高可用集群” 的相关文章

Nginx配置中root和alias分不清?本文3分钟帮你解惑

Nginx在配置映射路径的时候,有时候看到的是root,有时候看到的是alias,这两个有什么区别?本文笔者将带大家详细了解一下。什么是NginxNGINX 是全球最受欢迎的 Web 服务器之一,用于反向代理和负载均衡,还提供 HTTP 服务器功能,主要是为实现最大性能和稳定性而设计的。Ubuntu...

安装Code-server并配置用于多用户的反向代理(Nginx)

1.安装code-servercode-server的项目网址在cdr/code-server.在code-server的README中, 提供了两份部署指南, 一份是用于部署在AWS等云服务的deploy, 另一份则是我们要用的用于部署在本地的quickstart.Guide非常简洁明了, 就三步...

为何说捣腾 Nginx 少不了 Nginx-ui ?还自带 GPT 助手?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!什么是 Nginx UINginx UI 是一个基于 Web 的管理界面,旨在简化 Nginx 服务器的管理和配置。Yet another N...

Linux下如何用nginx+ffmpeg搭建流媒体服务器

安装ffmpeg安装过程略安装完成后,检查是否安装成功。比如我这里采用向pili推流的方式,将本地的一个mp4视频推流到七牛pili。ffmpeg -re -i /tmp/ffmpeg_test.mp4 -vcodec copy -acodec copy -f flv "rtmp://pil...

php高并发的瓶颈到底在哪

php高并发的瓶颈到底在哪?是同步阻塞?还是nginx+fpm不断创建-销毁进程资源过度消耗?高并发到底是什么问题,是语言问题嘛,为什么说php不适合高并发?求大佬指点从2009年后一直用lnmp,从5.2.17一直到现在的PHP7.4,做的项目无数个,大到日IP10W+、PV50W+的平台,小到日...

nginx支持跨域的方法 nginx配置支持跨域

在nginx的配置文件中添加允许跨域的响应头。参考nginx官方文档,添加响应头的方法如下:在conf文件的server作用域中添加如下响应头:server { listen 80; # 其他配置... # 允许跨域 add_header Access-Control-Allow-...