LVS+Nginx高可用集群---搭建高可用集群负载均衡

news2024/11/22 5:57:28

1.LVS简介

Lvs(Linux Virtual Server):使用集群,对于整个用户来说是透明,用户访问的时候是单个高性能的整体。道理与nginx类似
在这里插入图片描述
在这里插入图片描述
LVS网络拓扑图:是基于四层。
在这里插入图片描述
用户通过浏览器发送请求,然后到达LVS.Lvs根据相应算法将请求发送到相应的真实的服务器上(RS).

2.为什么要使用LVS+NGINX

LVS基于四层,工作效率高:性能更高,接收到的请求是可以直接转发的。Nginx接收到请求后,还需要对请求进行相应的处理
单个nginx承受不了压力,需要集群。
LVS充当nginx集群的调度者:lvs不处理请求报文,相应效率更高
Nginx接受请求来回,LVS可以只接受不响应
在这里插入图片描述
在这里插入图片描述
Lvs的RS(真实服务器)集群处理完毕请求以后,通过集群将结果直接返回给用户
RS就是nginx
LVS的核心模块是ipvs->vip:192.168.1.150

3.LVS三种模式

NAT模式:适用于并发量不大,使用虚拟ip。LVS是公网,可以ping通,类似于nginx
在这里插入图片描述
TUN:ip隧道模式,需要为每个lvs配备网卡,RS是暴露在公网的,RS自己处理请求
在这里插入图片描述
DR模式:RS通过路由转发,不暴露在公网
在这里插入图片描述

4.搭建LVS-DR模式-配置LVS节点与ipvsadm

服务器与IP的约定:DIP与RIP的区别是在于nginx与lvs的功能不同
在这里插入图片描述
配置的详细步骤:
前期准备:
服务器与ip规划

LVS - 1台
VIP(虚拟IP):192.168.1.150
DIP(转发者IP/内网IP):192.168.1.151
Nginx - 2台(RealServer)
RIP(真实IP/内网IP):192.168.1.171
RIP(真实IP/内网IP):192.168.1.172
所有计算机节点关闭网络配置管理器,因为有可能会和网络接口冲突:

systemctl stop NetworkManager
systemctl disable NetworkManager

创建子接口:
进入到网卡配置目录,找到ens33:
在这里插入图片描述

拷贝并且创建子接口:

cp ifcfg-ens33 ifcfg-ens33:1
注:数字1为别名,可以任取其他数字都行
注:数字1为别名,可以任取其他数字都行
1
代码块
修改子接口配置: vim ifcfg-ens33:1

配置参考如下:
在这里插入图片描述

注:配置中的 192.168.1.150 就是咱们的vip,是提供给外网用户访问的ip地址,道理和nginx+keepalived那时讲的vip是一样的。
重启网络服务,或者重启linux:
在这里插入图片描述
重启成功后,ip addr 查看一下,你会发现多了一个ip,也就是虚拟ip(vip)
在这里插入图片描述
安装ipvsadm
现如今的centos都是集成了LVS,所以ipvs是自带的,相当于苹果手机自带ios,我们只需要安装ipvsadm即可(ipvsadm是管理集群的工具,通过ipvs可以管理集群,查看集群等操作),命令如下:

yum install ipvsadm

安装成功后,可以检测一下:
在这里插入图片描述
路由就是虚拟ip。VIP
阿里云服务器不支持虚拟ip,需要去购买官方提供的虚拟ip服务。
腾讯云支持虚拟ip,但是需要另外去购买,因为是建立在网卡之上,有成本,上限10.

5.搭建LVS-DR模式-为两台RS配置虚拟IP

配置虚拟网络子接口(回环接口)
进入到网卡配置目录,找到lo(本地环回接口,用户构建虚拟网络子接口),拷贝一份新的随后进行修改:
在这里插入图片描述
修改内容如下:
在这里插入图片描述
重启后通过ip addr 查看如下,表示ok:
在这里插入图片描述

6.搭建LVS-DR模式-为两台RS配置ARP

arp-ignore:ARP响应级别(处理请求):一般为1
在这里插入图片描述
arp-announce:ARP通告行为(返回响应):一般为2
在这里插入图片描述
配置ARP
打开sysctl.conf:

vim /etc/sysctl.conf

配置所有网卡、默认网卡以及虚拟网卡的arp响应级别和通告行为,分别对应:all,default,lo:

