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端测试: 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/906608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

window 显示驱动开发-视频内存供应和回收(一)

Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本用户模式显示驱动程序必须使用内存套餐和回收功能&#xff08;从Windows 8开始提供&#xff09;&#xff0c;以减少本地内存和系统内存中临时表面所需的内存开销。 最低 WDDM 版本&#xff1a;1.2 最低 Windows 版本&#xff…

什么是VR场景?VR与3D漫游到底有什么区别

在数字化时代&#xff0c;虚拟现实&#xff08;Virtual Reality, 简称VR&#xff09;场景与3D漫游作为两种前沿技术&#xff0c;改变着人们的生活方式和体验模式。通过计算机模拟真实或假想的场景&#xff0c;让用户仿佛身临其境&#xff0c;并能与虚拟环境进行互动。尽管VR场景…

JAVA查漏补缺(2)

AJAX 什么是Ajax Ajax&#xff08;Asynchronous Javascript And XML&#xff09;&#xff0c;即是异步的JavaScript和XML&#xff0c;Ajax其实就是浏览器与服务器之间的一种异步通信方式 异步的JavaScript 它可以异步地向服务器发送请求&#xff0c;在等待响应的过程中&…

客服中心大模型应用演进路线:从传统服务到超级智能助手的转型

客服中心作为企业与客户沟通的重要桥梁&#xff0c;近年来经历了从人工服务到人工智能驱动的深刻变革。本文基于"客服中心大模型应用演进路线图"&#xff0c;详细解析客服中心从传统模式向AI驱动智能服务的转型历程&#xff0c;剖析每个发展阶段的特点、应用场景及关…

使用 OpenCV 实现“随机镜面墙”——多镜片密铺的哈哈镜效果

1. 引言 “哈哈镜”是一种典型的图像变形效果&#xff0c;通过局部镜面反射产生扭曲的视觉趣味。在计算机视觉和图像处理领域&#xff0c;这类效果不仅有趣&#xff0c;还能用于艺术创作、交互装置、视觉特效等场景。 传统的“哈哈镜”往往是针对整张图像做某种镜像或扭曲变换…

Python训练营打卡——DAY33(2025.5.22)

目录 简单的神经网络 一、PyTorch的安装 二、准备工作 三、数据的准备 四、模型架构定义 五、模型训练&#xff08;CPU版本&#xff09; 1. 定义损失函数和优化器 2. 开始循环训练 3. 可视化结果 六、通俗解释 1. 环境安装&#xff08;相当于买锅碗瓢盆&#xff09;…

目标检测 Lite-DETR(2023)详细解读

文章目录 迭代高级特征跨尺度融合高效的低层次特征跨尺度融合KDA&#xff1a;Key-aware Deformable Attention 论文翻译&#xff1a; CVPR 2023 | Lite DETR&#xff1a;计算量减少60%&#xff01;高效交错多尺度编码器-CSDN博客 DINO团队的 &#xff08;Lightweight Transfo…

ES(Elasticsearch) 基本概念(一)

Elasticsearch作为当前最流行的开源搜索和分析引擎&#xff0c;广泛应用于日志分析、全文搜索、业务智能等领域。Elasticsearch是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展数据存储和矢量数据库。它针对生产级工作负载的速度和相关性进行了优化。使用 Elasti…

当物联网“芯”闯入纳米世界:ESP32-S3驱动的原子力显微镜能走多远?

上次咱们把OV2640摄像头“盘”得明明白白&#xff0c;是不是感觉ESP32-S3这小东西潜力无限&#xff1f;今天&#xff0c;咱们玩个更刺激的&#xff0c;一个听起来就让人肾上腺素飙升的挑战——尝试用ESP32-S3这颗“智慧芯”&#xff0c;去捅一捅科学界的“马蜂窝”&#xff0c;…

Excel合并单元格后,如何自动批量生成序号列

1.选择整列 2.组合键&#xff1a;CtrlG 3.定位条件&#xff0c;选择“空值” 4.在第一个框中输入“MAX(”&#xff0c;鼠标选中A1框&#xff0c;后加“&#xff1a;”&#xff0c;鼠标选中前方“A1”&#xff0c;按“F4”绝对引用&#xff0c;补全右括号&#xff0c;后输入“1…

