高并发负载均衡(四):基于keepalived的LVS高可用搭建

    技术2026-06-12  10

    LVS四层 & Nginx七层 对比

    你要分清哪些程序是应用层的,哪些程序是内核的。 LVS四层负载均衡服务器,是不会碰握手这一个步骤的。 Nginx是基于反向代理(七层)的负载均衡服务器,要先握手建立连接,才能取到URI,在判定location是否匹配,然后才将URI传递给后面的服务器。 server返回数据时,是需要过Nginx服务器的,而使用LVS的时候不会过LVS服务器。

    学习 keepalived 之前,关于高可用,你需要知道:

    1、如果你的LVS负载均衡服务器挂掉了,你整个公司的业务就下线了,这是不能容忍的。 这属于单点故障。 解决方法:一变多!但是入口的IP地址只能有一个,怎么变多?怎么实现多点?有2种形式:要么是主备,要么是主主 主备模型:备用机要以最快的速度接管原来的VIP(virtual IP),只有主机对外提供服务,只有主机挂了的时候,备机才顶上去。 主主模型:所有的LVS都是主,现在要借用其他形式搞定只有一个的入口IP地址,比如动态DNS。主和主之间是协作的形式。 我们首先讨论主备,有两个点需要考虑:方向性、效率性。

    怎么知道主机挂没挂? 可以由备机轮询主机,但是这样会对主或多或少造成一些压力。 可以由主机发广播到所有的备机,但是网络是不可靠的,所以有一种重试机制。

    如果已经确定主机挂了,谁来作为新的主机? 使用加权重的方式,这也是paxos和zookeeper的区别。官方压测200ms就能选出新的主机出来。

    2、如果你后台的某一个RS(Real Server)挂掉了,负载均衡服务器还会对另外两台正常连接,会造成一部分人的业务请求异常,另一部分人的业务正常。

    怎么知道RS挂了?可以用ping吗? 不可以!ping命令是网络层的只能检验网络能不能通,连TCP握手都不做,而web服务是应用层的。能ping通不能代表web服务可用。那怎么知道RS挂没挂?最简单的方式是“访问一下”。 “访问一下”这个操作,它的底层验证的是 应用层的HTTP协议,你发一个请求,返回的是200ok,就说明是可用的。

    LVS内核中有模块:ipvs负载均衡模块。你想要检测各个RS是否可用的话,可以直接去修改模块的源码,也可以使用第三方实现。第三方可以是人,也可以是自动化(也就有了自动化运维)。

    这个自动化的程序就是keepalived!它可以代替人工,实现自动运维。解决LVS单点故障,实现HA

    keepalived

    (1)监控自己的LVS服务 (2)每一台机器上都安装keepalived。Master(主机)通告自己还活着,Backup(备机)监听Master状态。如果Master挂了,一堆Backup推举选出一个新的Master. (3)你不需要再手动配置VIP,添加LVS(ipvs模块)配置,只需要写到配置文件中即可。 (4)对后端的RS(real server)做健康检查,及时剔除不可用的节点 (5)最后,keepalived不仅仅用来解决LVS,它是一个通用的环境,主要作为linux上的HA的实现。例如,当你并发量不大的时候,nginx可以作为公司的负载均衡来使用,此时nginx成为了单点故障。这个问题也可以用keepalived来解决。

    keepalived 实验手册

    步骤说明

    另外,可以参考Keepalived之——Keepalived + Nginx 实现高可用 Web 负载均衡,写的比较详细


    一些过程记录

    清空原来的负载记录

    卸掉原来配置的VIP,因为keepalived会帮你去配。 虚拟路由冗余协议 VRRP使用选举机制来确定路由器的状态(Master或Backup)。运行VRRP的一组路由器对外组成了一个虚拟路由器,其中一台路由器处于Master状态,其他的处于Backup状态。

    关于keepalived配置文件 可以使用man 5 keepalived.conf查看它的配置文件的帮助文档(并不是所有软件的配置文件都有帮助文档,只是它刚好提供了)

    Processed: 0.010, SQL: 9