# configration for lvs
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

刷新配置文件:
在这里插入图片描述
增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:
在这里插入图片描述
防止重启失效,做如下处理,用于开机自启动:

echo “route add -host 192.168.1.150 dev lo:1” >> /etc/rc.local
在这里插入图片描述

7.搭建LVS-DR模式-验证ipvsadm配置集群规则

创建LVS节点,用户访问的集群调度者

ipvsadm -A -t 192.168.1.150:80 -s rr -p 5

-A:添加集群
-t:tcp协议
ip地址:设定集群的访问ip,也就是LVS的虚拟ip
-s:设置负载均衡的算法,rr表示轮询
-p:设置连接持久化的时间
创建2台RS真实服务器

ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.171:80 -g
ipvsadm -a -t 192.168.1.150:80 -r 192.168.1.172:80 -g

-a:添加真实服务器
-t:tcp协议
-r:真实服务器的ip地址
-g:设定DR模式
保存到规则库,否则重启失效
ipvsadm -S

检查集群
查看集群列表

ipvsadm -Ln

查看集群状态
ipvsadm -Ln --stats

其他命令:

 重启ipvsadm,重启后需要重新配置
service ipvsadm restart
# 查看持久化连接
ipvsadm -Ln --persistent-conn
# 查看连接请求过期时间以及请求源ip和目标ip
ipvsadm -Lnc

# 设置tcp tcpfin udp 的过期时间(一般保持默认)
ipvsadm --set 1 1 1
# 查看过期时间
ipvsadm -Ln --timeout

更详细的帮助文档:

ipvsadm -h
man ipvsadm

8 . LVS负载均衡算法

LVS的负载均衡算法
静态算法
静态:根据LVS本身自由的固定的算法分发用户请求。

轮询(Round Robin 简写’rr’):轮询算法假设所有的服务器处理请求的能力都一样的,调度器会把所有的请求平均分配给每个真实服务器。(同Nginx的轮询)

加权轮询(Weight Round Robin 简写’wrr’):安装权重比例分配用户请求。权重越高,被分配到处理的请求越多。(同Nginx的权重)

源地址散列(Source Hash 简写’sh’):同一个用户ip的请求,会由同一个RS来处理。(同Nginx的ip_hash)

目标地址散列(Destination Hash 简写’dh’):根据url的不同,请求到不同的RS。(同Nginx的url_hash)

动态算法
动态:会根据流量的不同,或者服务器的压力不同来分配用户请求,这是动态计算的。

最小连接数(Least Connections 简写’lc’):把新的连接请求分配到当前连接数最小的服务器。

加权最少连接数(Weight Least Connections 简写’wlc’):服务器的处理性能用数值来代表,权重越大处理的请求越多。Real Server 有可能会存在性能上的差异,wlc动态获取不同服务器的负载状况,把请求分发到性能好并且比较空闲的服务器。

最短期望延迟(Shortest Expected Delay 简写’sed’):特殊的wlc算法。举例阐述,假设有ABC三台服务器,权重分别为1、2、3 。如果使用wlc算法的话,当一个新请求进来,它可能会分给ABC中的任意一个。使用sed算法后会进行如下运算:

A:(1+1)/1=2
B:(1+2)/2=3/2
C:(1+3)/3=4/3
最终结果,会把这个请求交给得出运算结果最小的服务器。
最少队列调度(Never Queue 简写’nq’):永不使用队列。如果有Real Server的连接数等于0,则直接把这个请求分配过去,不需要在排队等待运算了(sed运算)。

总结:
LVS在实际使用过程中,负载均衡算法用的较多的分别为wlc或wrr,简单易用。

对lvs集群的负载算法有一定的了解即可,因为你要和运维人员进行有效沟通;但是如果作为运维的话那么是要深入钻研LVS了,一个企业如果发展并且使用到LVS了,那么业务量是十分巨大的,并且也会有专门的运维团队来负责网络架构的。

9.搭建LVS-DR模式-验证DR模式,探讨LVS持久化机制

在这里插入图片描述
LVS有持久化链接。ipvsadm -h:查询所有的命令

