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

news/2024/8/26 10:11:54 标签: lvs, nginx, 负载均衡

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的区别是在于nginxlvs的功能不同
在这里插入图片描述
配置的详细步骤:
前期准备:
服务器与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.niftyadmin.cn/n/5558033.html

相关文章

泛微e-cology WorkflowServiceXml SQL注入漏洞(POC)

漏洞描述: 泛微 e-cology 是泛微公司开发的协同管理应用平台。泛微 e-cology v10.64.1的/services/接口默认对内网暴露,用于服务调用,未经身份认证的攻击者可向 /services/WorkflowServiceXml 接口发送恶意的SOAP请求进行SQL注入,…

【docker 部署springboot项目】

一、docker安装 1.检查Linux内核版本高于3.10才可安装 uname -r 2. 卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 3. 使用docker仓库进行安装 安装所需的软…

用python写一个tcp/ip协议的聊天软件

编写一个基于TCP/IP协议的简单聊天软件,可以让多个客户端连接到服务器,实现简单的文本消息收发功能。下面是一个基本的示例,涵盖了服务器端和客户端的实现。 服务器端(chat_server.py) 服务器端负责接收客户端的连接&…

LVS集群简介

一、集群 系统的拓展方式: 垂直扩展 :向上扩展,增强设备的性能。两个瓶颈:计算机本身设备的限制,以及硬件本身的性能瓶颈。 水平扩展 :向外扩展,增加设备,并行地运行多个服务&…

2、Netty系列-计算机网络通信及其编程:BIO、NIO、直接内存与零拷贝深入解析

网络通信编程基本常识 什么是 Socket? Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口,一般由操作系统提供。在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议处理和通信缓存管…

嵌入式物联网在教育行业的应用——案例分析

作者主页: 知孤云出岫 嵌入式物联网在教育行业的应用——案例分析 目录 作者主页:嵌入式物联网在教育行业的应用——案例分析一、引言二、智能教室:环境监测系统1. 硬件需求2. 电路连接3. 代码实现 三、个性化学习:智能学习平台1. 数据处理与分析2. 代…

释放Conda通道束缚:启用自由通道恢复的终极指南

释放Conda通道束缚:启用自由通道恢复的终极指南 在Conda的生态中,通道(channels)是包来源的路径,而自由通道(free channel)通常指的是非限制性的包源,可以提供更多的包选择。有时&a…

PyTorch张量数值计算

文章目录 1、张量基本运算2、阿达玛积3、点积运算4、指定运算设备⭐5、解决在GPU运行PyTorch的问题 🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法&am…