0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于LVS+Keepalived实现高可用负载均衡

马哥Linux运维 来源:cnblogs 2024-04-09 12:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的。此时最常见的方式就是通过负载均衡来进行横向扩展。其中我们最常用的软件就是 Nginx。通过其反向代理的能力能够轻松实现负载均衡,当有服务出现异常,也能够自动剔除。但是负载均衡服务自身也可能出现故障,因此需要引入其他的软件来实现负载均衡服务的高可用。本文就介绍了一种基于 LVS+Keepalived 的方式,来实现高可用 Web 集群。

LVS 与 Keepalived

LVS 是一种预装在 Linux 系统中,基于四层、具有强大性能的反向代理服务器。ipvsadm 是 LVS 的命令行管理工具。

LVS 特点是:

首先它是基于 4 层的网络协议的,抗负载能力强,对于服务器的硬件要求除了网卡外,其他没有太多要求;

配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,大大减少了人为出错的几率;

应用范围比较广,不仅仅对 web 服务做负载均衡,还可以对其他应用(mysql)做负载均衡;

LVS 架构中存在一个虚拟 IP 的概念,需要向 IDC 多申请一个 IP 来做虚拟 IP。

Keepalived 是一个基于 VRRP 协议来实现的服务高可用方案,可以利用其来避免 IP 单点故障,一般与其它负载均衡技术(如 LVS 、HAProxy 、Nginx)一起工作来达到集群的高可用。Keepalived 是 LVS 的扩展项目, 因此它们之间具备良好的兼容性,可直接通过 Keepalived 的配置文件来配置 LVS。

LVS 的工作原理可见参考文献

关于 LVS 和 Keepalived 详细的结构和原理,以及 LVS 和我们常用的 LB 软件 Nginx 的异同,可以阅读末尾提供的参考文献。接下来将介绍如何部署一个高可用的负载均衡集群。

相关术语

LB (Load Balancer 负载均衡)

HA (High Available 高可用)

Failover (失败切换)

Cluster (集群)

LVS (Linux Virtual Server Linux 虚拟服务器)

DS (Director Server),指的是前端负载均衡器节点

RS (Real Server),后端真实的工作服务器

VIP (Virtual IP),虚拟的 IP 地址,向外部直接面向用户请求,作为用户请求的目标的 IP 地址

DIP (Director IP),主要用于和内部主机通讯的 IP 地址

RIP (Real Server IP),后端服务器的 IP 地址

CIP (Client IP),访问客户端的 IP 地址

测试环境

软件环境:CentOS7、Keepalived1.3.5、ipvsadm1.27

DS1(MASTER):172.17.13.120

DS1(BACKUP):172.17.13.123

RS1:172.17.13.142:80 Nginx

RS1:172.17.13.173:80 Nginx

VIP:172.17.13.252

                              |
             +----------------+-----------------+
             |                                  |
172.17.13.120|----     VIP:172.17.13.252    ----|172.17.13.123
     +-------+--------+                +--------+-------+
     |     DS1       |                |       DS2      |
     | LVS+Keepalived |                | LVS+Keepalived |
     +-------+--------+                +--------+-------+
             |                |
             +----------------+-----------------+
                              |
  +------------+              |               +------------+
  |     RS1    |172.17.13.142 |  172.17.13.173|     RS2    |
  | Web Server +--------------+---------------+ Web Server |
  +------------+                              +------------+

集群的架构图如上图所示。DS1、DS2 为两个 LB 节点,RS1、RS2 为两个真实的服务节点,通过一个虚拟的 IP 地址对外提供服务。

最终我们要达到的目标为:

Client 通过 VIP 访问服务能够将请求根据配置的规则进行分发(LB)

当 MATSER 的 LB 节点故障时,自动切换到 BACKUP 的 LB 节点上,保证服务正常访问;MASTER 恢复后,再次作为主 LB 负载节点

当某个 RS 节点故障时,自动剔除该节点;恢复后,再次加入集群

详细配置流程

安装相关软件

[root@localhost ~]# yum install ipvsadm keepalived -y

配置 Keepalived

DS1(MASTER) 节点

[root@localhost ~]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER            # 两个 DS,一个为 MASTER 一个为 BACKUP
    interface enp1s0        # 当前 IP 对应的网络接口,通过 ifconfig 查询
    virtual_router_id 62    # 虚拟路由 ID(0-255),在一个 VRRP 实例中主备服务器 ID 必须一样
    priority 200            # 优先级值设定:MASTER 要比 BACKUP 的值大
    advert_int 1            # 通告时间间隔:单位秒,主备要一致
    authentication {        # 认证机制,主从节点保持一致即可
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.17.13.252       # VIP,可配置多个
    }
}

