LVS负载均衡超详细入门介绍

LVS

一、LVS入门介绍

1.1.LVS负载均衡简介

1.2.负载均衡的工作模式

1.2.1.地址转换NAT(Network Address Translation)

1.2.2.IP隧道TUN(IP Tunneling)

1.2.3.直接路由DR(Direct Routing)

1.3.LVS常用的负载调度算法

1.4.LVS管理工具ipvsadm

二、NFS共享存储服务

2.1.NFS简介

2.2.NFS共享存储服务实战

2.2.1.NFS服务器的安装配置

2.2.2.NFS客户端访问挂载

三、LVS负载均衡集群实战

3.1.地址转换模式(LVS-NAT)

3.1.1.案例描述

3.1.2.案例实施

3.1.3.验证测试

3.2.直接路由模式(LVS-DR)

3.2.1.案例描述

3.2.2.案例实施

3.2.3.验证测试

一、LVS入门介绍

1.1.LVS负载均衡简介

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决方法。

LVS现在已经成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够实现自动调用,在CentOS 7系列中通过“modprobe ip_vs”加载该模块。

lvs工作在四层,只转发请求不涉及流量,效率更高

nginx工作在七层能够针对域名、目录做特定转发,功能更全面

1.2.负载均衡的工作模式

关于集群的负载调度技术,可以基于IP、端口、内容等进行分发。其中基于IP的负载调度效率最高,基于IP的负载均衡模式中,常见的有地址转换、IP隧道和直接路由三种工作模式,如下图:

1.2.1.地址转换NAT(Network Address Translation)

通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

1.2.2.IP隧道TUN(IP Tunneling)

采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 LVS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

1.2.3.直接路由DR(Direct Routing)

LVS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同LVS/TUN技术一样,LVS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。

以上三种工作模式中,NAT方式只需要一个公网IP地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就采用这种方式;相对而言,DR模式和TUN模式负载能力更加强大,适合范围更广,但是节点的安全性要稍差一些。

1.3.LVS常用的负载调度算法

针对不同的网络服务和配置需要,LVS调度器提供多种不同的负载调度算法,其中最常见的如下所示:

轮询(Round Robin):

将收到的访问请求按照顺序轮流分配给集群中的各节点服务器,均等地对待每台节点服务器,而不考虑服务器实际的连接数和系统负载等条件;当所有节点服务器的配置都相近或一致时一般采用这种方式。

加权轮询(Weighted Round Bobin):

根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重。这样可以保证处理能力强的服务器承担更多的访问流量。

最少连接(Least Connections):

根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地负载均衡。

加权最少连接(Weighted Least Connections):

在服务器节点的性能差异较大情况下,可以为真实服务器自动调整权重,权重较高的节点将承担更大比例的活动连接负载。

1.4.LVS管理工具ipvsadm

ipvsadm是在负载调度器上使用的LVS集群管理工具,通过调用ip_vs模块添加、删除、查看负载均衡集群运行状态。在CentOS 7系列中需要手动安装ipvsadm管理工具。

# modprobe ip_vs //加载LVS功能模块

# yum install -y ipvsadm //安装

# ipvsadm -v //查看已安装的ipvsadm版本

ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)

# man ipvsadm //查询ipvsadm使用手册

创建虚拟服务器

若集群的VIP地址为192.168.1.100,针对TCP 80端口提供负载分流服务,使用的调度算法为轮询,则对应的ipvsadm命令操作如下,对于负载均衡调度器来说,VIP地址必须是本机实际已启用的IP地址。

# ipvsadm -A -t 192.168.1.100:80 -s rr

//-A /表示添加虚拟服务器

//-t /指定VIP地址以及端口

//-s /指定负载调度算法,轮询/rr、加权轮询/wrr、最少连接/lc、加权最少连接/wlc

添加节点服务器

为虚拟服务器192.168.1.100添加四个节点服务器,命令如下,若希望使用保持连接,还应添加“-p 60”选项,其中60为保持时间,单位为秒

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20:80 -m -w 1

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.30:80 -m -w 1

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.40:80 -m -w 1

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.50:80 -m -w 1

//-a /表示添加节点服务器

//-t /指定VIP地址以及端口

//-r /指定RIP地址以及端口

//-m /表示使用NAT集群模式,-g为DR模式、-i为TUN模式

//-w /指定权重,权重值越高被分配的用户请求数量就越多,权重为0时,表示停用该节点服务器

查看LVS集群状态

