LVS高并发集群

LVS就是Linux虚拟服务器,Linxu virtual server,是由章文嵩博士主导开发的负载均衡项目。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器。

轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
原文链接:

lvs 并发连接 lvs并发数_负载均衡

集群功能分类

LB:Load Balancing,负载均衡,增加处理能力,有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点。

软件负载均衡设备:LVS,NGINX,HAPROXY。便宜,易用,但是对比于硬件设备功能低一些。三个软件技术之间,各有千秋,企业三种软件都会使用。

HA:High Avaliability 高可用集群(增加服务的可用性)。高可用服务器保持服务器始终在线不宕机。

衡量可用性:在线时间/(在线时间+故障处理时间)。

负载均衡

负载均衡有多种实现方式:

  • Http重定向
  • 搭建HTTP重定向服务器,用户访问到服务器,服务器再响应重定向到web服务器。
  • 优点:简单
  • 缺点:性能差,需要多次访问,并且还会被SEO判断为作弊。
  • NS负载均衡
  • 我们无法实现,必须花钱。在DNS解析时获得负载能力,DNS服务器的算法进行域名分配。
  • 优点:将负载均衡交给了DNS,省去了网站管理和负载均衡服务器的麻烦。
  • 缺点:目前的DNS解析时多级解析,每一级DNS都可能化缓存记录A,当模拟服务器下线后,DNS记录依然存在,导致分配到该服务器的用户访问失败。
  • DNS负载均衡的控制权在服务商手里,网站可能无法做出过多的改善和管理,不能够按照服务器处理能力来分配负载均衡。不能区分服务器之间的差异,不能反映服务器当前运行状态。
  • 反向代理负载均衡
  • 反向代理处于web服务器这边,反向代理服务器提供负载均衡的功能,同时管理一组web服务器,它根据负载均衡算法将请求的浏览器访问转发到不同的店web服务器处理,处理结果经过反向服务器返回给浏览器。
  • 优点:部署简单,处于http协议层面
  • IP负载均衡
  • IP网络层负载均衡(根据IP进行转发)
  • 在网络层和传输层(ip和端口)通过修改目标地址进行负载均衡。用户访问请求到达负载均衡服务器,服务器在操作系统内核进程获取网络数据包,根据算法得到一台真是服务器地址,然后将用户请求的目标地址改成真是服务器地址,数据处理完后返回给负载均衡服务器,服务器收到响应后将自身地址修改成原用户访问地址后再讲数据返回回去。类似于反向服务器负载均衡。
  • 优点:速度很快
  • 缺点:无法处理比较高级的请求
  • 数据链路层负载均衡(根据MAC地址进行转发)
  • 在数据链路层修改Mac地址进行负载均衡。负载均衡服务器的IP和它所管理的web服务群的虚拟IP一致;负载均衡数据分发过程中不修改访问地址的IP地址,而是修改Mac地址;通过这两点达到不修改数据包的原地址和目标地址就可以进行正常的访问。
  • 优点:不需要负载均衡器进行IP地址转换,也就是进入时会被分配到不同MAC相同IP的服务器,回来时由当前服务器直接返回。
  • 缺点:对负载均衡服务器网卡要求较高
  • F5硬件负载均衡
  • 前面技术有的,他都有。能根据URL,IP,MAC,DNS都能转发。
  • 缺点:贵

四层负载和七层负载

第四层:传输层

第七层:应用层

所谓四层就是基于IP+端口的负载均衡,主要代表有LVS。

七层负载也称内容交换,就是基于URL等应用信息的负载均衡,主要代表有nginx。

LVS概述

LVS工作在一台server上提供Directory(负载均衡器/目录服务器)的功能,本身并不提供服务,只是把特定的请求转发给对应的real server(真正提供服务的主机),从而实现集群环境中的负载均衡。

工作模式

  • NAT转发模式

Network Address Translation 网络地址转发模式

工作原理:

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标IP地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

优点:

网络隔离更安全

节约IP地址

缺点:

随着数据的加大,目录服务器会成为系统性能的瓶颈,容易被卡脖子。

  • DR直接路由模式

DR模式和NAT模式的区别,Client还是访问LVS服务器,LVS服务器将流量带到内网web服务器中,但是数据的返回将不再经过LVS服务器,而是直接返回数据到Client。

