全网最详细LVS负载均衡(Linux virual server)解读

LVS 官网: The Linux Virtual Server Project - Linux Server Cluster for Load Balancing

一、实验环境

主机名角色
LVS调度器(VS)
webserver1服务器(RS)
webserver2服务器(RS)

二、lvs集群的类型及运行原理

LVS负载均衡常见的有三种工作模式,分别是地址转换(简称NAT模式)、IP隧道(简称TUN模式)和直接路由(简称DR模式),其实企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便,下面总结 DR 和 NAT 原理和特点

工作原理:VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS

2.1LVS相关术语

  1. DS:Director Server, 指的是前端负载均衡器节点。

  2. RS:Real Server, 后端真实的工作服务器。

  3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

  4. DIP:Director Server IP, 前端负载均衡器IP地址,主要用于和内部主机通信。

  5. RIP:Real Server IP, 后端服务器]的IP地址。

  6. CIP:Client IP, 访问客户端的IP地址

2.2nat模式

Ivs-nat:

1.本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发 2.RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP 3.请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈 4.支持端口映射,可修改请求报文的目标PORT 5.VS必须是Linux系统,RS可以是任意OS系统

2.2.1nat数据逻辑模型结构

  • 用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

  • 内核空间判断数据包的目标IP是本机,此时IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,重新封装数据包(源IP为CIP,目标IP为RIP),然后选路将数据包发送给Real Server。

  • Real Server比对发现目标IP是本机的IP,重新封装报文(源IP为RIP,目标IP为CIP)发回给Director Server。

  • Director Server重新封装数据包,将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

2.3DR模式

DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

2.3.1DR数据逻辑模型结构

  • 用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。

  • 由于DS和RS在同一个网络中,所以是通过二层数据链路层来传输。

  • 内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server.

  • RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给eth0网卡然后向外发出。

  • RS直接将响应报文传送到客户端。

2.4LVS的负载调度算法

最常用的有四种;轮询(rr)、加权轮询(wrr)、最少连接(lc)和加权最少连接(wlc)。

  • 轮询(rr):将收到的访问请求按照顺序轮流调度到不同的服务器上,不管后端真实服务器的实际连接数和系统负载。

  • 加权轮询(wrr):给RS设置权重,权重越高,那么分发的请求数越多,权重的取值范围0–100。根据每台服务器的性能,给每台服务器添加权值,如果RS1的权值为1,RS2的权值为2,那么调度到RS2的请求会是RS1的2倍。权值越高的服务器,处理的请求越多。这种算法是对rr算法的一种优化和补充。

  • 最少连接(lc):根据后端RS的连接数来决定把请求分发给谁,比RS1连接数比RS2连接数少,那么请求就优先发给RS1。

  • 加权最少连接(wlc):根据后端RS的权重和连接数来决定把请求分发给谁,权重较高,连接数少的RS会优先处理请求。

三、lvs部署命令介绍

3.1lvs软件相关信息

程序包:ipvsadm Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

规则保存工具:/usr/sbin/ipvsadm-save

规则重载工具:/usr/sbin/ipvsadm-restore

配置文件:/etc/sysconfig/ipvsadm-config

ipvs调度规则文件:/etc/sysconfig/ipvsadm

3.2lvs集群中的增删改

参数描述
-a添加realserver
-e更改realserver
-ttcp协议
-uudp协议
-f火墙 标签
-rrealserver地址
-g直连路由模式
-iipip隧道模式
-mnat模式
-w设定权重
-Z清空计数器
-C清空lvs策略
-L查看lvs策略
-n不做解析
--rate输出速率信息

四、nat模式

4.1实验环境中lvs主机的环境搭建

4.1.1调度器lVS的搭建和服务器RS的搭建

两台服务器RS网卡选择相同都是仅主机模式

4.1.2配置lvs主机IP

先写一个脚本以方便后续配置环境中使用 这是在配置过程中的vmset.sh

#!/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

配置网卡nat模式的IP为172.25.254.100并改主机名为lvs

vmset.sh eth0 172.25.254.100 lvs.timing.org

配置网卡仅主机模式的IP为192.168.0.100并改主机名为lvs

vmset.sh eth1 1192.168.0.100 lvs.timing.org

4.1.3配置完成后需要重启网卡

nmcli connection reload

nmcli connection up eth0

nmcli connection up eth1

4.1.4lvs打开内核路由功能