# 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.1.100:80 rr

  -> 192.168.1.20:80              Masq    1      0          0         

  -> 192.168.1.30:80              Masq    1      0          0         

  -> 192.168.1.40:80              Masq    1      0          0         

  -> 192.168.1.50:80              Masq    1      0          0      

Forward :负载均衡集群模式,Masq为NAT,Route为DR模式,Tunnel为TUN模式

Weight :权重,该值越大被分配的请求就越多,都一致时,表示均匀地接受请求

ActiveConn :活跃的连接数

InActConn:已处理的连接数

删除集群相关条目

# ipvsadm -d -r 192.168.1.20:80 -t 192.168.1.100:80 //删除单条节点服务器

# ipvsadm -D -t 192.168.1.100:80 //删除虚拟服务器,包括所有节点服务器

二、NFS共享存储服务

2.1.NFS简介

NFS是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过TCP/IP网络让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为‘应用/节点’服务器)可以通过mount挂载的方式将NFS服务器端共享的存储目录挂载到NFS客户端本地系统中,从客户端本地来看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。在互联网中小型网站集群架构后端常用NFS进行数据共享,如果是大型网站,可能还会用到更复杂的分布式文件系统。例如Moosefs/MFS、GlusterFS、FastDFS。

NFS服务的实现依赖于RPC(Remote Process Call,远程过程调用)机制,以完成远程到本地的映射过程,在CentOS 7系列系统中,需要安装nfs-utils、rpcbind软件包来提供NFS共享服务。前者用于NFS共享发布和访问,后者用于RPC支持。

NFS的RPC服务的主要功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的,这个RPC服务类似NFS服务器端和NFS客户端之间的一个中介。

2.2.NFS共享存储服务实战

案例描述:

通过NFS服务实现共享文件,使得两台Web服务器能够同时访问该共享获取同样的数据。

案例环境:

主机

操作系统

IP地址

主要软件

NFS Server

CentOS 7.5_64

192.168.1.14/24

nfs-utils、rpcbind

Web Client_1

CentOS 7.5_64

192.168.1.12/24

Web Client_2

CentOS 7.5_64

192.168.1.13/24

2.2.1.NFS服务器的安装配置

# yum install -y nfs-utils rpcbind

# systemctl enable nfs

# systemctl enable rpcbind

NFS设置共享目录

# mkdir -p /var/www/html

# echo "这是NFS存储服务器!" > /var/www/html/index.html

# vim /etc/exports //该文件用于设置NFS共享项目,指定共享目录、权限等

/var/www/html    192.168.1.0/24(rw,sync,no_root_squash)

或者

/var/www    192.168.1.0/24(rw) ,192.168.2.1(ro)

编辑以上配置文件时客户机可以是主机名、IP地址、网段、且允许使用*、?

通配符

权限中rw表示读写、ro表示只读,sync表示同步写入,no_root_squash表示>

当客户机用root登录时赋予本地root权限

# systemctl restart rpcbind  //先启动该服务

# systemctl restart nfs

查看本地共享的项目:

# showmount -e

"clnt_create: RPC: Unknown host" //首次查看时可能会报此错误

解决方法:

# vim /etc/hosts

192.168.1.14    pillarx1m //加入当前主机IP地址与对应的主机名

# showmount -e //再次查看当前服务器的共享项目

Export list for pillarx1m:

/var/www/html 192.168.1.0/24

2.2.2.NFS客户端访问挂载

NFS协议的目标是提供一种网络文件系统因此对NSF共享的访问也使用mount命令来进行挂载,对应的文件系统类型为nfs。即可以手动挂载也可以加入fstab配置文件实现开机自动挂载,考虑到集群系统网络稳定性,NFS服务器和NFS客户端之间最好是使用专用网络来进行连接。

# yum install -y nfs-utils rpcbind  //rpcbind客户机必须安装,nfs用于支持showmount命令

# systemctl enable rpcbind

# systemctl start rpcbind

# showmount -e 192.168.1.14 //查询NFS服务器的共享项目

Export list for 192.168.1.14:

/var/www/html 192.168.1.0/24

客户端手动挂载NFS服务器共享的目录

# mkdir /var/www

# mount 192.168.1.14:/var/www/ /var/www

查看客户机中的网页是否为NFS服务器的内容:

# cat /var/www/html/index.html

这是NFS存储服务器!

此时通过# mount 命令同样可以查看到已挂载的项目中有当前的NFS项目

