LVS集群

本文详细介绍了Linux Virtual Server(LVS)的集群架构,包括负载均衡集群的类型和目的。重点讲解了LVS的NAT和DR两种工作模式的配置,以及路由器IPv4和IPv6的转发原理。在NAT模式中,通过双网卡配置实现了负载均衡,而在DR模式下,利用单网卡和环回地址避免了IP冲突。同时,文章探讨了IPv4与IPv6在性能和安全性方面的差异,并提供了LVS调度算法的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

LVS

LVS集群组成

配置LVS NAT模式(双网卡)

路由器ipv4和ipv6转发原理

区别?

性能

IP报头

网络安全

配置LVS DR模式(单网卡)

总结


  • 通过高速网络将很多机器组织到一起,作为一个整体对外提供服务,在客户端看来就像只有一个服务器

  • 集群在付出较低的情况下在扩展性、性能方面都可以做到很灵活

  • 任务调度是集群系统中的核心技术

集群分类

  • 负载均衡集群:Load Balance

(相当于客户太多让客户结账的时候走不同的通道一起结账)

  • 高可用集群:High Availability

(有一台机器足够了,但不能保证这台机器永不宕机,就采用主备策略)

(相当于中午原本员工去吃饭,超市另外员工替班,保证通道一直可以结账)

  • 高性能计算:High Performance Computing

(提高算数,速度)

集群的目的

  • 提高性能(如:计算密集应用,天气预报,核试验模拟)

  • 降低成本(如:相对百万美元级的计算机,价格便宜)

  • 提高可扩展性(只要增加集群节点即可)

  • 增强可靠性(多个节点完成相同功能,避免单点失败)

LVS

  • LVS:Linux Virtual Server,Linux虚拟服务器

  • k8s底层实现的负载均衡用的也是LVS

  • 基于4层,实现负载均衡集群,nginx是基于7层,也实现了负载均衡

  • 作者:章文嵩。国防科技大学读博士期间编写

  • LVS的工作模式:

    • NAT:网络地址转换(大并发访问时,调度器的性能成为瓶颈)

    • DR:路由模式(节点服务器需要配置VIP,注意MAC地址广播)

    • TUN:隧道模式

 

  • 调度器:LVS服务器

  • 真实服务器Real Server:提供服务的服务器

  • VIP:虚拟地址,提供给用户访问的地址

  • DIP:指定地址,LVS服务器上与真实服务器通信的地址

  • RIP:真实地址,真实服务器的地址

  • 常见的调度算法,共10个,常用的有4个:

    • 轮询rr:Real Server轮流提供服务

    • 加权轮询wrr:根据服务器性能设置权重,权重大的得到的请求更多

    • 最少连接lc:根据Real Server的连接数分配请求

(解释:顾客来结账,根据收银员速度和顾客带的量多少,去人少的地方排队结账)

  • 加权最少连接wlc:类似于wrr,根据权重分配请求

LVS集群组成

负载均衡图解:

前端

中间

底端

负载均衡层

服务器群组层

数据共享存储层

由一台或多台负载调度器构成

由一组实际运行应用服务的服务器组成

提供共享存储空间的存储区域

配置LVS NAT模式(双网卡)

web服务器和存储都是一个网络调度器是双网卡,

用户访问时,先访问到调度器的外网卡

调度器根据调度算法,把它的请求发到某一台web器上,

然后web回应客户的时候也是先发送到调度器上,用内网卡再回复给客户。

通过网络地址转发实现的虚拟服务器;

大并发访问时,调度器的性能成为瓶颈

环境准备

  • client1:eth0->192.168.4.10,网关192.168.4.5

  • lvs1: eth0 -> 192.168.4.5;eth1->192.168.2.5

  • web1:eth1->192.168.2.100;网关192.168.2.5

  • web2:eth1->192.168.2.200;网关192.168.2.5

 

