LVS+Keepalived:实现高效软负载均衡的利器

一、概念

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统,它可以通过不同的调度算法和工作模式,将客户端的请求转发给后端的真实服务器。

Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,一般与其他负载均衡技术(如LVS、HAProxy、Nginx)一起工作来达到集群的高可用

二、环境准备

两台 CentOS 7 机器,IP 地址分别为 10.9.2.121和 10.9.2.122。

vip 10.9.2.120 虚拟出来的IP
master 10.9.2.121 master主机IP
backup 10.9.2.122 backup主机IP

三、安装

1、安装 ipvsadm keepalived

在两台机器上,执行以下命令,安装 ipvsadm keepalived 软件包:

yum install -y ipvsadm  keepalived

2、配置keepalived

在master机器上,执行以下命令,配置 Keepalived:

bash 复制代码
vim /etc/keepalived/keepalived.conf

添加以下内容:

kotlin 复制代码
global_defs {
   router_id 1
}
vrrp_instance VI_1 {
    state MASTER
    interface enp0s3
    virtual_router_id 1
    mcast_src_ip 10.9.2.121
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.9.2.120
    }
}

在 backup机器上,执行以下命令,配置 Keepalived:

bash 复制代码
vim /etc/keepalived/keepalived.conf

添加以下内容:

kotlin 复制代码
global_defs {
   router_id 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface enp0s3
    virtual_router_id 1
    mcast_src_ip 10.9.2.122
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        10.9.2.120
    }
}

保存并退出。

参数说明:

global_defs {

router_id 1 # 定义 VRRP 组的 ID,主备服务器必须相同

}

authentication { # 定义 VRRP 认证类型和密码,主备服务器必须相同

auth_type PASS

auth_pass 123456

}

vrrp_instance VI_1 {

state MASTER # 指定该节点的状态,主节点为 MASTER,备节点为 BACKUP

interface eth0 # 指定VRRP使用的网卡,换成master机器的网卡名称

virtual_router_id 1

mcast_src_ip 10.9.2.121 # 指定 VRRP 使用的组播源 IP 地址

priority 100 # 指定 VRRP 优先级,优先级越高,该节点成为主节点的概率越大

advert_int 1 # 指定 VRRP 通告间隔,单位为秒

virtual_ipaddress { # 指定 VRRP 虚拟 IP 地址

10.9.2.120

}

}

3、启动

在两台机器上,执行以下命令,启动 LVS 和 Keepalived:

sql 复制代码
systemctl start keepalived
systemctl start ipvsadm

如果systemctl start ipvsadm异常

Active: failed (Result: exit-code) since Fri 2023-09-01 14:31:28 CST; 5min ago

Process: 3618 ExecStart=/bin/bash -c exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm (code=exited, status=1/FAILURE)

lua 复制代码
systemctl status ipvsadm.service
journalctl -xe

可以看到/bin/bash: /etc/sysconfig/ipvsadm: No such file or directory

javascript 复制代码
ipvsadm   --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl status ipvsadm.service

4、测试

看看是否能ping通

ping 10.9.2.120

再在master和backup机器上都安装一个nginx或apache httpd

bash 复制代码
#master
yum install -y httpd
echo "Master" > /var/www/html/index.html
systemctl start httpd

#backup
yum install -y httpd
echo "Backup" > /var/www/html/index.html
systemctl start httpd

在浏览器访问:http://10.9.2.120

master优先级高,10.9.2.120显示的是master。

再来模拟一下故障转移测试

在 10.9.2.121 机器上,执行以下命令,停掉 LVS:

arduino 复制代码
systemctl stop keepalived

如果 LVS 配置正确,Keepalived 会自动将 VIP 切换到 10.9.2.122。

再在浏览器访问:http://10.9.2.120

注意事项

  • LVS 和 Keepalived 的配置文件中,virtual_ipaddress 配置的 IP 地址必须是同一网段的。
  • LVS 和 Keepalived 的配置文件中,priority 配置的值越高,该节点的优先级越高。
  • Keepalived 的配置文件中,advert_int 配置的值越小,该节点发送 VRRP 报文的频率越高

四、相关知识点

1、集群负载均衡网络方案

实现集群负载均衡网络的方案可以分为软件、硬件、云等方面:

软件负载均衡