direct routing 直连路由。

优点:

集群节点和director必须在一个物理网络内。

RIP可以使用公网地址或私有地址。

director仅处理入站请求,服务器压力比较小。

集群节点网关不指向director,故出站不经过director。

不支持端口映射。

大多数操作系统可以作为realserver,要支持隔离arp广播。

  • TUN-IP隧道模式
  • FULL-NAT
  • 模式对比

LVS-Nat实战案例

创建四台机器

节点名称

作用

网卡

IP

LVS-LVS

LVS服务器

NAT网卡/仅主机网卡

192.168.174.11/192.168.150.12

client

模拟用户

仅主机网卡

192.168.150.100

LVS-web1

网页服务器1

NAT网卡

192.168.174.18

LVS-web2

网页服务器2

NAT网卡

192.168.174.19

 

LVS服务器必须要有两张网卡,一张网卡用来模拟外网(仅主机),一张网卡连接内网(NAT)。LVS服务器的作用就是以仅主机网卡,通信NAT网卡进入内网。所以clinet节点只需要有外网网卡即可(仅主机)。而web服务器只需要内网网卡(NAT)。

web节点配置

两个节点都进行配置

systemctl stop firewalld        #关闭防火墙
systemctl disable firewalld        #关闭防火墙自启
setenforce 0                    #关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disalbed'    #永久关闭selinux
yum install vim net-tools httpd -y                #安装Apache和一些工具
systemctl start httpd            #启动httpd
systemctl enable httpd            #设置httpd自启

两个web服务器路由配置

route add -net 192.168.150.0/24 gw 192.168.174.11
                #外网网段            #LVS内网IP作为网关

route add: 添加路由

-net: 设置网络段

gw: 写网关,因为数据要从网关出来

因为我们的数据要从外网进,内网出,如果web服务器接收到了外网的流量请求,数据要从网关返回,我们的网关就是LVS。

也就是LVS把流量从外网口领到了LVS内网网卡,由内网网卡进入到内网服务器,然后服务器统一返回数据到LVS网关(LVS的内网口)。

 

LVS服务器节点配置

基础配置

systemctl stop firewalld        #关闭防火墙
systemctl enable firewalld        #关闭防火墙自启
setenforce 0                    #关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disalbed'    #永久关闭selinux
yum install vim net-tools -y                #安装一些工具

路由功能配置

echo 1 > /proc/sys/net/ipv4/ip_forward        #启动路由功能
#必须启动转发功能

当Linux接收到一个不是自己的包的时候,设备默认是丢弃的,会认为这个包传递错误。而我们现在需要将数据包进行传递,所以这样是行不通的。

但是现在的LVS服务器比较特殊,按照上面的解释就是,Client节点访问LVS服务器,LVS要将数据传递给web服务器,web服务器需要再通过LVS服务器传递给Client节点。

当将ip_forwad内容修改为1的时候,这个LVS服务器就具有路由转发功能了。

安装并配置LVS

yum install ipvsadm -y        #安装LVS

暴露对外虚拟服务器(-A),使用TCP协议(-t),暴露的ip为LVS的外网网卡(192.168.150.101),使用策略(-s)为轮巡策略(rr)。

ipvsadm -A -t 192.168.150.12:80 -s rr

对内暴露真实服务器(-a),使用TCP协议(-t),以对外IP路由连接到真实服务器(-r)中(192.168.174.18/19)。

ipvsadm -a -t 192.168.150.12:80 -r 192.168.174.18:80 -m
ipvsadm -a -t 192.168.150.12:80 -r 192.168.174.19:80 -m

在web1中输出“web1”到var/www/html/index.html

echo web1 > /var/www/html/index.html
echo web2 > /var/www/html/index.html

 

Client访问LVS服务器公网IP,LVS服务器啥都干不了只能转发流量,然后转发到内网中。

此时使用curl 192.168.150.12即可查看是否配置成功。

lvs 并发连接 lvs并发数_IP_02

 

LVS-DR实战案例

四台机器都需要在同一个网段。

节点名称

作用

网卡

IP

client

模拟用户

NAT

192.168.174.15

web1

web节点1

NAT

192.168.174.16

