LVS:负载均衡

一、工作原理


1.1 数据流向

LVS-NAT模型是利用了NAT的特性,NAT为”Network Address Translation”的缩写,译为”网络地址转换”。

LVS-NAT模型的结构示意图:
在这里插入图片描述
从上图可以看出,LVS服务器是直接面向客户端的,所以,LVS服务器必须有一个公网IP,才能服务在互联网上,我们称配置在LVS服务器上的公网IP为VIP,即Virtual IP,在LVS-NAT模型中,负载均衡集群内部的主机都是通过内网IP通讯的,也就是说,LVS-NAT集群内部的主机需要在相同网段的内网中,而集群中的每个主机均配置有一个内网IP,LVS服务器当然也属于负载均衡集群内部的主机,所以它也需要配置一个内网IP,我们称配置在LVS服务器上的内网IP为DIP,可以理解为Director IP,也就是负责调度的导演IP,而每个RealServe上都有一个与DIP在同一网段的内网IP,我们称配置在RealServer上的内网IP为RIP,我们将客户端的IP简称为Client IP ,即CIP。

既然LVS-NAT模型是利用了”网络地址转换”的特性,那么,在整个过程中,报文的IP到底发生了怎样的转换呢?通过如下示意图,即可明白报文IP的 转换过程,为了使示意图更加简洁明了,图中只画出了一个RealServer,同时,我们可以配合图下方的描述,来理解报文中IP被转换的整个过程。
在这里插入图片描述
正如上图所示,客户端的请求会发往LVS主机,此时,客户端请求报文的源IP为CIP,目标IP为LVS的VIP,当LVS收到客户端的请求报文时,会将请求报文中的目标IP修改为后端某个RealServer的RIP,就以上图为例,当LVS收到客户端的请求报文时,会将报文中的VIP修改为RIP1或者RIP2,具体将VIP修改为哪个RealServer的RIP,取决于LVS使用的具体算法,最好理解的负载均衡算法就是轮询算法了,用大白话说,轮询算法就是如果这次将报文的目标IP修改为RIP1,那么下次就将目标IP修改为RIP2,再下次就再将目标IP修改为RIP1,以此类推,当然,除了轮询算法,还有很多别的算法可供我们选择,但是此处我们暂时先不考虑这么多,当客户端请求报文的目标IP被修改为对应的RIP后,请求报文的源IP为CIP,目标IP已经改为RIP,那么报文自然会被LVS转发到对应的RealServer中,当RealServer收到对应的请求报文时,会发现报文的目标IP就是自己的RIP,于是就会接收报文,处理后进行响应,因为RealServer收到请求报文时,源IP为CIP,目标IP为RIP,所以RealServer在进行响应时,响应报文的源IP则为RIP,目标IP则为CIP,但是CIP对于RealServer来说肯定不在一个网络内,因为CIP是一个公网IP,所以,我们要将所有RealServer的网关指向DIP,当RealServer产生响应报文时,会将响应报文发往网关DIP,而DIP就是LVS的内网IP,当LVS收到对应的响应报文时,响应报文的源IP为RIP,目标IP为CIP,此时,LVS会将响应报文的源IP修改为VIP,修改后的响应报文的源IP为VIP,目标IP为CIP,于是响应报文被发往客户端,客户端则会收到响应报文,其实上述整个过程是一个DNAT的过程,所以,此种LVS模型被称之为LVS-NAT模型。

1.2 功能实现的依赖

LVS由两部分组成,ipvs 与 ipvsadm,好比iptables与netfilter的关系,ipvs是LVS的核心实现,但是不能直接操作ipvs,需要借助管理工具ipvsadm定义LVS集群规则,ipvs再根据我们定义好的规则进行工作。

ipvsadm:LVS管理工具,管理员通过 ipvsadm 定义或管理集群规则。

ipvs:LVS 核心实现,根据定义好的集群规则进行工作。

其实,ipvs 是与 netfilter 结合在一起使用的,2.4.X版本以后的内核中,ipvs 作为 netfilter 的模块存在。
在这里插入图片描述当客户端访问服务时,会访问VIP+端口,所以,客户端的请求报文会发往调度器,请求报文会先经过PREROUTING链,然后进行路由判断,由于此刻报文的目标IP为VIP,而VIP对于调度器来说,就是本身的IP,所以报文会经过INPUT链,此刻,如果IPVS发现报文访问的VIP+端口与我们定义的LVS集群规则相符,ipvs则会根据定义好的规则与算法,将报文直接发往POSTROUTING链,然后报文则会发出,最后到达后端的RealServer中。

二、配置部署


2.1 LVS Server

step1 开启内核的核心转发功能

# LVS 主要负责分发请求到后端主机,所以它需要转发报文,需要将ip_foward的值设置为1,才能够转发报文到别的主机。