# LB 配置
virtual_server 172.17.13.252 80  {
    delay_loop 3                    # 设置健康状态检查时间
    lb_algo rr                      # 调度算法,这里用了 rr 轮询算法
    lb_kind DR                      # 这里测试用了 Direct Route 模式
    persistence_timeout 50          # 持久连接超时时间
    protocol TCP
real_server 172.17.13.173 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3      # 旧版本为 nb_get_retry 
            delay_before_retry 3
            connect_port 80
        }
    }
 real_server 172.17.13.142 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

DS2(BACKUP) 节点

复制之前的配置文件,修改vrrp_instance VI_1中的state为BACKUP。

配置完成后,分别重启 Keepalived 服务。

[root@localhost ~]# systemctl restart keepalived

配置 RS

RS 配置主要分两部分,一部分是 web 服务,另一部分是网络转发配置。

web 服务部署不多展开了,根据实际情况来,可以是 Tomcat 也可以是 Nginx,只要能通过 ip:port 能访问到即可。

在网络转发配置上,LVS 支持多种通信模型(NAT、DR、TUN),本文采用 DR 模型来进行通信,大致的流程如下图所示。请求数据包从到达 LB 后,LVS 会将这个数据包的 MAC 地址改成轮询到的 RS 的 MAC 地址,并丢给交换机;RS 收到后进行处理并从网卡的 lo 端口发送出去,响应报文到达交换机后直接转发给 Client。

f76f4746-f58e-11ee-a297-92fbcf53809c.png

因此,我们需要在 RS 的网卡上配置 lo 为 VIP。配置脚本如下

#!/bin/bash 
SNS_VIP=172.17.13.252
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

本地创建完后,并执行。

[root@localhost ~]# chmod a+x lvs-web.sh
[root@localhost ~]# ./lvs-web.sh start

配置完成后,通过 VIP 就可以访问到 RS 上的服务了。

HA 测试

配置完双机热备后,我们就可以测试下,节点发生故障后以及 LB 切换失败后,能否保证服务的 HA。

在 LB 的主节点上输入ip a,可以看到 VIP 目前已经正确配置在网卡上。

f7857fd4-f58e-11ee-a297-92fbcf53809c.png

输入watch ipvsadm -Ln --stats可实时看到负载均衡的结果,正常。

f798fd16-f58e-11ee-a297-92fbcf53809c.png

接下面我们试着访问一下 VIP。

[root@localhost ~]# while true ; do curl 172.17.13.252; sleep 1;done

看到服务可正常轮询。

f7af6baa-f58e-11ee-a297-92fbcf53809c.png

此时手动停止一个 RS,再次访问 VIP,LVS 会自动剔除无法访问的服务,重启后,服务会被自动添加。

f7bd2542-f58e-11ee-a297-92fbcf53809c.png

f7d019ea-f58e-11ee-a297-92fbcf53809c.png

如果此时,手动停止 MASTER 上的 Keepalived,模拟 LB MASTER 节点挂了,VIP 会自动飘到 BACKUP LB 上。

f7e910b2-f58e-11ee-a297-92fbcf53809c.png

f8037664-f58e-11ee-a297-92fbcf53809c.png

此时,如果重启 MASTER 后,VIP 又会飘回去。MASTER 的优先级高于 BACKUP,从而实现 HA。

f819eb9c-f58e-11ee-a297-92fbcf53809c.png

总结

本文介绍了使用 LVS+Keepalived 来实现高可用负载均衡,这能使得我们的服务能够更加的稳定。Keepalived 默认是运行在 LVS 之上的,有较好的兼容性,当然我们也可以使用户 Nginx 作为 LB 的软件,可根据业务和两者的异同进行选择。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1302

    浏览量

    73710
  • 服务器
    +关注

    关注

    13

    文章

    10108

    浏览量

    90968
  • 网络协议
    +关注

    关注

    3

    文章

    274

    浏览量

    22565
  • 数据包
    +关注

    关注

    0

    文章

    269

    浏览量

    25444
  • 负载均衡
    +关注

    关注

    0

    文章

    128

    浏览量

    12820

