nginx两台负载均衡服务器之间使用keepalived实现高可用

这篇具有很好参考价值的文章主要介绍了nginx两台负载均衡服务器之间使用keepalived实现高可用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

高可用HA

单点故障:某个重要的功能只有一份,如果他出现问题,会导致全局不能使用

“高可用性”(High Availability,缩写为HA)用于描述系统或服务在面临故障、硬件或软件问题时能够继续正常运行的能力。高可用性的目标是最大程度地减少系统中断或停机时间,确保用户可以随时访问服务或应用程序。

三个经典的高可用软件:hearbeat、keepalived、HAproxy

keepalived实现高可用

keepalived两大核心功能:
1、loadbalance 负载均衡:ipvs -> LVS软件在Linux内核里已经安装
2、high-avaliability 高可用:vrrp协议(虚拟路由冗余协议)

keepalived启动之后会有三个进程:
父进程: 内存管理,子进程管理等
子进程: VRRP子进程
子进程: healthchecker子进程,查看各自服务器的健康状况

出错了可以看日志:/var/log/messages

两台负载均衡器上都需要安装nginx,使用nginx做七层负载均衡,

VRRP协议

virtual router redundancy protocol 虚拟路由冗余协议
一组路由器协同工作,担任不同工作,担任不同角色,有master角色,也有backup角色
master角色的路由器(的接口)承担实际的数量流量转发任务
backup路由器监听master路由器的状态,并在master路由器发生故障时,接替其工作,从而保证业务流量的平滑切换

vrrp协议工作在网络层
vrrp协议使用固定的组播地址224.0.0.18进行发送
帧的组播地址:目的地址 - 01:00:5E:00:00:12
第8位为1,代表这个mac地址是一个广播地址

vrrp协议的工作原理:

  1. 所有的路由器或服务器发生vrrp宣告报文,进行选举,必须是相同vrid和认证密码,优先级高的服务器或路由器会被选举为master
  2. master定时发生vrrp通告报文,以便向backup路由器告知自己的存活情况,默认时间间隔是1秒
  3. 接收master设备发送的vrrp通告报文,判断master设备的状态是否正常。如果超过1秒没有收到vrrp报文,就认为master挂了,开始重新选举新的master,vip会飘移到新的master上

单VIP架构

LB2:192.168.232.165

  1. 在两台LB上安装keepalived

    yum install keepalived -y
    
  2. 修改主LB的配置文件

    cd /etc/keepalived/
    vim keepalived.conf
    
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       #vrrp_strict    # 注释这一行
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state MASTER    # 主LB
        interface ens33
        virtual_router_id 58    # 虚拟路由器id
        priority 120    # 优先级(0~255)
        advert_int 1    # 宣告消息的间隔事件为1秒
        authentication {    # 认证
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {    # VIP
            192.168.232.111
        }
    }
    
  3. 修改从LB的配置文件

    cd /etc/keepalived/
    vim keepalived.conf
    
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
         acassen@firewall.loc
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from Alexandre.Cassen@firewall.loc
       smtp_server 192.168.200.1
       smtp_connect_timeout 30
       router_id LVS_DEVEL
       vrrp_skip_check_adv_addr
       #vrrp_strict
       vrrp_garp_interval 0
       vrrp_gna_interval 0
    }
    
    vrrp_instance VI_1 {
        state BACKUP    # 从LB
        interface ens33
        virtual_router_id 58
        priority 100    # 优先级要比主LB小
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.232.111
        }
    }
    
    
  4. 配置完成之后刷新服务

    service keepalived restart 
    

    这个时候就可以在主LB服务器上看到VIP,而从LB服务器上没有这个VIP。VIP在哪一个服务器上,就由哪一个服务器对外提供服务

VIP飘移

master挂了(或keepalived服务关闭),VIP就会飘移到slave上,这个时候就可以在从LB上看到这个VIP。如果master恢复,VIP就会飘会主LB上(优先级更高)

脑裂

多台机器出现同一个VIP

脑裂出现的原因:
1、vrid(虚拟路由id)不一样
2、网络通信有问题(防火墙组织了vrrp报文的通信)
3、认证密码不一样

双VIP架构(互为主从)

双VIP的架构可以实现负载均衡

只要将以下代码加入主LB的配置文件,作为第二个VIP的从服务器

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 59
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.232.112
    }
}

将以下代码加入从LB的配置文件,作为第二个VIP的主服务器

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 59
    priority 120
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.232.112
    }
}

这个时候就可以在主LB上看到192.168.232.111这个VIP,在从LB上看到192.168.232.112

完成高可用之后就可以在DNS服务器里添加这两个IP的记录了

keepalived监控 、执行脚本

Keepalived 可以通过检查状态来了解当前主服务器和备用服务器的状态

keepalived的基础是nginx服务,nginx服务停止了,就会检测为状态异常

实例:监控本机的nginx进程是否运行,如果nginx进程不运行就立马将优先级降低30

如何判断nginx是否运行
1、pidof nginx
2、查看kiilall -0 nginx这条命令的返回值

  1. 编写监控nginx脚本,授予可执行权限,也可以直接写在keepalived里

    mkdir /nginx
    cd /nginx
    vim check_nginx.sh
    
    #!/bin/bash
    if /usr/sbin/pidof nginx &>/dev/null ;then
    	exit 0
    else
    	exit 1
    fi
    
    chmod +x check_nginx.sh
    
  2. 在keepalived里定义并调用监控脚本

    # 在global_defts部分后面加:
    # 定义监控脚本chk_nginx
    # 当脚本执行返回值为1时才会执行下面权重值-30的操作
    vrrp_script chk_nginx {
    	script "/nginx/check_nginx.sh"
    	interval 1    # 每隔一秒执行
    	weight -30    # 返回值为0时就把优先级-30
    }
    
    #主LB在vrrp_instance VI_1中添加,从在VI_2中添加:
    # 调用监控脚本
    track_script {
    	chk_nginx
    }
    

    是master的那个vrrp实例调用vrrp监控脚本