客户端实现开机自动挂载:

# vim /etc/fstab

192.168.1.14:/var/www /var/www/        nfs     rw              0 0

添加开机自动挂载配置文件后,重启电脑后可以查看到该项目已经挂载

也可以在当前状态下输入# mount -a实现立即加载fstab配置文件

三、LVS负载均衡集群实战

3.1.地址转换模式(LVS-NAT)

3.1.1.案例描述

在NAT模式的集群中,LVS负载调度器是所有节点访问互联网的网关服务器,其外网地址192.168.1.10同时也作为整个集群的VIP地址,LVS服务器具备两块网卡,分别连接内网和外网。关于客户机访问服务器的数据流量的大致流向是这样的:

client --> LVS --> RS --> LVS --> client。此外,在接下来的案例中,均不再结合NFS共享存储,原因是加上NFS后当客户端访问服务器时,无论如何都只会显示一个网页内容,因此验证效果不明显。

案例架构图如下:

案例环境:

主机

操作系统

IP地址

主要软件

LVS Server

CentOS 7.5_64

192.168.1.10/24

192.168.2.10/24

ipvsadm

Web Server_1

CentOS 7.5_64

192.168.2.20/24

httpd-2.4.6-45.el7.centos.x86_64

Web Server_2

CentOS 7.5_64

192.168.2.30/24

3.1.2.案例实施

对于LVS负载调度器来说,需要开启路由转发规则,以便节点服务器能够访问到互联网,所有的节点服务器、共享存储均位于内网中,其默认网关设置为LVS负载调度器的内网IP地址(192.168.2.10)。

LVS Server操作

开启路由转发:

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

# sysctl -p

配置负载分配策略

# yum install -y ipvsadm

# ipvsadm -A -t 192.168.1.10:80 -s rr

# ipvsadm -a -t 192.168.1.10:80 -r 192.168.2.20:80 -m -w 1

# ipvsadm -a -t 192.168.1.10:80 -r 192.168.2.30:80 -m -w 1

若要验证权重分配几率,最好是采用wrr来实现,CentOS 7中通过rr无法体现出权重的几率

# 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.1.10:80 rr

  -> 192.168.2.20:80              Masq    1      0          0         

  -> 192.168.2.30:80              Masq    1      0          0     

两台Web Server配置

Web Server_1配置:

指定网关为LVS服务器的内网IP地址:

# vim /etc/sysconfig/network-scripts/ifcfg-ens33

GATEWAY="192.168.2.10"

# systemctl restart network

安装配置提供给客户端的应用服务程序

# yum install -y httpd

# systemctl enable httpd

# systemctl start httpd

# mkdir -p /var/www/html/

# echo "LVS负载均衡集群之Web Server_1" > /var/www/html/index.html

Web Server_2配置:

指定网关为LVS服务器的内网IP地址:

# vim /etc/sysconfig/network-scripts/ifcfg-ens33

GATEWAY="192.168.2.10"

# systemctl restart network

安装配置提供给客户端的应用服务程序

# yum install -y httpd

# systemctl enable httpd

# systemctl start httpd

# mkdir -p /var/www/html/

# echo "LVS负载均衡集群之Web Server_2" > /var/www/html/index.html

3.1.3.验证测试

外网客户机测试:

通过外网客户机访问集群VIP地址访问集群,发现不断刷新或重新连接能够出现不同的页面信息,不过这些信息都来自于节点服务器中的数据,此时再查看LVS服务器的负载情况,也是有所变化的:

# 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.1.10:80 rr

  -> 192.168.2.20:80              Masq    1      0          6         

  -> 192.168.2.30:80              Masq    1      0          5    

此外,还可以直接查看节点服务器的访问日志,由于此种集群方式采用的是转发请求,因此在节点服务器日志中是能够看到外网客户机访问的。

# cat /etc/httpd/logs/access_log