软件负载均衡是指在现有服务器上安装负载均衡软件来实现负载均衡,其优点是成本低廉、配置简单、灵活性强,适用于中小型集群。常见的软件负载均衡方案包括:

  • DNS轮询:将所有后端服务器的IP地址添加到DNS服务器,并按照轮询的方式返回给客户端,客户端根据返回的IP地址进行访问。
  • Keepalive+LVS:在Linux操作系统上使用Keepalive机制和LVS功能来实现负载均衡。Keepalive机制用于检测后端服务器的状态,ipvs功能用于将客户端请求转发到后端服务器。
  • Keepalive+Nginx+Lua:Nginx是一个高性能的Web服务器,Lua是一个脚本语言。Nginx+Lua负载均衡方案是将Nginx作为负载均衡器,使用Lua脚本来实现负载均衡策略。

硬件负载均衡

硬件负载均衡是指使用专门的负载均衡设备来实现负载均衡,其优点是性能高、功能丰富、可靠性强,适用于大型集群。常见的硬件负载均衡方案包括:

  • F5 Big-IP:F5 Big-IP是F5 Networks公司推出的一款高性能负载均衡设备。
  • A10 Thunder:A10 Thunder是A10 Networks公司推出的一款高性能负载均衡设备。
  • Juniper SRX:Juniper SRX是Juniper Networks公司推出的一款高性能路由器,具有负载均衡功能。

云负载均衡

云负载均衡是指在云平台上使用负载均衡服务来实现负载均衡,其优点是部署简单、弹性伸缩、按需付费,适用于各种规模的集群。常见的云负载均衡方案包括:

  • 阿里云负载均衡:阿里云负载均衡提供多种类型的负载均衡服务,包括传统的四层负载均衡和七层负载均衡。
  • 腾讯云负载均衡:腾讯云负载均衡提供多种类型的负载均衡服务,包括传统的四层负载均衡和七层负载均衡。
  • AWS负载均衡:AWS负载均衡提供多种类型的负载均衡服务,包括传统的四层负载均衡和七层负载均衡。

2、LVS+Keepalived

LVS

LVS(Linux Virtual Server)是 Linux 内核中的软件负载均衡器,可以将流量分发到多个服务器。LVS 可以分为两种模式:

  • NAT 模式:LVS 将客户端的请求转换为新的 IP 地址和端口,然后将请求转发到后端服务器。
  • DR 模式:LVS 将客户端的请求直接转发到后端服务器。

LVS 是基于四层的负载均衡器,可以将流量分发到多个服务器。LVS 的核心是 LVS 转发器,LVS 转发器负责将客户端的请求转发到后端服务器。LVS 转发器可以运行在 Linux 内核中,也可以运行在用户空间。

LVS 的优点

  • 高可用性:LVS 可以实现主备切换,确保服务的持续可用性。
  • 灵活性:LVS 支持多种负载均衡算法,可以满足不同场景的需求。
  • 性能:LVS 基于 Linux 内核,具有良好的性能。

Keepalived

Keepalived 是一个基于 VRRP 协议的软件,用于监控 LVS 的健康状况。VRRP 协议是一种虚拟路由冗余协议,用于在多个路由器之间实现主备切换。

Keepalived 的主要功能是监控 LVS 主节点的状态,如果主节点出现故障,Keepalived 会自动将 LVS 的 VIP 切换到备节点。

Keepalived 的优点

  • 高可用性:Keepalived 可以实现 LVS 的主备切换,确保服务的持续可用性。
  • 灵活性:Keepalived 支持多种 VRRP 配置,可以满足不同场景的需求。
  • 性能:Keepalived 基于 Linux 内核,具有良好的性能。

如果文章对你有帮助,欢迎关注+点赞,必回关!!!

相关推荐
2301_819287121 小时前
ce第六次作业
linux·运维·服务器·网络
CIb0la1 小时前
GitLab 停止为中国区用户提供 GitLab.com 账号服务
运维·网络·程序人生
武汉联从信息1 小时前
如何使用linux日志管理工具来管理oracle osb服务器日志文件?
linux·运维·服务器
天天进步20151 小时前
STUN服务器实现NAT穿透
运维·服务器
刘大辉在路上1 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
PieroPc1 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
冷曦_sole2 小时前
linux-19 根文件系统(一)
linux·运维·服务器
AI大模型学徒3 小时前
Linux(二)_清理空间
linux·运维·服务器
tntlbb3 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
追逐时光者3 小时前
免费、简单、直观的数据库设计工具和 SQL 生成器
后端·mysql