lvs(linux virtual serverlinux虚拟机)可以帮助集群实现负载均衡。lvs由ipvsadm与ipvs两部分组成,ipvsadm是命令行管理工具,ipvs是内核模块,目前已经是netfilter的一部分。

当用户通过VIP和端口访问集群时,用户的请求报文会发往调度器。请求报文会先经过PREROUTING链,然后进行路由判断。由于此刻报文的目标IP为VIP,而VIP对于调度器来说就是本身的ip,所以报文会经过INPUT链,如果ipvs发现报文访问的VIP和端口与我们定义的LVS集群规则相符,ipvs则会根据定义好的规则与算法将报文直接发往POSTROUTING链,最后到达后端的RealServer中。

一、IP负载均衡技术

1.1 网络地址转换

网络地址转换实现虚拟服务器的VS/NAT技术(Virtural Server Via Network Address Translation)

LVS是什么进程 lvs工作原理和配置_IP

注:

  1. 请求经过direct server会进行dst ip更改,但是不更改cip
  2. rip无法路由到磁盘,所以响应经过direct server(gateway),direct server会进行src ip更改

1.2 直接路由

直接路由的VS/DR技术(Virtual Server Via Direct Routing)

LVS是什么进程 lvs工作原理和配置_服务器_02


注:

  1. 请求经过direct server不需要更改dst ip
  2. 响应不需要经过direct server直接返给客户端,direct server只维护一个半连接

1.3 IP隧道

IP隧道实现虚拟服务器的VS/TUN技术(Virtual Server Via IP Tunneling)

LVS是什么进程 lvs工作原理和配置_网络_03


注:

  1. 请求经过direct server会在原来请求的基础上进行ip封装
  2. 响应不经过direct server,也不需要更改ip,直接返给客户端

二、三种负载技术对比

三种IP负载均衡技术的优缺点如下表:

VS/NAT

VS/DR

VS/TUN

server

any

non-arp device

tunneling

server network

private

LAN

LAN/WAN

server number

low(10~20)

high(100)

high(100)

server gateway

load balancer

own router

own router

  1. VS/NAT
  • 优点:可运行在所有支持tcp/ip的系统,只需要一个IP(公网)配置在调度器,服务器可以使用私有地址。
  • 缺点:伸缩能力有限,节点数超过20,调度器本身就成为系统的瓶颈
  1. VS/DR
  • 优点:调度器可处理大量请求,调度器只处理客户的请求,响应数据可以直接从独立的网络路由返回给客户
  • 缺点:调度器和实际服务器都有一块网卡连在统一物理网段上,服务器不作ARP响应
  1. VS/TUN
  • 优点:与VS/DR优点的基础上,实际服务器不需要在同一个物理网段上面(经过IP封装可以到达任务服务器)
  • 缺点:所有服务器必须支持“IP Tunneling”或者“IP Encapsulation”协议

三、命令

# 创建集群
ipvsadm -A -t VIP:port -s rr		#-A创建集群 -t表示tcp服务 -s采用Round-Robin算法
ipvsadm -a -t VIP:port -r RIP1:port -m	#-a添加一个realsever -r表示realserver地址 -m表示NAT模式,默认是dr模式
ipvsadm -a -t VIP:port -r RIP2:port -m

service ipvsadm save					#centos6中保存规则,默认保存到/etc/sysconfig/ipvsadm
ipvsadm -S > /etc/sysconfig/ipvsadm		#保存规则
ipvsadm -R < /etc/sysconfig/ipvsadm		#载入规则

# 配置转发
echo 1 > /proc/sys/net/ipv4/ip_forward	#调度机上要配置转发开关(临时方法)
sysctl -w net.ipv4.ip_forward=1			#调度机上要配置转发开关(临时方法)
vi /etc/sysctl.conf						#调度机上要配置转发开关(永久方法)
net.ipv4.ip_forward = 1 

sysctl -p								#修改配置立刻生效

注:NAT模式修改IP地址,所以创建集群的时候可以 VIP:port和RIP1:port可以不一致;但是DR模式下DS只修改MAC地址不修改IP,所以 VIP:port和RIP1:port必须一致。

四、实例

4.1 nat实例

LVS是什么进程 lvs工作原理和配置_lvs_04

通过vmare创建四台虚拟机,宿主机作为客户端,调度器配置双网卡(一个是nat模式,具有外网的功能;一个是仅主机模式,作为局域网),129~131三台机器作为realserver,网卡配置为仅主机,Gateway是调度器的ip(192.168.16.128)。nat模式下内部只修改目标IP,realserver响应时无法找到cip,所以把请求发给gateway,调度器才会返给客户端

LVS是什么进程 lvs工作原理和配置_LVS是什么进程_05

客户端请求192.168.108.240:80,在240上获取tcp报文。报文里面没有体现调度器的地址(240),ipvs直接修改地址而不是重新创建tcp连接。

LVS是什么进程 lvs工作原理和配置_lvs_06

这个realserver的地址,可以发现cip一直没有修改

LVS是什么进程 lvs工作原理和配置_服务器_07

从客户端看host,一直都是192.168.108.240,说明调度器修改了源地址。

4.2 dr实例

LVS是什么进程 lvs工作原理和配置_IP_08

注:vip除了通过keepalived方式产生,单机需要通过添加网卡的方式

# ds上配置
ifconfig ens33:0 192.168.108.243			#添加vip

# 创建集群,命令参考前文

# rs上配置
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore		#忽略VIP的arp广播请求
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 192.168.108.243 broadcast 192.168.108.243 netmask 255.255.255.255		# 添加IP地址为VIP的虚拟网卡lo:0
route add -host 192.168.108.243 dev lo:0

LVS是什么进程 lvs工作原理和配置_IP_09


ds上的截图。

LVS是什么进程 lvs工作原理和配置_网络_10

rs上的截图,可以发现没有体现rip,响应直接返给客户端。

五、小技巧

vmware新添加的网卡,在network-scripts下面无法找到配置文件。可以在虚拟机启动之前先添加网卡,进入系统后通过命令创建网卡

nmcli con add con-name ens38 type ethernet ifname ens38		#创建网卡(network manager client)
nmcli con show												#查看网卡

vi ifcfg-ens38												#配置网卡信息
IPADDR=192.168.16.130
GATEWAY=192.168.16.128

ifconfig ens33 down/up										#关闭/开启指定网卡
systemctl network restart 									#重启网络服务