LVS负载均衡集群

LVS基本介绍

  • LVS(Linux Virtual Server)是一个开源的负载均衡解决方案,它基于Linux平台,通过将多个服务器组成一个虚拟服务器集群,实现高效的流量分发和管理。LVS的核心功能是在网络的第四层(传输层)上进行智能的流量分配,从而提高网络吞吐量和系统可用性。

  • LVS项目由章文嵩博士在1998年发起,是中国最早出现的自由软件项目之一。它被集成到Linux内核中,利用内核模块实现IP层面的数据请求负载均衡调度。LVS能够使得终端用户通过外部负载均衡服务器访问后端的Web服务器,而用户感知到的是一个统一的服务,实际上请求被分配到了后端的多个服务器上。

LVS企业架构示意图

LVS中的IP地址术语

IP类型缩写 描述 用途
虚拟IPVIP (Virtual IP)LVS集群对外提供服务的IP地址,客户端请求直接发送到此地址接收进入的请求并分发到后端真实服务器
调度器IPDIP (Director IP)LVS调度器用于与后端真实服务器通信的IP地址在NAT模式下,作为私网接口与真实服务器通信
真实服务器IPRIP (Real IP)后端真实服务器的IP地址,与LVS调度器通信接收来自LVS的请求并处理,然后直接或通过LVS发送响应

LVS的工作模式

1、LVS/NAT模式

  • 网络地址转换(NAT):在这种模式下,LVS充当一个路由器和NAT设备。客户端的原始请求到达LVS后,LVS会修改请求的数据包,将目标IP地址从VIP改为选定的真实服务器(RS)的IP地址(RIP),同时也会修改目标端口(如果使用端口映射)。然后,请求被发送到后端的RS。

  • 数据流向:RS处理请求并生成响应,响应包的源IP是RS的IP地址,目标IP是客户端的IP地址。当响应包返回到LVS时,LVS再次修改数据包,将源IP地址从RS的IP地址改为VIP,并将源端口改回客户端的端口,然后将响应转发给客户端。

  • 特点:NAT模式下,LVS处理所有的请求和响应,因此可能成为性能瓶颈。但它的优点是安全性较高,因为RS的IP地址不会被客户端直接看到

2、LVS/DR模式(直接路由模式)

  • 直接路由(Direct Routing):在DR模式下,LVS仅修改请求数据包的目标MAC地址,使其直接发送到选定的RS,而不是通过LVS转发。这样,请求的IP地址保持不变,目标MAC地址改为RS的MAC地址。

  • 数据流向:RS处理请求后,响应包的源MAC和源IP是RS的地址和IP,目标MAC和目标IP是客户端的地址和IP,因此响应包直接发送给客户端,不再经过LVS。

  • 网络要求:由于MAC地址是针对特定网络段的,所以RS和LVS必须位于同一个物理网络段中。

NAT模式下实验准备工作

  1. VMware的网卡设置:一个网卡设置仅主机模式,网段为192.168.0.0/24 另一个网卡设置仅主机模式,网段为172.25.254.0/24
  2. 准备四台环境干净的虚拟机
  3. 防火墙及其selinux都处于关闭状态

 

LVS网络配置

[root@lvs ~]# vmset.sh eth0 172.25.254.100 lvs
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@lvs ~]# vmset.sh eth1 192.168.0.100 lvs
[root@lvs ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs ~]# nmcli connection reload 
[root@lvs ~]# nmcli connection up eth1

 

修改 ARP 内核配置做ARP抑制

[root@lvs ~]# cat >> /etc/sysctl.conf << EOF
> net.ipv4.conf.all.arp_ignore = 1
> net.ipv4.conf.all.arp_announce = 2
> EOF

LVS配置

安装部署

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

 编写策略

[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
#虚拟VIP为172.25.254.100,算法为轮询
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
# 查看
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0  

RS1

[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# nmcli connection reload 
[root@webserver ~]# nmcli connection up eth0

安装web服务

[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd

 测试(在客户机上测试)

 DR模式下实验准备工作

客户机

		  IP:172.25.254.200/24
		  gateway:172.25.254.100

 Route

#!/bin/bash
rm -fr /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1

[ipv4]
address1=$2/24,172.25.254.2
method=manual
dns=114.114.114.114;
EOF

chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1

hostnamectl hostname $3

cat > /etc/hosts <<EOF
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
$2      $3
EOF

[root@route ~]# vmset.sh eth0 172.25.254.100 route
[root@route ~]# vmset.sh eth1 192.168.0.100 route
[root@route ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@route ~]# nmcli connection reload 
[root@route ~]# nmcli connection up eth1

 打开内核路由功能

[root@lvs ~]# cat >> /etc/sysctl.conf << EOF
> net.ipv4.conf.all.arp_ignore = 1
> EOF

 LVS配置

[root@lvs1 ~]# vmset.sh eth1 192.168.0.50 lvs
[root@lvs1 ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs1 ~]# nmcli connection reload 
[root@lvs1 ~]# nmcli connection up eth1

 添加vip,采用环回,注意环回的掩码需要使用32位

[root@lvs1 ~]# ip a a 192.168.0.200/32 dev lo

安装lvs软件

[root@lvs ~]# dnf install ipvsadm -y

编写策略

[root@lvs1 ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs1 ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -m 
[root@lvs1 ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -m 

RS1

[root@webserver ~]# vmset.sh eth0 192.168.0.10 webserver
[root@webserver ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver ~]# nmcli connection reload 
[root@webserver ~]# nmcli connection up eth0

 修改网关

安装web服务

[root@webserver ~]# yum install httpd -y
[root@webserver ~]# echo webserver 192.168.0.10 > /var/www/html/index.html
[root@webserver ~]# systemctl enable --now httpd

修改rip,使RS主机VIP不对外响应

[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

 添加vip,采用环回,注意环回的掩码需要使用32位

[root@webserver ~]# ip a a 192.168.0.200/32 dev lo

 RS2

[root@webserver2 ~]# vmset.sh eth0 192.168.0.20 webserver2
[root@webserver2 ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@webserver2 ~]# nmcli connection reload 
[root@webserver2 ~]# nmcli connection up eth0

修改网关

 

修改rip,使RS主机VIP不对外响应

[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

添加vip,采用环回,注意环回的掩码需要使用32位 

[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo

安装web服务

[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver2 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

测试(在客户机上测试) 

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
werbserver2 192.168.0.20
webserver 192.268.0.10
werbserver2 192.168.0.20
werbserver2 192.168.0.20
webserver 192.268.0.10
werbserver2 192.168.0.20
werbserver2 192.168.0.20
webserver 192.268.0.10
werbserver2 192.168.0.20
werbserver2 192.168.0.20
[root@client ~]# 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值