web2

web节点2

NAT

192.168.174.17

LVS-LVS

LVS服务器

NAT

192.168.174.18

 

LVS创建虚拟IP和路由

对外暴露的一个IP,真实服务器也用这个IP。

ifconfig eth:0 192.168.174.100 broadcast 192.168.174.255 netmask 255.255.255.0 up

使用ifconfig工具,给eth0网卡配置一个子接口,设置IP为192.168.174.100,设置广播地址为192.168.174.255,netmask子网掩码为255.255.255.0,设置为开启。

lvs 并发连接 lvs并发数_负载均衡_03

 

route add -host 192.168.174.100 dev eth:0

添加主机路由,只要有人访问该IP,只允许ens33:0子接口进行通讯。

 

vim /etc/sysctl.conf                        #进入配置文件,设置路由转发

net.ipv4.ip_forward = 1                        #开启路由转发
net.ipv4.conf.all.send_redirects = 0        #禁止转发重定向报文
net.ipv4.conf.eth0.send_redirects = 0        #禁止ens33转发重定向报文
net.ipv4.conf.default.send_redirects = 0    #禁止转发默认重定向报文

开启路由转发后,那怕访问的不是该机器,该机器也会帮你把数据传输到指定位置。

LVS设置负载均衡条目/规则

设置IPVSADM

yum install -y ipvsadm        #安装LVS
ipvsadm -C                     #清除ipvsadm规则
ipvsadm -A -t 192.168.174.100:80 -s rr #添加VIP规则
ipvsadm -a -t 192.168.174.100:80 -r 192.168.174.16:80 -g
#当有人访问100时,我将你的访问转移到真实服务器138中,并且是以DR模式
ipvsadm -a -t 192.168.218.100:80 -r 192.168.174.17:80 -g
ipvsadm-save > /etc/sysconfig/ipvsadm    #将配置保存到该文件,即可重启后依然保存配置
systemctl enable ipvsadm    #设置自启

web集群配置

在两个web服务器做以下操作:

安装apache

yum install -y httpd            #安装Apache
systemctl start httpd            #启动apache
systemctl disable httpd            #设置Apache自启
echo wuhu > /var/www/html/index.html    #设置index界面

配置虚拟IP

ifconfig lo:0 192.168.174.100/32

lo:loop back 虚拟网卡不做通信,我们要配置假接口下的子接口。

web服务器设置内核参数


echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#忽略arp响应,不允许接收
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

两条命令最简单的理解是:有人喊我我听不见,但是发包了我接收并送出去。

此时LVS-DR已经配置完成

lvs 并发连接 lvs并发数_负载均衡_04

 

资源信息查看

tail  /var/log/httpd/access_log        #查看Apache日志
ipvsadm -Lnc                        #查看本机被访问过的信息
ipvsadm -Ln                            #检查本机配置的规则信息

 

LVS理论知识

ipvsadm -A -t 192.168.150.12 -s rr    #这里给LVS服务器配置轮巡算法

1.RR 轮巡

交替进行循环,也就是逐个分配到服务器中。

2.WRR 加权轮巡

根据服务器处理不同的能力,设置不同的权重,来调度访问请求。这样可以保证处理能力强的服务器可以处理更多的访问流量。

3.LC 最少连接

调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

4.WLC 加权最少连接

在集群系统中的服务器性能差异较大的情况下,调度器采用”加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

LVS工作模式模式对比

 

VS/NAT

VS/TUN

VS/DR

服务器操作系统

任意

支持隧道

多数(支持non-arp)

服务器网络

私有网络

局域网/广域网

局域网

服务器数目

10-20

100

大于100

服务器网关

负载均衡器

自己的路由

自己的路由

效率

一般


最高

LVS命令解释

命令

解释

-A

对外暴露虚拟服务器

-t

使用TCP协议

-a

对内暴露真实地址

-r

真实服务器

-m

地址伪装,指定LVS的工作模式为NAT模式

-w

真实服务器权值

-g

设置为DR模式

-E

修改虚拟服务器的算法

-D

删除虚拟服务器

-C

删除所有LVS配置

-Ln

检查当前配置的虚拟机和各个RS的权重

-Lnc

查看当前ipvs模块中记录的连接