# 临时生效
echo 1 > /proc/sys/net/ipv4/ip_forward
或
sysctl -w net.ipv4.ip_forward=1

# 永久生效
vim /etc/sysctl.conf
net.ipv4.ip_forward=1	# 添加或修改

systemctl restart network
或
sysctl -p

step2 安装 ipvsadm 命令

yum -y install ipvsadm

step3 添加规则

  • 创建对外暴露的前端lvs集群服务
ipvsadm -A -t VIP:PORT -s rr
	-A 表示添加一条虚拟服务器记录,即创建一个LVS集群。
	-t 表示创建LVS集群服务为tcp服务。
	VIP:PORT 表示LVS服务对外暴露的IP和端口号。
	-s 为Scheduling(调度)之意,用于指定具体的调度算法,可用算法有 rr 、wrr 、lc 、wlc 、lblc 、lblcr 、dh 、sh 、sed 、nq ,而rr算法就是Round-Robin的缩写,表示轮询算法。
  • 为lvs集群服务添加后端的realserver
ipvsadm -a -t VIP:PORT -r RIP1:PORT -m
	-a 表示添加一个realserver 到lvs集群中。
	-t 表示lvs集群服务为tcp服务,"VIP:PORT"用户关联前端的lvs集群服务。
	-r 表示要添加的realserver的IP及服务端口号。
	-m 表示LVS集群的工作模式为LVS-NAT模式,当然,如果想要LVS工作于其他模式,那么在添加Realserver时,则不能使用-m选项,而需使用其他对应选项。

... ... 如果有多台realserver只要将命令中的RIP替换为具体的realserverIP即可。
ipvsadm -a -t VIP:PORT -r RIP2:PORT -m
ipvsadm -a -t VIP:PORT -r RIPN:PORT -m

step4 保存规则

  • 永久保存规则
# 查看规则
ipvsadm -Ln
# 保存规则
ipvsadm-save -n > /etc/sysconfig/ipvsadm
# 服务开机自启动
systemctl restart ipvsadm
systemctl enable ipvsadm

2.2 RealServer

step1 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

step2 启动需要被反向代理的服务
step3 网关指向 LVS 的 DIP

三、常用命令

-A/--add-service 添加一条新的虚拟服务
-E/--edit-service 编辑虚拟服务
-D/--delete-service 删除虚拟服务
-C/--clear 清除所有的虚拟服务规则
-R/--restore 恢复虚拟服务规则
-S/--save 保存虚拟服务器规则
-a/--add-server 在一个虚拟服务中添加一个新的真实服务器
-e/--edit-server 编辑某个真实服务器
-d/--delete-server 删除某个真实服务器
-L/-l/--list 显示内核中的虚拟服务规则
-Z/--zero 将转发消息的统计清零
--set tcp/tcpfin/udp 配置三个超时时间(tcp/tcpfin/udp)
--start-daemon 启动同步守护进程。
--stop-daemon 停止同步守护进程 
-h/--help 显示帮助信息
-t/--tcp-service service-address TCP协议的虚拟服务
-u/--udp-service service-address UDP协议的虚拟服务
-f/--fwmark-service fwmark说明是经过iptables 标记过的服务类型。
-s/--scheduler scheduler 使用的调度算法,有这样几个选项rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,默认的调度算法是: wlc.
-p/--persistent [timeout] 持久稳固的服务。
-M/--netmask指定客户地址的子网掩码
-r/--real-serverserver-address 真实的服务器
-g/--gatewaying指定LVS 的工作模式为直接路由模式
-i/--ipip指定LVS 的工作模式为隧道模式 
-m/--masquerading指定LVS 的工作模式为NAT 模式 
-w/--weightweight真实服务器的权值 
--mcast-interface interface指定组播的同步接口 
-c/--connection显示ipvs中目前存在的连接
-6: 如果fwmark用的是ipv6地址需要指定此选项。

管理虚拟服务:

  • 添加一个虚拟服务192.168.1.100:80,使用轮询算法:
ipvsadm -A -t 192.168.1.100:80 -s rr
  • 修改虚拟服务的算法为加权轮询:
ipvsadm -E -t 192.168.1.100:80 -s wrr
  • 删除虚拟服务:
ipvsadm -D -t 192.168.1.100:80

管理真实服务:

  • 添加一个真实服务器192.168.1.123,使用DR模式,权重2:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
  • 修改真实服务器的权重:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
  • 删除真实服务器:
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123

查看统计:

  • 查看当前配置的虚拟服务和各个RS的权重:
ipvsadm -Ln
  • 查看当前ipvs模块中记录的连接(可用于观察转发情况):
ipvsadm -lnc
  • 查看ipvs模块的转发情况统计:
ipvsadm -Ln --stats | --rate
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值