原文标题:你必须会的LVS高可用负载均衡方案

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    解析keepalived+nginx实现可用方案技术

    的位置,Nginx的可用影响到整个系统的稳定性。如果nginx服务器宕机,后端web服务将无法提供服务,影响严重。所以如何保证Nginx 的稳定和可用非常重要,接下来就来介绍Ngi
    的头像 发表于 09-30 15:52 4390次阅读
    解析<b class='flag-5'>keepalived</b>+nginx<b class='flag-5'>实现</b><b class='flag-5'>高</b><b class='flag-5'>可用</b>方案技术

    负载均衡器的诞生和工作机制

    今天我们来深度揭秘一下负载均衡LVS 的秘密,相信大家看了你管这破玩意儿叫负载均衡?这篇文章后,还是有不少疑问,比如
    的头像 发表于 01-04 12:26 1823次阅读
    <b class='flag-5'>负载</b><b class='flag-5'>均衡</b>器的诞生和工作机制

    基于KeepAlive的可用配置

    KeepAlived集群可用搭建
    发表于 06-11 16:36

    16nginx+keepalived +zuul如何实现可用负载均衡

    学习笔记微服务-16 nginx+keepalived +zuul 实现可用负载均衡
    发表于 05-22 10:16

    Keepalived+Haproxy如何实现可用负载综合实验

    Keepalived+Haproxy实现可用负载综合实验
    发表于 06-02 16:53

    双机热备与负载均衡的设计与实现

    针对OpenFlow SDN系统中的策略管理模块提出了一种新型的双机热备和负载均衡方案,采用了服务器集群的方式,通过Keepalived和Heartbeat实现了双机热备模块,通过Ng
    发表于 12-24 17:57 10次下载

    云环境中基于LVS集群的负载均衡算法

    为了解决传统负载均衡技术应用到云计算环境中引发的新问题,提出一种云环境下基于LVS集群分组负载均衡算法。该算法首先根据硬件性能计算各节点的权
    发表于 11-24 11:05 1次下载
    云环境中基于<b class='flag-5'>LVS</b>集群的<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>算法

    超详细!使用 LVS 实现负载均衡原理及安装配置详解

    负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡
    发表于 01-21 14:01 1551次阅读

    keepalivedLVS概述,KeepAlived工作原理

    Checkers :此功能模块主要负责真实服务器的健康检查( HealthChecking ),是Keepalived最主要的功能之一,因为HealthChecking是负载均衡功能稳定运行的基础,
    的头像 发表于 06-25 14:08 5.6w次阅读
    <b class='flag-5'>keepalived</b>及<b class='flag-5'>LVS</b>概述,<b class='flag-5'>KeepAlived</b>工作原理

    搭建Keepalived+Lvs+Nginx可用集群负载均衡

    Server)实现可用负载均衡 附:LVS负载
    的头像 发表于 06-25 15:39 4082次阅读
    搭建<b class='flag-5'>Keepalived+Lvs</b>+Nginx<b class='flag-5'>高</b><b class='flag-5'>可用</b>集群<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>

    nginx负载均衡配置介绍

    目录 nginx负载均衡 nginx负载均衡介绍 反向代理与负载均衡 nginx
    的头像 发表于 11-10 13:39 1261次阅读
    nginx<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>配置介绍

    确保网站无缝运行:Keepalived可用与Nginx集成实战

    nginx负载均衡可用 脑裂 脑裂产生的原因 脑裂的常见解决方案 对脑裂进行监控 keepalived简介
    的头像 发表于 11-27 09:08 1643次阅读
    确保网站无缝运行:<b class='flag-5'>Keepalived</b><b class='flag-5'>高</b><b class='flag-5'>可用</b>与Nginx集成实战

    常见的lvs负载均衡算法

    散列(SH)、最短期望延迟(SED)和无需队列(NQ)等,它们根据服务器性能、连接数、请求目标或源IP等因素,实现请求的均衡分配,适用于不同应用场景。 以下是UU云小编对LVS负载
    的头像 发表于 12-12 13:50 958次阅读

    Keepalived详解

    的地址转移到可用LVS节点实现。所以keepalive的可用是属于具有很强针对性的
    的头像 发表于 02-19 10:20 1282次阅读
    <b class='flag-5'>Keepalived</b>详解

    华纳云:海外服务器负载均衡可用架构设计

    有效分担流量压力、提升系统稳定性和用户体验。在实际部署中,需要从负载分配策略、健康检查机制、故障切换、数据同步以及监控告警等多个层面系统规划。 负载均衡实现
    的头像 发表于 08-28 18:32 493次阅读