核心原因:man ipvsadm :默认的时间是300s
在这里插入图片描述
修改有效时间:5秒的持久化时间
Ipvsadm -E -t 192.168.1.150:80 -s -rr -p 5
Ipsvadm -Ln:查看配置
在这里插入图片描述
刷新地址还是没有什么用。实际上还有配置设置超时时间。
修改配置:ipsvadm --set 1 1 1,先不进行刷新
即可实现轮询,并且每次有效的时间为60s.
在这里插入图片描述
刷新之后,网页发生变化。
在这里插入图片描述
每次不超时,就会落在相应的节点上。
再次刷新,没有任何列表,访问172服务器。
在这里插入图片描述
再次查询,172也可以查询得到,显示过期时间
在这里插入图片描述
正常情况下都使用默认的设置

10.搭建keepalived+LVS+NGINX 高可用集群负载均衡-配置Master

Master相关配置:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ipvsadm -C:清除之前的相关负载均衡的规则
查询清理的结果
在这里插入图片描述
重启keepalived:systemctl restart keepalived

出现错误:之前配置的虚拟ip的ip地址是错误的。
192.168.1.150 80
Backup的配置基本同上。

测试LVS:
检测方式:先停掉Master上的keepalived。Backup上虚拟ip生效。访问页面没有问题。
重新打开Master上的keepalived。Backup的虚拟ip没有了。
前端界面访问一直没有问题.

测试nginx:
关闭171进行测试。用户请求只能访问到172.
通过LVS检查结果。
在这里插入图片描述
恢复171后。
测试完成

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

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

相关文章

使用NIFI连接瀚高数据库_并从RestFul的HTTP接口中获取数据局_同步到瀚高数据库中---大数据之Nifi工作笔记0067

首先来看一下如何,使用NIFI 去连接瀚高数据库. 其实,只要配置好了链接的,连接字符串,和驱动,任何支持JDBC的数据库都可以连接的. 首先我们用一个ListDatabaseTables处理器,来连接瀚高DB 主要是看这里,连接地址,以及驱动,还有驱动的位置 这个是数据连接的配置 jdbc:highgo://…

FinClip 率先入驻 AWS Marketplace,加速全球市场布局

近日,凡泰极客旗下的小程序数字管理平台 FinClip 已成功上线亚马逊云科技(AWS)Marketplace。未来,FinClip 将主要服务于海外市场的开放银行、超级钱包、财富管理、社交电商、智慧城市解决方案等领域。 在全球市场的多样性需求推动…

【Linux】深入探索`cp`命令:文件复制的全面指南

文章目录 一、cp命令概述二、cp命令的基本用法1. 复制单个文件2. 复制多个文件到目录 三、cp命令的常用选项1. -i:交互式复制(interactive)2. -r或-R:递归复制目录(recursive)3. -v:详细模式&am…

Python学习笔记40:游戏篇之外星人入侵(一)

前言 入门知识已经学完,常用标准库也了解了,pygame入门知识也学了,那么开始尝试小游戏的开发。 当然这个小游戏属于比较简单的小游戏,复杂的游戏需要长时间的编写累计开发经验,同时也需要一定的时间才能编写出来。现在的话还是嫩…

Android 视频音量图标

attrs.xml <?xml version"1.0" encoding"utf-8"?> <resources><!--图标颜色--><attr name"ijkSolid" format"color|reference" /><!--喇叭底座宽度--><attr name"ijkCornerWidth" form…

Android 视频亮度图标

attrs.xml <?xml version"1.0" encoding"utf-8"?> <resources><!--图标颜色--><attr name"ijkSolid" format"color|reference" /><!--圆角大小--><attr name"ijkRadius" format"d…

《Linux运维总结:基于ARM64架构CPU使用docker-compose一键离线部署单机版tendis2.4.2》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面对不同的客户部署业务系统&#xff0…

CSRF+XSS组合攻击实战

目录 0x01安装靶场 0x02分析功能点的请求接口&#xff0c;构造恶意请求 0x03寻找xss漏洞 0x01安装靶场 下载源码&#xff0c;解压到网站根目录 1.修改数据库配置文件 打开源码&#xff0c;进入到include目录下&#xff0c;打开数据库配置文件database.inc.php 将数据库的…

Android GWP-Asan使用与实现原理

目录 一、 背景 二、GWP-Asan介绍 2.1 什么是GWP-ASan 2.2 GWP-Asan与其他几类工具对比 2.3 GWP-ASan与其它内存分配器的兼容性 三、GWP-Asan如何使用 3.1 app进程 3.2 native进程 四、GWP-Asan实现原理 4.1 进程启用GWP-Asan 4.2 初始化 4.3 内存分配 4.3.1 内存…

