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的区别是在于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可以管理集群,查看集群等操作),命令如下:

java 复制代码
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:

java 复制代码
vim /etc/sysctl.conf

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

java 复制代码
# 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真实服务器

java 复制代码
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

其他命令:

java 复制代码
 重启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后。

测试完成

相关推荐
larance4 小时前
Gunicorn + Nginx+systemd 配置flask
nginx·flask·gunicorn
文艺理科生Owen6 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
运维·nginx
kong790692812 小时前
Nginx性能优化
java·nginx·性能优化
匀泪12 小时前
云原生(LVS DR模式ipvs实验)
服务器·网络·lvs
瑶山12 小时前
Spring Cloud微服务搭建五、集成负载均衡,远程调用,熔断降级
spring cloud·微服务·负载均衡·远程调用·熔断降级
主机哥哥1 天前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey9031 天前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
全栈工程师修炼指南1 天前
Nginx | stream content 阶段:UDP 协议四层反向代理浅析与实践
运维·网络·网络协议·nginx·udp
鹏北海1 天前
micro-app 微前端项目部署指南
前端·nginx·微服务
全栈工程师修炼指南1 天前
Nginx | stream content 阶段:TCP 协议四层反向代理浅析与实践
运维·网络·网络协议·tcp/ip·nginx