notify

notify脚本是当本节点服务器成为某个角色的时候,就会去执行某个脚本文章来源地址https://www.toymoban.com/news/detail-702784.html

# 状态改变为master后执行的脚本
notify_master "/mail/master.sh"

# 状态改变为backup后执行的脚本
notify_backup "/mail/backup.sh"

# vrrp停止后执行的脚本
notify_stop "/mail/stop.sh"

到了这里,关于nginx两台负载均衡服务器之间使用keepalived实现高可用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式 - 服务器Nginx:一小时入门系列之负载均衡

    跨多个应用程序实例的负载平衡是一种常用技术,用于优化资源利用率、最大化吞吐量、减少延迟和确保容错配置。‎使用 nginx 作为非常有效的HTTP负载平衡器,将流量分配到多个应用程序服务器,可以提升Web应用程序的性能,提高扩展性和可靠性。 使用 upstream 定义一组服务

    2024年02月12日
    浏览(33)
  • nginx连接前后端分离项目 或 负载均衡映射多个服务器

    nginx的两种用法: 打通前后端项目,前后端分离的项目,通过nginx建立连接 负载均衡,一台机器请求转发至多个服务器 前端项目中的配置: 后端项目的ip和端口号就是正常的 下面看看nginx的配置文件: 将打包后的前端项目放这里: vue项目打包后会生成一个dist文件夹 放在服

    2024年02月05日
    浏览(41)
  • 【Nginx】负载均衡当其中一台服务器宕机之后

    搭建一个简单的负载均衡,然后关闭其中一台再来访问,会发现我们的浏览器卡住一直转圈圈,过了很久才会显示结果。由此我们可以得出结论Nginx负载的时候如果其中一台服务挂掉了,它会把请求转发到另一个可以提供服务的机器,其中这之间的超时等待默认是60s。我们可

    2024年02月08日
    浏览(33)
  • haproxy服务器对nginx服务器web服务调度负载均衡、用nfs做共享目录(脚本部署)

    目录 一、准备 二、在作为haproxy的服务器上导入以下shell执行haproxy安装 三、由于nginx服务需要用的nfs共享目录,先部署nfs 四、nginx服务器1部署 五、nginx服务器2部署同上 六、测试 一、准备 四台服务器 系统 IP 搭建服务器 centos7 192.168.1.12 haproxy centos7 192.168.1.132 nfs(rpcbind) ce

    2024年02月09日
    浏览(35)
  • Web服务器群集:Nginx+Tomcat实现负载均衡与动静分离集群

    目录 一、理论 1.多实例 2.Nginx负载均衡 3.Nginx动静分离 4.配置Nginx+Tomcat负载均衡 5.配置Nginx+Tomcat动静分离集群 6.Nginx 四层代理配置 二、实验 1.配置Nginx+Tomcat负载均衡 2.、配置Nginx+Tomcat动静分离集群 三、问题 1.服务器群集与集群的区别 2.正向代理与反向代理的区别 四、总结 (

    2024年02月11日
    浏览(33)
  • 分布式 - 服务器Nginx:一小时入门系列之TCP反向代理和负载均衡

    1. HTTP反向代理和TCP反向代理 Nginx可以作为HTTP反向代理和TCP反向代理。 HTTP反向代理是指Nginx作为Web服务器的代理服务器,接收客户端的HTTP请求,然后将请求转发给后端的Web服务器,最后将Web服务器的响应返回给客户端。这种方式可以实现负载均衡、缓存、SSL终止等功能。 T

    2024年02月11日
    浏览(35)
  • 如何在两台服务器之间传输文件

    问题描述: 实验室有两台服务器:240和53。 师兄的工作是在初始的240服务器上完成的,因此环境、数据集也保存在上面;当我尝试复现实验、跑通代码时,就面临这样一个问题:我的环境和代码均在新的53服务器上,而经过“清洗”的数据集却在以前的240服务器上面…然而,

    2024年02月04日
    浏览(34)
  • 两台服务器分别绑定一台交换机,两台服务器之间网络却ping不通,怎么办?

    如果两台服务器分别绑定在同一台交换机上,但是它们之间无法互相ping通,可能有以下几种原因导致。 1.检查网络连接: 确保两台服务器的网线正确连接到交换机的可用端口。检查连接的物理状态,包括插头是否牢固、灯光指示是否正常等。 2.验证IP配置: 确保两台服务器

    2024年02月06日
    浏览(26)
  • 两台linux服务器之间传输文件的几种方法

    打开powershell, 开始连接服务器 然后输入密码后就进来了,进入之后找到你要传输文件的位置 接下来我要将这个包传到另一个环境中去,有以下几种方法 scp 示例: 将本地服务器的文件传向另一个服务器 wget 【用法】 wget是一个从网络上自动下载文件的自由工具,支持通过HT

    2024年02月12日
    浏览(40)
  • [linux]两台Linux服务器之间传输文件的四种方法

    在日常服务器租用中,有时需要将文件从一台服务器传到另一台服务器,下面给大家介绍四种linux服务器之间传输文件方式。 【优点】简单方便,安全可靠;支持限速参数 【缺点】不支持排除目录 【用法】 scp就是secure copy,是用来进行远程文件拷贝的。数据传输使用 ssh,并

    2024年04月12日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包