4.1.5配置RS主机IP

上图中的dns可删可不删

配置完成后两台服务器都需要重启生效

nmcli connection reload

nmcli connection up eth0

查看一下IP和网关是否正确

4.1.6安装web服务

配置完成后两台服务器(RS)我们都将安装web服务

yum install httpd -y

echo webserver1 - 192.168.0.10 > /var/www/html/index.html
systemctl enable --now httpd

echo webserver2 - 192.168.0.20 > /var/www/html/index.html
systemctl enable --now httpd

配置完成后我们可以lvs主机上检测一下,如果在lvs上都访问不到两台服务器(RS)就别谈后面的调动了

4.1.7lvs安装中lvs软件

在lvs主机上安装所需软件ipvsadm

dnf install ipvsadm -y

安装完成后可以查看一下策略

ipvsadm -Ln

加策略以及查看策略

4.1.8测试

4.1.9保存

ipvsadm-save -n > /etc/sysconfig/ipvsadm

五、DR模式

5.1实验环境

在DR模式中需要5台主机

主机名IPvip角色
client172.25.254.200null测试主机
routernat-eth0:172.25.254.100;仅主机-eth1:192.168.0.100null路由器
lvs192.168.0.50;GW:192.168.0.100192.168.0.200/32调度器
webserver1192.168.0.10;GW:192.168.0.100192.168.0.200/32web服务器1
webserver2192.168.0.10;GW:192.168.0.100192.168.0.200/32web服务器2
5.1.1lvs上的配置

5.1.2router上的配置

打开路由功能

5.1.3client上的配置

5.1.4webserver1上的配置

5.1.5webserver2上的配置

5.2解决VIP响应问题

DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

(1)在前端网关做静态绑定

(2)在各RS使用arptables

(3)在各RS修改内核参数,来限制arp响应和通告的级别

5.2.1限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应 1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

5.2.2限制通告级别:arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告 1:尽量避免将接口信息向非直接连接网络进行通告 2:必须避免将接口信息向非本网络进行通告

在webserver1和webserver2中解决响应问题
[root@webserver1 ~]# echo  1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@webserver1 ~]# echo  2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver1 ~]# echo  2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@webserver1 ~]# echo  1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 

[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/lo/arp_announce 
[root@webserver2 ~]# echo  2 > /proc/sys/net/ipv4/conf/all/arp_announce 

这个代码正常情况下是需要写到 /etc/sysctl.conf里面去,但是可能后面有可能还会用到这台主机做实验,因此没有写进去

通过以上代码让VIP不对外响应,所以两台web服务器都要做限制响应

5.2.3在lvs,webserver1和webserver2上配置vip

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

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

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

5.2.4在lvs中配置策略

[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2

5.2.5最后在测试主机client上测试

for i in {1..10}

do

curl 192.168.0.200

done

六、防火墙标签解决轮询错误

6.1轮询规则中可能会遇到的错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题

6.1.1先在两台webserver服务器主机上安装mod_ssl模块,让RS支持https

[root@webserver1 ~]# yum install mod_ssl -y

[root@webserver2 ~]# yum install mod_ssl -y
安装完成后两台服务器都要重启apache
systemctl restart httpd

6.1.2可以过滤一下查看80和443端口是否都开着

6.1.3简单测试

如果由此用client主机去访问会出现轮询错误,会同时显示webserver1或者webserver2上面的内容,按照轮询规则访问时出现的一次Rs1主机上的内容一次Rs上的内容

[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200

6.2防火墙标记解决轮询调度问题

FWM:FireWall Mark

MARK target 可用于给特定的报文打标记, -

-set-mark value

其中:value 可为0xffff格式,表示十六进制数字借助于防火墙标记来分类报文,而后基于标记定义集群服 务:可将多个不同的应用使用同一个集群服务进行调度

6.2.1在lvs主机上对端口进行标记

[root@lvs ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66

6.2.2在lvs上将所有策略全部刷新

[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -Ln

6.2.3在lvs上重新添加策略防止调用时调用到同一端口

[root@lvs ~]# ipvsadm -A -f 66 -s rr

[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g

[root@lvs ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g

6.2.4测试

最后在client主机上访问IP就不会出现调动同一端口的情况了

[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200

以上就是对lvs负载均衡的nat模式和DR模式以及防火墙轮询错的一个总结和解决方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值