当前位置: 首页 > news >正文

LVS + Keepalived + Nginx 高可用负载均衡系统实验

1. 项目背景

在现代 Web 应用中,高可用性和负载均衡是至关重要的需求。本项目旨在通过 LVS(Linux Virtual Server)实现流量分发,通过 Keepalived 实现高可用性,通过 Nginx 提供后端服务。该架构能够确保在单点故障的情况下,系统仍然能够正常运行,并且能够均衡地分配流量到多个后端服务器。

2. 环境准备

2.1 服务器角色及 IP 规划
服务器角色操作系统内网 IP (ens160)VIP安装软件
LVS 主节点CentOS 7192.168.65.131

192.168.65.100 (lvs-ens160)

192.168.65.101(keepalived-ens160)

ipvsadm, Keepalived
LVS 备节点CentOS 7192.168.65.132

192.168.65.100 (lvs-ens160)

192.168.65.101(keealived-ens160)

ipvsadm, Keepalived
后端 Web 服务器 1CentOS 7192.168.65.133192.168.65.100 (lvs-lo)Nginx
后端 Web 服务器 2CentOS 7192.168.65.134192.168.65.100 (lvs-lo)Nginx
2.2 实验前准备
  1. 关闭 SELinux,以避免对实验造成干扰。

    sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    sudo reboot
  2. 开启防火墙并放行必要的端口,确保负载均衡和高可用性功能正常工作。

3. 服务器网络环境配置

3.1 设置静态 IP 地址

为确保服务器在重启后仍能保持固定的网络配置,使用 nmcli 设置静态 IP 地址。

LVS 主节点(192.168.65.131)
  1. 查看当前网络连接名称

    nmcli con show

    网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.131/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
LVS 备节点(192.168.65.132)
  1. 查看当前网络连接名称

    nmcli con show

    网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.132/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
后端 Web 服务器 1(192.168.65.133)
  1. 查看当前网络连接名称

    nmcli con show

    假设网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.133/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
后端 Web 服务器 2(192.168.65.134)
  1. 查看当前网络连接名称

    nmcli con show

    网络接口名称为 ens160

  2. 修改静态 IP 地址

    nmcli con mod ens160 ipv4.addresses 192.168.65.134/24 ipv4.gateway 192.168.65.2 ipv4.dns 8.8.8.8 ipv4.method manual
  3. 重新加载网络配置并重启网络服务

    nmcli con up ens160
3.2 配置主机名和主机映射

为便于在集群环境中快速识别和管理各服务器,需要为每台服务器配置主机名。

LVS 主节点(192.168.65.131)
  1. 设置主机名

    sudo hostnamectl set-hostname lvs-master
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   lvs-master
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
LVS 备节点(192.168.65.132)
  1. 设置主机名

    sudo hostnamectl set-hostname lvs-backup
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   lvs-backup
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服务器 1(192.168.65.133)
  1. 设置主机名

    sudo hostnamectl set-hostname webserver1
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   webserver1
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2
后端 Web 服务器 2(192.168.65.134)
  1. 设置主机名

    sudo hostnamectl set-hostname webserver2
  2. 更新 /etc/hosts 文件

    sudo vi /etc/hosts

    添加以下内容:

    127.0.0.1   webserver2
    192.168.65.131 lvs-master
    192.168.65.132 lvs-backup
    192.168.65.133 webserver1
    192.168.65.134 webserver2

3.3 配置防火墙规则

为保障网络安全,需要优化防火墙规则,开启必要的服务端口,同时关闭不必要的端口。使用 firewalld 配置防火墙:

  1. 开启 HTTP(80 端口)和 VRRP(112 端口)

    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=112/udp --permanent
    firewall-cmd --reload
  2. 验证防火墙规则

    firewall-cmd --list-all

    确保 80/tcp112/udp 端口已正确放行。

3.4 实现 SSH 免密登录

为提高运维效率并减少人为错误,需要实现 SSH 免密登录。生成 SSH 密钥对,并将公钥复制到所有服务器:

ssh-keygen -t rsa
ssh-copy-id lvs-backup
ssh-copy-id webserver1
ssh-copy-id webserver2

4. 软件安装与配置

4.1 LVS 主节点和备节点配置
4.1.1 安装 IPVS 和 Keepalived

在 LVS 主节点和备节点上安装必要的软件:

yum install -y ipvsadm keepalived
4.1.2 加载 IPVS 模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh

确保模块加载成功:

lsmod | grep ip_vs

4.1.3 配置 IP 转发

编辑 /etc/sysctl.conf 文件,添加或修改以下内容:

net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens160.send_redirects = 0

使配置生效:

sysctl -p

4.1.4 配置 VIP

在主节点上配置 VIP:

sudo nmcli con mod ens160 +ipv4.addresses 192.168.65.100/32
sudo nmcli con up ens160

4.1.5 配置 LVS 规则
  1. 清除原有 LVS 规则

    ipvsadm -C
  2. 添加虚拟服务器

    ipvsadm -A -t 192.168.65.100:80 -s rr
  3. 添加真实服务器

    ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.133:80 -g -w 1
    ipvsadm -a -t 192.168.65.100:80 -r 192.168.65.134:80 -g -w 1
  4. 查看lvs规则

    ipvsadm -Ln
  5. 保存 LVS 规则

    ipvsadm -S > /etc/sysconfig/ipvsadm
4.1.6 配置 Keepalived

编辑 /etc/keepalived/keepalived.conf 文件,配置 Keepalived 以实现主备切换,确保高可用性:

主节点(192.168.65.131)

global_defs {router_id LVS_MASTER
}
vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.101}
}

备节点(192.168.65.132)

global_defs {router_id LVS_BACKUP
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.65.101}
}
4.1.7 启动服务

启动并启用 IPVS 和 Keepalived 服务,确保配置生效:

sudo systemctl enable keepalived
sudo systemctl start keepalived

主节点获取keepalived-vip(192.168.65.101),备用节点未争取到

4.2 后端 Web 服务器配置
4.2.1 安装 Nginx

在后端 Web 服务器上安装 Nginx,为用户提供 Web 服务:

sudo yum install -y nginx
4.2.2 启动 Nginx 并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
4.2.3 修改 Nginx 默认页面(用于区分不同服务器)

Web 服务器 1(192.168.65.133)

echo "<h1>This is Real Server 1</h1>" > /usr/share/nginx/html/index.html

Web 服务器 2(192.168.65.134)

echo "<h1>This is Real Server 2</h1>" > /usr/share/nginx/html/index.html
4.2.4 配置 VIP

在真实服务器上配置 VIP:

sudo nmcli con add type loopback con-name lo ifname lo +ip4 192.168.65.100/32
sudo nmcli con up lo

4.2.5 调整 ARP 参数

编辑 /etc/sysctl.conf 文件,添加以下内容:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

使配置生效:

sysctl -p

5. 测试与验证
5.1 验证 LVS 和 Keepalived
5.1.1 正常访问测试

验证客户端是否能够通过虚拟 IP 正常访问后端服务器:

curl 192.168.65.100

预期结果:返回 This is Real Server 1This is Real Server 2

5.1.2 主节点故障模拟

验证在主节点故障时,备节点是否能够正常接管虚拟 IP:

在主节点(192.168.65.131)上停止 Keepalived 服

systemctl stop keepalived

主节点失去vip  

备用节点获取vip

5.2 验证 Nginx

验证后端服务器的 Nginx 服务是否正常运行:

curl http://192.168.65.133
curl http://192.168.65.134

预期结果:分别返回 This is Real Server 1This is Real Server 2

用客户机和windows端测试: 

 

相关文章:

  • 学习黑客 tcpdump
  • 如何在UI设计中更好地平衡美学与功能性?
  • IP-guard发布新版本4.87.2241.0
  • css 里面写if else 条件判断
  • [Windows] 格式工厂 FormatFactory v5.20.便携版 ——多功能媒体文件转换工具
  • 禅道——安装PHP的ioncube扩展
  • wordpress上传图片时出现服务器无法处理图片
  • 高通usecase理解
  • 对接钉钉消息样例:DING消息、机器人
  • iOS 直播弹幕礼物功能详解
  • 多模态AI终极形态?GPT-5与Stable Diffusion 3的融合实验报告
  • 【49. 字母异位词分组】
  • iOS 上线前的性能与稳定性检查流程实录:开发者的“最后一公里”(含 KeyMob 应用经验)
  • C# 高效读取大文件
  • Spark on Yarn 高可用模式部署流程
  • 如何提高服务器的QPS来应对618活动的并发流量
  • 如何将带有LFS对象的git仓库推送到gitlab
  • 前端(小程序)学习笔记(CLASS 2):WXML模板语法与WXSS模板样式
  • C语言实现顺序存储结构
  • PostgreSQL中的权限管理简介
  • 慈利网站开发/搜索排名查询
  • 知名的政府网站建设企业/沈阳优化网站公司
  • 如何将网站做的更美观/今天的新闻 联播最新消息
  • 现在允许做网站吗/有产品怎么找销售渠道
  • 建筑设计app推荐/如何优化网络延迟
  • 济南网站建设内容设计/免费培训课程