LVS高可用负载均衡
一、项目图

二、主机规划
| 主机 | 系统 | 安装应用 | 网络 | IP |
|---|---|---|---|---|
| client | redhat 9.5 | 无 | NAT | 192.168.72.115/24 |
| lvs-master | redhat 9.5 | ipvsadm,keepalived | NAT | 192.168.72.116/24 VIP 192.168.72.100/32 |
| lvs-backup | redhat 9.5 | ipvsadm,keepalived | NAT | 192.168.72.117/24 VIP 192.168.72.100/32 |
| rs1 | redhat 9.5 | nginx,nfs-utils | NAT | 192.168.72.118/24 |
| rs2 | redhat 9.5 | nginx,nfs-utils | NAT | 192.168.72.119/24 |
| nfs | redhat 9.5 | nfs-utils | NAT | 192.168.72.120/24 |
三、项目搭建
注意:
搭建项目前,需要将所有虚拟机的防火墙和selinux关闭
首先先修改ip地址使用nmcli命令修改和nmtui可视化修改,或者安装虚拟机时,安装了桌面的可以在虚拟机的设置里面修改。我这里就先略这个修改IP的步骤,因为本文,主要是讲述LVS高可用的具体搭建步骤,这个修改每台机子的ip只是为了更加规范。如果不想修改,也可以完成该项目,修改ip不是必须的只是为了规范项目。
每台虚拟机都需要下载相应的软件,如果没有配置本地仓库的可以先配置本地仓库,然后再进行项目搭建。在/etc/yum.repos.d下创建后缀为.repo的文件再将一下内容添加保存:
再使用mount /dev/sr0 /mnt 挂载即可
[baseos]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[appstream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
1、配置nfs服务
(1)在nfs服务器上下载nfs服务
dnf install nfs-utils -y
(2)创建共享目录
mkdir /nfs/share -p
(3)在/etc/exports下添加如下内容
[root@nfs ~]# cat /etc/exports
/nfs/share 192.168.72.118(rw,sync) 192.168.72.119(rw,sync)
(4)添加web起始页页面内容,因为有两台web服务器,为了区分开,所以起始页内容有所不同
[root@nfs share]# echo "rs1 index.html" > index1.html
[root@nfs share]# echo "rs2 index.html" > index2.html
(5)启动nfs服务
systemctl start nfs-server
(6)暴露共享目录
[root@nfs ~]# showmount -e 192.168.72.120
Export list for 192.168.72.120:
/nfs/share 192.168.72.119,192.168.72.118
2、 配置rs
rs1
(1)安装nginx和nfs
dnf install nginx nfs-utils -y
(2)挂载共享目录到nginx的起始页
[root@rs1 ~]# mount -t nfs 192.168.72.120:/nfs/share /usr/share/nginx/html/
(3)启动nginx和nfs
root@rs1 ~]# systemctl start nginx nfs-serve
(4)功能测试
[root@rs1 ~]# showmount -e 192.168.72.120
Export list for 192.168.72.120:
/nfs/share 192.168.72.119,192.168.72.118
(5)自动挂载
使用 vim 编辑器打开/etc/fstab 将以下内容加入
192.168.72.120:/nfs/share /usr/share/nginx/html/ nfs defaults 0 0
使用systemctl daemon-reload重新加载
使用mount -a 重新挂载
(6)配置nginx
[root@rs1 ~]# vim /etc/nginx/conf.d/rs1.conf
[root@rs1 ~]# cat /etc/nginx/conf.d/rs1.conf
server {listen 80;server_name 192.168.72.118;location / {root /usr/share/nginx/html;index index1.html;}
}
(7)功能测试
[root@rs1 ~]# curl 192.168.72.118
rs1 index.html
rs2
关闭RS1服务器,然后我们对这台服务器进行克隆,取名为 RS2,然后启动 RS2 并做如下的修改。
(1)修改ip地址以及主机名
[root@rs1 ~]# hostnamectl hostname rs2
[root@rs1 ~]# nmcli c modify ens160 ipv4.addresses 192.168.72.119/24
[root@rs1 ~]# nmcli c up ens160
再将rs1启动
(2)自动挂载,将rs1上的/etc/fstab 使用scp命令拷贝到rs2中
[root@rs1 ~]# scp /etc/fstab 192.168.72.119:/etc/
使用systemctl daemon-reload重新加载
使用mount -a 重新挂载
(3)配置nginx
[root@rs2 ~]# vim /etc/nginx/conf.d/rs2.conf
server {listen 80;server_name 192.168.72.119;location / {root /usr/share/nginx/html;index index2.html;}
}
(4)功能测试
[root@rs2 ~]# systemctl restart nginx
[root@rs2 ~]# curl 192.168.72.119
rs2 index.html
3、配置LVS+keepalived
(1)安装ipvsadm和keepalived
dnf install ipvsadm keepalived -y
(2)修改配置文件
使用vim 编辑器打开/etc/keepalived/keepalived.conf
[root@lvs-master ~]# vim /etc/keepalived/keepalived.conf
[root@lvs-master ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id LVS_MASTER
}vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}
}
virtual_server 192.168.250.100 80 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.250.118 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.250.119 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
使用scp命令将lvs-master上的配置文件拷贝到lvs-backup上
scp /etc/keepalived/keepalived.conf root@192.168.250.117:/etc
(3)在lvs-backup上需改配置文件如下
[root@lvs-backup ~]# vim /etc/keepalived/keepalived.conf
[root@lvs-backup ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id LVS_BACKUP
}vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.250.100}
}
virtual_server 192.168.250.100 80 {delay_loop 6lb_algo wrrlb_kind DRpersistence_timeout 0protocol TCPreal_server 192.168.250.118 80 {weight 3TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.250.119 80 {weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3}}
}
(4)启动ipvsadm服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
(5)启动keepalived服务查看LVS规则是否添加
[root@lvs-master ~]# systemctl start keepalived
[root@lvs-master ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.72.100:80 wrr-> 192.168.72.118:80 Route 1 0 0 -> 192.168.72.119:80 Route 1 0 0
(6)在rs1在rs2上加上虚拟ip
ifconfig lo 192.168.72.100 netmask 255.255.255.255 up
(7)在rs上配置核心参数
[root@rs1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@rs1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@rs2 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@rs2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
4、测试
[root@client ~]# curl 192.168.72.100
rs1 index.html
[root@client ~]# curl 192.168.72.100
rs2 index.html
测试成功!!!项目搭建完成
6、总结
(1)需要在rs服务器上配置核心参数
(2)启动ipvsadm服务时需要先ipvsadm-save > /etc/sysconfig/ipvsadm 再启动
(3)需要在rs上添加虚拟ip
相关文章:
LVS高可用负载均衡
一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm,keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm,keepalivedNAT192.168.72.117/24 VIP 192.168…...
脑影像分析软件推荐 | JuSpace
目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献: Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…...
集合框架——常用类
集合框架的理解 就是一个常用类 集合主要有三种类型【集合与集合之间可以互转】 List(列表,是接口)Set(集合,是接口)Map(键值对,是接口)Collection是以上及所有集合的根接口,其里面的子类,一部分支持集合有序元素可重复,一部分支持集合无序元素不重复 可重复和不…...
【NLP 面经 7、常见transformer面试题】
目录 1. 为何使用多头注意力机制? 2. Q和K使用不同权重矩阵的原因 3. 选择点乘而非加法的原因 4. Attention进行scaled的原因 5. 对padding做mask操作 6. 多头注意力降维原因 7. Transformer Encoder模块简介 8. 乘以embedding size的开方的意义 9. 位置编码 10. 其…...
分布式事务解决方案全解析:从经典模式到现代实践
前言 在分布式系统中,数据一致性是一个核心问题。随着微服务架构的普及,跨服务、跨数据库的操作变得越来越普遍,如何保证这些操作的原子性、一致性、隔离性和持久性(ACID)成为了一个极具挑战性的任务。本文将全面介绍…...
软件工程面试题(二十七)
1、j a v a 对象初始化顺序 1.类的初始化(initialization class & interface) 2.对象的创建(creation of new class instances) 顺序:应为类的加载肯定是第一步的,所以类的初始化在前。大体的初始化顺序是: 类初始化 -> 子类构造函数 -> 父类构造函数 -&g…...
fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现
创建部门或者子部门 import type { NextApiRequest, NextApiResponse } from next; import { NextAPI } from /service/middleware/entry; import { MongoOrgModel } from fastgpt/service/support/permission/org/orgSchema;async function handler(req: NextApiRequest, res…...
C++ 数据竞态检查
-fsanitizethread 编译时,添加参数-fsanitizethread -g,可以运行态检查数据竞态问题,包括: 数据竞态死锁锁、条件变量错误使用 check_tsan 开源库 yalantinglibs有段检查编译器是否支持 fsanitize 编译参数的宏,挺…...
逛好公园的好处
逛公园和软件开发看似是两个不同的活动,但它们之间存在一些有趣的关联和相互促进的关系: 激发创造力:公园中的自然景观、多样的人群以及各种活动能为开发者带来新的灵感和创意。软件开发过程中,从公园中获得的创意可以帮助开发者设…...
C++开发工具全景指南
专业编译与调试工具深度解析 2025年4月 编译器套件 GNU Compiler Collection (GCC) GNU编译器套件是自由软件基金会开发的跨平台编译器系统,支持C、C、Objective-C、Fortran、Ada等多种编程语言。作为Linux系统的标准编译器,GCC以其强大的优化能力和…...
【网络安全】 防火墙技术
防火墙是网络安全防御的重要组成部分,它的主要任务是阻止或限制不安全的网络通信。在这篇文章中,我们将详细介绍防火墙的工作原理,类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例,以便于初学者理解。 一、什么…...
文档的预解析
1. 预解析的核心目标 浏览器在正式解析(Parsing)HTML 前,会启动一个轻量级的 预解析器(Pre-Parser),快速扫描文档内容,实现: 提前发现并加载关键资源(如 CSS、JavaScrip…...
理解“功能内聚”
链接: 理解“偶然内聚” 理解“逻辑内聚” 理解“时间内聚” 理解“过程内聚” 理解“通信内聚” 理解“顺序内聚” 理解“功能内聚” 功能内聚(Functional Cohesion)是最高级别的内聚形式,指的是模块内的所有元素都紧密地围绕着一…...
windows 常用命令总结
工作中用到的 Linux 总结(持续更新中...)_linux工作经验-CSDN博客 PS: 推荐使用 powershell 而不是 cmd,因为PowerShell 是一个更先进和功能更强大的工具( powershell 有命令记忆功能,比较方便)…...
记一次表格数据排序优化(一)--排序30000条数据有多卡
目录 需求 第一次尝试 运行环境 思路 存储 排序 触发排序操作 如何实现高效的排序 关键1 关键2 关键3 磨刀不误砍柴工 关键4 代码 效果 卡顿原因分析 原因1 原因2 第二次尝试 需求 1 我的qt程序通过表格显示30000条数据。数据来自udp,udp每隔10秒…...
图形渲染中的定点数和浮点数
三种API的NDC区别 NDC全称,Normalized Device Coordinates Metal、Vulkan、OpenGL的区别如下: featureOpenGL NDCMetal NDCVulkan NDC坐标系右手左手右手z值范围[-1,1][0,1][0,1]xy视口范围[-1,1][-1,1][-1,1] GPU渲染的定点数和浮点数 定点数类型&a…...
【深度学习】CNN简述
文章目录 一、卷积神经网络(CNN)二、CNN结构特性1. CNN 典型结构2. 局部连接3. 权重共享4.空间或时间上的次采样 三、理解层面 一、卷积神经网络(CNN) 卷积神经网络(Convolutional Neural Network,CNN)是一种用于处理…...
强化学习课程:stanford_cs234 学习笔记(3)introduction to RL
文章目录 前言7 markov 实践7.1 markov 过程再叙7.2 markov 奖励过程 MRP(markov reward process)7.3 markov 价值函数与贝尔曼方程7.4 markov 决策过程MDP(markov decision process)的 状态价值函数7.4.1 状态价值函数7.4.2 状态…...
紫檀博物馆一游与软件开发
今天去逛了中国紫檀博物馆,里边很多层展品,也有一些清代的古物,檀木,黄花梨木家具和各种摆件,馆主陈丽华女士也是发心复原、保留和弘扬中国的传统文化,和西游记唐僧扮演者迟成瑞先生一家。 每一件展品都精…...
RocketMQ初认识
ProducerCustomerNameServer: Broker的注册服务发现中心BrokerServer:主要负责消息的存储、投递和查询以及服务高可用保证 RocketMQ的集群部署: 单个master的分支多个Master 模式:集群中有多个 Master 节点,彼此之间相互独立。生产者可以将消…...
第十三章:持久化存储_《凤凰架构:构建可靠的大型分布式系统》
第十三章 持久化存储 一、Kubernetes存储设计核心概念 (1)存储抽象模型 PersistentVolume (PV):集群级别的存储资源抽象(如NFS卷/云存储盘)PersistentVolumeClaim (PVC):用户对存储资源的声明请求&#…...
Chrome开发者工具实战:调试三剑客
在前端开发的世界里,Chrome开发者工具就是我们的瑞士军刀,它集成了各种强大的功能,帮助我们快速定位和解决代码中的问题。今天,就让我们一起来看看如何使用Chrome开发者工具中的“调试三剑客”:断点调试、调用栈跟踪和…...
教程:如何使用 JSON 合并脚本
目录 1. 介绍 2. 使用方法 3. 注意事项 4. 示例 5.完整代码 1. 介绍 该脚本用于将多个 COCO 格式的 JSON 标注文件合并为一个 JSON 文件。COCO 格式常用于目标检测和图像分割任务,包含以下三个主要部分: "images":图像信息&a…...
C++/Qt 模拟sensornetwork的工作
C/Qt 可视化模拟sensornetwork的工作 C/Qt 模拟sensornetwork的工作 C/Qt 可视化模拟sensornetwork的工作内容简介(一) 需求和规格说明(1)问题描述(2)设计目的(3)基本要求࿰…...
ffmpeg音频分析
对一个16k 单声道音频,生成频谱图 ./ffmpeg -i input.wav -lavfi "showspectrumpics800x400:modecombined:scalelin:gain1.5" spectrum.png...
【多线程】CAS机制
目录 一. CAS的概念 二. CAS的原理 三.标准库中的CAS 四. CAS的应用 (1)原子类的使用 (2) 自旋锁的实现 五. CAS的ABA问题 一. CAS的概念 CAS(Compare And Swap)机制是一种无锁的并发控制技术&#…...
音视频(四)android编译
前言 前面已经讲了在windows上应用了,这章主要讲述android上编译 1:环境 git 如果失败 直接跑到相应网站 手动下载 ubuntu22.* android ndk r21e download:https://developer.android.google.cn/ndk/downloads/index.html?hluk 为什么用这个࿰…...
Chapter07_图像压缩编码
文章目录 图像压缩编码图像压缩编码基础图像压缩的基本概念信息相关信息冗余信源编码及其分类 图像编码模型信源编码器模型信源解码器模型 数字图像的信息熵信源符号码字平均长度信息熵信息量 变长编码费诺码霍夫曼编码 位平面编码格雷码 图像压缩编码 数字图像的压缩是指在满…...
团体设计程序天梯赛L2-025 # 分而治之
文章目录 题目解读输入格式输出格式 思路Ac Code参考 题目解读 在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可…...
Linux网络套接字
Socket 编程 UDP 本章将函数介绍和代码编写实战一起使用。 IPv4 的 socket 网络编程,sockaddr_in 中的成员 struct in_addr.sin_addr 表示 32 位 的 IP 地址 但是我们通常用点分十进制的字符串表示 IP 地址,以下函数可以在字符串表示和in_addr 表示之间转换; 字符串转 in_addr…...