Proxyman for Mac v5.6.1 抓包调试工具

Mac分享吧 文章目录 效果一、下载软件二、功能三、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 四、运行测试1、打开软件 安装完成&#xff01;&#xff01;&#xff01; 效果 一…

开源模型应用落地-FastAPI-助力模型交互-进阶篇(四)

一、前言 FastAPI 的高级用法可以为开发人员带来许多好处。它能帮助实现更复杂的路由逻辑和参数处理&#xff0c;使应用程序能够处理各种不同的请求场景&#xff0c;提高应用程序的灵活性和可扩展性。 在数据验证和转换方面&#xff0c;高级用法提供了更精细和准确的控制&#…

【Linux服务器Java环境搭建】012在linux中安装消息队列RabbitMQ,以及对RabbitMQ设置、启动、开启可视化

系列文章目录 【Linux服务器Java环境搭建】 前言 上一篇博客竟然用了不到半小时就写完了&#xff0c;那就继续吧&#xff0c;如果对此系列感兴趣&#xff0c;可以点击系列【Linux服务器Java环境搭建】进行查看哈&#xff0c;这一篇主要是安装和配置消息队列RabbitMQ。 一、消…

Easysearch、Elasticsearch、Amazon OpenSearch 快照兼容对比

启动集群 Easysearch sysctl -w vm.max_map_count262144Amazon OpenSearch Elasticsearch 由于这个docker compose没有关于kibana的配置&#xff0c;所以我们还是用Console添加原生的Elasticsearch集群 集群信息 快照还原的步骤 快照前的准备 插件安装 本次测试选择把索…

力扣1696.跳跃游戏 VI

力扣1696.跳跃游戏 VI 递推 class Solution {public:int maxResult(vector<int>& nums, int k) {int n nums.size();vector<int> f(n);f[0] nums[0];for(int i1;i<n;i)f[i] *max_element(f.begin() max(i-k,0),f.begin() i) nums[i];return f[n-1];}…

【Manim动画教程】——基本几何 【弧-上】

1.标注点&#xff08;AnnotationDot&#xff09; 具有较大半径和粗体笔触的点&#xff0c;用于注释场景。 class AnnotationDot(radius0.10400000000000001, stroke_width5, stroke_colorManimColor(#FFFFFF), fill_colorManimColor(#58C4DD), **kwargs) 实例代码&#xff…

npm install报错:npm error ERESOLVE could not resolve

从git上拉取一个新vue项目下来&#xff0c;在npm install时报错&#xff1a;npm error ERESOLVE could not resolve 有网友分析原因是因为依赖冲突导致报错&#xff0c;解决方法如下&#xff1a; # --legacy-peer-deps&#xff1a;安装时忽略所有peerDependencies&#xff0c…

Serverless技术的市场调研与发展分析

目录 一、 Serverless基础 1.1 Serverless产生的背景 1.2 什么是Serverless 1.3 Serverless架构优势 1.3.1 按需使用的资源管理 1.3.2 简化业务运维复杂度 1.4 Serverless和Service Mesh相同点 1.5 Serverless基础架构 1.5.1 函数管理 1.5.2 事件触发器 1.5.3 函数的…

加载数据集(Dataset and Dataloader)

dataset主要是用于构造数据集&#xff08;支持索引&#xff09;&#xff0c;dataloader可以拿出一个mini-batch供我们快速使用。 一&#xff1a;上一节知识 一下是我们上一节提到的糖尿病数据集&#xff0c;其中在提到数据加载的时候&#xff0c;我们没有使用mini-batch的方法…

Linux系统下载htop

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、在Debian/Ubuntu上安装htop1.1更新包列表1.2 安装htop 二、在CentOS/RHEL上安装htop2.1.启用EPEL仓库2.2 安装htop 三、在Fedora上安装htop3.1.安装htop 四…

GraphRAG+ollama+LM Studio+chainlit

这里我们进一步尝试将embedding模型也换为本地的&#xff0c;同时熟悉一下流程和学一些新的东西 1.环境还是用之前的&#xff0c;这里我们先下载LLM 然后你会在下载nomic模型的时候崩溃&#xff0c;因为无法搜索&#xff0c;无法下载 解决办法如下lm studio 0.2.24国内下载…