192.168.1.253 - - [11/Nov/2018:12:04:15 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"

默认lvs会话保持为五秒。

会话保持时间设置:

节点服务器:KeepAliveTimeout 10

lvs调度服务器:

# ipvsadm --list --timeout

# ipvsadm --set 720 120 300

3.2.直接路由模式(LVS-DR)

3.2.1.案例描述

在DR模式的集群中,LVS负载调度器作为集群的访问入口,但不作为网关使用;服务器池中的所有节点服务器各自接入互联网,发送给客户机的Web响应数据包不需要经过LVS负载调度器。这种方式入站、出站访问数据被分别处理,因此LVS负载调度器和所有的节点服务器都需要配置VIP地址,以便响应对整个集群的访问,考虑到数据存储安全性,共享存储设备会放在内部专用网络中。关于客户机访问服务器的数据流量的大致流向是这样的:client --> LVS --> RS --> client。此外,在接下来的案例中,均不再结合NFS共享存储,原因是加上NFS后当客户端访问服务器时,无论如何都只会显示一个网页内容,因此验证效果不明显。

案例架构图如下:

案例环境:

3.2.2.案例实施

LVS Server操作

配置虚拟IP地址

采用虚接口的方式(ens32:0)为网卡ens32绑定一个VIP地址,以便响应集群访问,配置结果为ens32:192.168.1.10、ens32:0:192.168.1.100

# cd /etc/sysconfig/network-scripts/

# cp ifcfg-ens32 ifcfg-ens32:0

# vim ifcfg-ens32:0 //只修改以下三部分内容即可

NAME=ens32:0

DEVICE=ens32:0

IPADDR=192.168.1.100

# ifup ens32:0

# ifconfig ens32:0

ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255

        ether 00:0c:29:99:f9:ca  txqueuelen 1000  (Ethernet)

调整/proc响应参数

对于DR集群来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应。

# vim /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens32.send_redirects = 0 //此接口地址为lvs服务器正在使用的物理接口

# sysctl -p

配置负载分配策略

# yum install -y ipvsadm

# ipvsadm -A -t 192.168.1.100:80 -s rr

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.20 -g -w 1

# ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.30 -g -w 1

# 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.1.100:80 rr

  -> 192.168.1.20:80              Route   1      0          0         

  -> 192.168.1.30:80              Route   1      0          0  

两台Web Server配置

使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突,除此之外,WEB服务器的配置与NAT模式配置类似。

节点服务器配置VIP地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发),因此使用虚接口lo:0来承受VIP地址,并为本机添加一条路由记录,将访问VIP地址的数据限制在本地,避免通信紊乱。

Web Server_1配置:

设置VIP地址:

# cd /etc/sysconfig/network-scripts/

# cp ifcfg-lo ifcfg-lo:0

# vim ifcfg-lo:0 //只修改以下三部分内容即可

DEVICE=lo:0

IPADDR=192.168.1.100

NETMASK=255.255.255.255

# ifup lo:0

# ifconfig lo:0

添加路由

# /sbin/route add -host 192.168.1.100 dev lo:0

# vim /etc/rc.local

/sbin/route add -host 192.168.1.100 dev lo:0

调整/proc相应参数

# vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce =2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

# sysctl -p

安装配置提供给客户端的应用服务程序

# yum install -y httpd

# systemctl enable httpd

# systemctl start httpd

# mkdir -p /var/www/html/

# echo "LVS负载均衡集群之Web Server_1" > /var/www/html/index.html

Web Server_2配置:

设置VIP地址:

# cd /etc/sysconfig/network-scripts/

# cp ifcfg-lo ifcfg-lo:0

# vim ifcfg-lo:0 //只修改以下三部分内容即可

DEVICE=lo:0

IPADDR=192.168.1.100

NETMASK=255.255.255.255

# ifup lo:0

# ifconfig lo:0

添加路由

# /sbin/route add -host 192.168.1.100 dev lo:0

# vim /etc/rc.local

/sbin/route add -host 192.168.1.100 dev lo:0

调整/proc相应参数

# vim /etc/sysctl.conf

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.default.arp_ignore = 1

net.ipv4.conf.default.arp_announce =2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

# sysctl -p

安装配置提供给客户端的应用服务程序

# yum install -y httpd

# systemctl enable httpd

# systemctl start httpd

# mkdir -p /var/www/html/

# echo "LVS负载均衡集群之Web Server_2" > /var/www/html/index.html

3.2.3.验证测试

外网客户机测试:

通过外网客户机访问集群VIP地址访问集群,发现不断刷新或重新连接能够出现不同的页面信息,不过这些信息都来自于节点服务器中的数据,此时再查看LVS服务器的负载情况,也是有所变化的:

# ipvsadm -ln

此外,还可以直接查看节点服务器的访问日志,由于此种集群方式采用的是转发请求,因此在节点服务器日志中是能够看到外网客户机访问的。

# cat /etc/httpd/logs/access_log

192.168.1.253 - - [11/Nov/2018:12:04:15 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Wind ows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0"

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值