TDengine 运维—容量规划

概述 若计划使用 TDengine 搭建一个时序数据平台&#xff0c;须提前对计算资源、存储资源和网络资源进行详细规划&#xff0c;以确保满足业务场景的需求。通常 TDengine 会运行多个进程&#xff0c;包括 taosd、taosadapter、taoskeeper、taos-explorer 和 taosx。 在这些进程…

Axure设计数字乡村可视化大屏:从布局到交互的实战经验分享

乡村治理正从传统模式向“数据驱动”转型。数字乡村可视化大屏作为数据展示的核心载体&#xff0c;不仅能直观呈现乡村发展全貌&#xff0c;还能为决策提供科学依据。本文以Axure为工具&#xff0c;结合实际案例&#xff0c;分享如何从零设计一个功能完备、交互流畅的数字乡村大…

从零基础到最佳实践:Vue.js 系列(1/10):《环境搭建与基础概念》

Vue.js 环境搭建与基础概念 关键点 Vue.js 是一个简单易用的前端框架&#xff0c;适合初学者快速上手。搭建开发环境需要安装 Node.js 和 npm/Yarn&#xff0c;推荐使用最新 LTS 版本。Vue CLI 是官方工具&#xff0c;可快速创建项目并提供开发服务器。Vue.js 基于 MVVM 模式&…

使用docker compose部署dify(大模型开发使用平台)

Dify是一款生成式 AI 应用中间件&#xff0c;面向有私有部署与数据合规需求的企业用户&#xff0c;推动企业向 AI 时代转型。平台支持无代码构建&#xff0c;业务人员即可快速搭建与调试 AI 应用&#xff0c;显著降低开发门槛。 参考 https://docs.dify.ai/zh-hans/getting-s…

npm 安装时 SSL 证书过期问题笔记

问题描述: npm error code CERT_HAS_EXPIRED npm error errno CERT_HAS_EXPIRED npm error request to https://registry.npm.taobao.org/axios failed, reason: certificate has expired 这表明当前配置的 npm 镜像源&#xff08;淘宝镜像 https://registry.npm.taobao.org&…

力扣HOT100之二叉树: 236. 二叉树的最近公共祖先

果然&#xff0c;这道题二刷还是不会做&#xff0c;回去看卡尔视频了。结合灵神的题解&#xff0c;我对这道题有了一些新的理解。 首先这道题还是用递归来做&#xff0c;由于我们需要计算两个节点的最近公共祖先&#xff0c;一定是从下往上来遍历&#xff0c;只有先判断左右子树…

Word 转 HTML API 接口

Word 转 HTML API 接口 图像/转换 Word 文档转换为 HTML 文件转换 / 超高精度与还原度 文件转换 / Word。 1. 产品功能 超高精度与还原度的 HTML 文件转换&#xff1b;支持将 Word 文档转换为 HTML 格式&#xff1b;支持 .doc 和 .docx 格式&#xff1b;保持原始 Word 文档的…

idea 安装飞算-javaAI 插件使用

文章目录 前言idea 安装飞算-javaAI 插件使用1. 介绍一下飞算-AI2. 安装使用 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的…

Bert预训练任务-MLM/NSP

MLM MLM:Masked Language Mode:在每一个训练序列中以15%的概率随机地选中某个token进行MASK,当一个token被选中后&#xff0c;有以下三种处理方式&#xff1a; 80%的概率被[MASK]&#xff0c;如my dog is hairy->my dog is [MASK]10%的概率修改为随机的其他token,如my dog …

浏览器原生 Web Crypto API 实现 SHA256 Hash 加密

写在前面 在我上一篇文章 《node 后端和浏览器前端&#xff0c;有关 RSA 非对称加密的完整实践&#xff0c; 前后端匹配的代码演示》 中&#xff0c;我们使用 浏览器原生 Web Crypto API 实现了 RSA 的加密算法。 但是&#xff0c;在我之前的 《我设计的一个安全的 web 系统用…