# 登陆之后,将以下内容粘贴到终端
hostnamectl set-hostname client1
nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.10/24
nmcli connection down eth0
nmcli connection up eth0
echo a | passwd --stdin root
nmcli connection modify eth0 ipv4.gateway 192.168.4.5
nmcli connection down eth0
nmcli connection up eth0
# 退出
[root@localhost ~]# exit
# 退出之后,按ctrl+]可回到真机
# 真机通过ssh连接client1
[root@zzgrhel8 ~]# rm -f ~/.ssh/known_hosts 
[root@zzgrhel8 ~]# ssh 192.168.4.10

配置2台web服务器

[root@web1 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.2.254/centos-1804
enabled=1
gpgcheck=0
[root@web2 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.2.254/centos-1804
enabled=1
gpgcheck=0
[root@web1 ~]# yum install -y httpd   (安装web服务)
[root@web2 ~]# yum install -y httpd
# 创建测试页面
[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html
[root@web2 ~]# echo "apache web server2" > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd --now  (启动apache)
[root@web2 ~]# systemctl enable httpd --now
# 在lvs1上测试到web服务器的访问
[root@lvs1 ~]# curl http://192.168.2.100/
192.168.2.100
[root@lvs1 ~]# ^100^200   # 将上一条命令中的100换成200,执行
curl http://192.168.2.200/
apache web server2

确保lvs1的ip转发功能已经打开。该功能需要改变内核参数

# 查看ip转发功能的内核参数
[root@lvs1 ~]# sysctl -a    # 查看所有的内核参数
[root@lvs1 ~]# sysctl -a | grep ip_forward  # 查看ip_foward参数
net.ipv4.ip_forward = 1   # 1表示打开转发,0表示关闭转发
# 永久设置打开ip_forward功能
[root@lvs1 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf 
[root@lvs1 ~]# sysctl -p
net.ipv4.ip_forward = 1
# 测试从客户端到服务器的访问
[root@client1 ~]# curl http://192.168.2.100/
192.168.2.100
[root@client1 ~]# curl http://192.168.2.200/
apache web server2

路由器ipv4和ipv6转发原理

路由器可以在其任何接口上接收数据包,并通过不同的接口把数据包转发出去,将其发送到目的地。数据包既可以从该接口进入路由器,也可以从该接口离开路由器。

 当路由器收到一份IP数据报后,首先要对该报文进行判断,然后根据判断的结果在作进一步的处理。如果数据报是无效或错误的,路由器会把报文丢到,否则路由器会根据数据报的目的IP地址转发该报文。

IPv4是互联网协议第四版,是计算机网络使用的数据报传输机制,此协议是第一个被广泛部署的IP协议。每一个连接Internet的设备(不管是交换机、PC还是其他设备),都会为其分配一个唯一的IP地址,IPv4使用32位(4字节)地址,大约可以存储43亿个地址,但随着越来越多的用户接入到Internet,全球IPv4地址已于2019年11月已全数耗尽。这也是后续互联网工程任务组(IEIF)提出IPv6的原因之一。192.149.252.76这是一个IPv4地址,

IPv6是由IEIF提出的互联网协议第六版,用来替代IPv4的下一代协议,IPv6的地址长度为128位,可支持340多万亿个地址。IPv6地址通常分为8组,4个十六进制数为一组,每组之间用冒号分隔。3ffe:1900:fe21:4545:0000:0000:0000:0000,这是一个IPv6地址。

区别?

性能

与IPv4相比,IPv6将地址长度从32位增加到了128位,可支持更多的地址需求。

IP报头

IPv4根据提供的IP选项,有20~60个字节的可变长度;而IPv6拥有40个字节的固定长度,相对于IPv4而言报头简单。

网络安全

对于IPv4而言,互联网安全协议(IPsec)是可选的,但不一定是免费的,有的需要付费支持;但对于IPv6来说,互联网安全协议是必选项。此外,像身份验证、数据一致性和保密性的内容也加入到了IPv6中。由此说明,IPv6相对于IPv4来说,更加安全。

安装LVS

[root@lvs1 ~]# yum install -y ipvsadm

ipvsadm使用说明

[root@lvs1 ~]# ipvsadm
-A: 添加虚拟服务器
-E: 编辑虚拟服务器
-D: 删除虚拟服务器
-t: 添加tcp服务器
-u: 添加udp服务器
-s: 指定调度算法。如轮询rr/加权轮询wrr/最少连接lc/加权最少连接wlc
-a: 添加虚拟服务器后,向虚拟服务器中加入真实服务器
-r: 指定真实服务器
-w: 设置权重
-m: 指定工作模式为NAT
-g: 指定工作模式为DR

配置LVS

# 为web服务器创建VIP,4.5的虚拟服务器,使用rr轮询调度算法
[root@lvs1 ~]# ipvsadm -A -t 192.168.4.5:80 -s rr
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln  # L是列出,n是使用数字,而不是名字
# 向虚拟服务器中添加RIP,2.100;2.200
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m    #权重低是1
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 2 -m    #权重高是2
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln
# 验证
[root@client1 ~]# for i in {1..4}
> do
> curl http://192.168.4.5/
> done
apache web server2
192.168.2.100
apache web server2
192.168.2.100
# 删除配置。(如果配置有错,用以下命令删除重配置)
[root@lvs1 ~]# ipvsadm -D -t 192.168.4.5:80
# 修改调度模式为加权轮询
[root@lvs1 ~]# ipvsadm -E -t 192.168.4.5:80 -s wrr
# 验证配置
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.5/; done
apache web server2
apache web server2
192.168.2.100
 apache web server2
apache web server2
192.168.2.100

配置LVS DR模式(单网卡)

(1)为了防止ip地址冲突:

我们决定在调度器eth0上配4.15,

两台web机器的lo环回地址(虚拟网卡)上配4.15.

 

(2)接下来还有一个问题:

就是客户端访问4.15的时候,三台机器访问哪一个?

所以,我们需要更改内核参数,更改后两台web机器发现虽然有4.15地址,

但是在lo环回地址(虚拟网卡)上面,所以,两台web机器便不做应答

(3)接下来调度器根据配置的规则,将数据发给4.100或者4.200

两台web机器便用4.15的身份回应客户端

LVS主机和web服务器都是单网卡。它们连在同一网络中,

用户访问时,让它去访问调度器,调度器把请求发给某一个web,

web直接回应客户端

修改实验环境

  • client1:eth0-> 192.168.4.10

  • lvs1:eth0->192.168.4.5,删除eth1的IP

  • web1:eth0->192.168.4.100,删除eth1的IP

  • web2:eth0->192.168.4.200,删除eth1的IP

# 删除lvs虚拟服务器配置
[root@lvs1 ~]# ipvsadm -D -t 192.168.4.5:80   #先把4.5上面的规则去掉
[root@lvs1 ~]# ipvsadm -Ln
# 删除lvs1上eth1的配置
[root@lvs1 ~]# nmcli connection modify eth1 ipv4.method disabled ipv4.addresses ''   #把ip网卡设置为空
[root@lvs1 ~]# ifdown eth1   #去掉eth1
# 修改web1的配置:停掉eth1的地址。配置eth0的地址为192.168.4.100
# 进入网卡配置文件目录
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
# eth0网卡的配置文件叫ifcfg-eth0
[root@web1 network-scripts]# ls ifcfg-eth*
ifcfg-eth0  ifcfg-eth1	ifcfg-eth2  ifcfg-eth3
# 配置eth0地址
[root@web1 network-scripts]# vim ifcfg-eth0
TYPE=Ethernet             # 网络类型为以太网
BOOTPROTO=none            # IP地址是静态配置的,也可以用static
NAME=eth0                 # 为设备重命名
DEVICE=eth0               # 网卡设备名
ONBOOT=yes                # 开机激活网卡
IPADDR=192.168.4.100      # IP地址
NETMASK=255.255.255.0     # 子网掩码
GATEWAY=192.168.4.254     # 网关
[root@web1 network-scripts]# ifdown eth0; ifup eth0  # 禁用激活网卡
# 在web1上停掉eth1
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=no
[root@web1 ~]# ifdown eth1
# 修改web2的网络
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.4.200
NETMASK=255.255.255.0
GATEWAY=192.168.4.254
[root@web2 ~]# ifdown eth0; ifup eth0
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=no
[root@web2 ~]# ifdown eth1   # 终端卡住,关掉它,在新终端重新连

1.在lvs1的eth0上配置vip 192.168.4.15。通过为eth0创建逻辑端口的方式配置vip,为逻辑端口起名为eth0:0

[root@lvs1 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs1 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@lvs1 network-scripts]# vim ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.15
PREFIX=24
[root@lvs1 network-scripts]# ifup eth0:0
# 查看新的地址
[root@lvs1 network-scripts]# ifconfig 

2.在2台web服务器的lo上配置vip 192.168.4.15

[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15   #环回地址
NETMASK=255.255.255.255  #子网掩码(这里表示我自己就是一个网络)
NETWORK=192.168.4.15
BROADCAST=192.168.4.15   #广播地址
ONBOOT=yes
NAME=lo:0
[root@web1 network-scripts]# ifup lo:0
[root@web1 network-scripts]# ifconfig 
# 把web1的配置拷贝到web2上
[root@web1 network-scripts]# scp ./ifcfg-lo:0 192.168.4.200:/etc/sysconfig/network-scripts/
[root@web2 ~]# ifup lo:0
[root@web2 ~]# ifconfig 

3.在2台web服务器上配置内核参数,使得它们不响应对192.168.4.15的请求

[root@web1 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 0
[root@web1 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 0
[root@web1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1   #有了这个lo的4.15便不会回应
net.ipv4.conf.lo.arp_ignore = 1     #有了这个lo的4.15便不会回应
net.ipv4.conf.all.arp_announce = 2  #有了这个lo的4.15便不会回应
net.ipv4.conf.lo.arp_announce = 2    #有了这个lo的4.15便不会回应
[root@web1 ~]# sysctl -p  #生效
[root@web2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@web2 ~]# sysctl -p   #生效

4.在lvs1上配置虚拟服务器

# 创建虚拟服务器,指定wlc调度算法,最少连接
[root@lvs1 ~]# ipvsadm -A -t 192.168.4.15:80 -s wlc
# 向虚拟服务器中加真实服务器
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -w 1 -g    #权重1
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -w 2 -g    #权重2
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln
# 客户验证
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
192.168.2.100
apache web server2
apache web server2
192.168.2.100
apache web server2

5.lvs本身没有应用服务器监控功能,如果web服务器出现问题,需要手工从规则中删掉

[root@web1 ~]# systemctl stop httpd
# 客户端访问时,转发到web1上的请求,将会拒绝连接
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
curl: (7) Failed connect to 192.168.4.15:80; 拒绝连接
apache web server2
apache web server2
curl: (7) Failed connect to 192.168.4.15:80; 拒绝连接
apache web server2
#ipvsadm的规则中删除web1
[root@lvs1 ~]# ipvsadm -d -t 192.168.4.15:80 -r 192.168.4.100
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2

总结

DR路由模式,用的相对多一点,

NAT网络地址转换,会受到速度性能的影响,

排错步骤:

# 在lvs上可以访问到web服务器
[root@lvs1 ~]# curl http://192.168.4.100/
192.168.2.100
[root@lvs1 ~]# curl http://192.168.4.200/
apache web server2
# 查看vip
[root@lvs1 ~]# ifconfig eth0:0
eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.15  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:0d:fb:79  txqueuelen 1000  (Ethernet)


[root@web1 ~]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.4.15  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
# 查看内核参数
[root@web1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
# 查看规则
[root@lvs1 ~]# 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.4.15:80 wlc
  -> 192.168.4.100:80             Route   1      0          0         
  -> 192.168.4.200:80             Route   2      0          0  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值