LVS负载均衡(NAT模式,DR模式,防火墙标记)详细步骤实现

一 LVS简介

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVS+keepalived实现
相关术语:
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
CIP:Client IP 客户端的IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的 IP
RIP: Real server IP RS内网 IP
访问流程:CIP <–> VIP == DIP <–> RIP

注意:

客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通过PREROUTING后被ipvs结果并作nat转发因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工作。所以在做lvs时要把iptables的火墙策略全清理掉。
##!!!以下实验都需systemct disable --now firewalld.service关闭防火墙

二 NAT模式

访问流程

1).客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口
(9000port)
2).VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3).RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口
(9000port)
4.)VS服务器接收到响应数据包,改变包中的数据来源(RIP1–>VIP),响应目标端口(9000–>80)
5).VS服务器把修改过报文的响应数据包回传给客户端
6).lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

实现步骤

1) 环境准备

这里我们准备三台干净的rhel9的环境,1台VS,两台RS,VS需要设定两个网卡,一个nat模式,一个仅主机模式
在这里插入图片描述

VS

这里我们用vmset脚本快速生成两个网卡ip,eth0是nat模式,eth1是仅主机模式 后面是我们脚本内容
在这里插入图片描述
但是这里存在一个问题 仅主机模式下的eth1不需要dns解析和网关我们需要
cd /etc/NetworkManager/system-coonnections/进入该目录
vim eth1.nmconnection 修改eth1网卡配置删掉dns和网关
修改后如下:
在这里插入图片描述
在重新启动网卡eth1
nmcli connection reload
nmcli connection up eth1

RS(两台操作一样)

只需要一个网卡(仅主机模式)
在这里插入图片描述
这里我们用上面的vmset脚本快速生成仅主机模式的eth0网卡ip
在修改配置文件,RS是内网ip,网关要连接VS的内网DIP,也就是上面VS的eth1的ip
修改如下:
在这里插入图片描述
另外一台RS类似操作

2)VS机 安装LVS软件并配置内核路由

打开内核路由

因为DIP是内网ip,仅主机模式,需要开启内核路由来进行内网通信
在/etc/sysctl.conf 文件中加入net.ipv4.ip_forward =1参数,然后

net.ipv4.ip_forward =1刷新配置在这里插入图片描述

下载LVS软件

yum install ipvsadm -y

3)配置LVS策略

在lvs机中添加(这里的172是lvs机的VIP,192是RS的IP,80端口)

ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.220.10:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.220.20:80 -m

查看策略

ipvsadm -Ln
在这里插入图片描述

4)在RS机配置web服务

yum install httpd -y
echo web1-server -192.168.220.10 > /var/www/html/index.html
另一台RS机相同操作 但是echo这里改成
echo web2-server -192.168.220.20 > /var/www/html/index.html
方便区分

5) 测试(在LVS机上操作)

在这里插入图片描述
我们可以看到rr轮询调度算法会重复访问RS1和RS2

三 DR模式

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

在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs上都要有vip

访问流程

1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC改为RS1的MAC,此时帧中的数据为客户端IP+客户端
的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的
MAC

实验步骤

1)环境准备

DR模式我们需要五台机子,client客户,route,路由,lvs,RS1,RS2
client一个ip,nat模式
route两个ip,nat和仅主机模式
lvs和rs1,rs2一个ip,仅主机模式(我们在后续会为这三台机子配回环ip,使RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client)

client

nat
在这里插入图片描述
网关在这里插入图片描述

route

nat
在这里插入图片描述
仅主机
在这里插入图片描述
网关
在这里插入图片描述

lvs

仅主机
在这里插入图片描述
网关
在这里插入图片描述

RS1

仅主机
在这里插入图片描述
网关
在这里插入图片描述

RS2

仅主机
在这里插入图片描述

网关
在这里插入图片描述

2)配置回环ip并且使RS的vip不对外响应

lvs

ip addr add dev lo 192.168.220.200/32
在这里插入图片描述

RS1

ip addr add dev lo 192.168.220.200/32
在这里插入图片描述

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

RS2

ip addr add dev lo 192.168.220.200/32
在这里插入图片描述

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3)打开route机内核路由

因为DIP是内网ip,仅主机模式,需要开启内核路由来进行内网通信
在/etc/sysctl.conf 文件中加入net.ipv4.ip_forward =1参数,然后

net.ipv4.ip_forward =1刷新配置
在这里插入图片描述

4) 在lvs机下载LVS软件

yum install ipvsadm -y

5)配置LVS策略

在lvs机中添加(这里的192.168.220.200是回环ip也是VIP,192.168.220.10和192.168.220.10是RS机的IP,80端口)

在这里插入图片描述

查看策略

ipvsadm -Ln
在这里插入图片描述

6)在RS机配置web服务

yum install httpd -y
echo web1-server -192.168.220.10 > /var/www/html/index.html
另一台RS机相同操作 但是echo这里改成
echo web2-server -192.168.220.20 > /var/www/html/index.html
方便区分

7)在client机测试

在这里插入图片描述
我们可以看到rr轮询调度算法会重复访问RS1和RS2

四 防火墙标记

轮询错乱

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题
当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
在这里插入图片描述
两个rr轮询策略
在这里插入图片描述

两次访问都是第一个RS1轮询错误(443端口需要我们在RS机上yum install mod_ssl -y下载插件然后重启http服务就可以使用https了,-k是忽略证书验证)

解决轮询错乱

1)在lvs机上制定iptables 防火墙规则

iptables -t mangle -A PREROUTING -d 192.168.220.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66

-t是后面是iptables的一个表(mangle)
-A是后面是mangle表里的一个链路(PREROUTING)
-d是指定ip地址
-p是tcp协议
-m multiport --dports 80,443使用multiport模块来匹配多个端口打包,这里是80,443端口
-j MARK --set-mark 66对打包数据标记设值,这里是66

查看是否加上规则
在这里插入图片描述

2)清空并设置新策略

ipvsadm -C
ipvsadm -A -f 66 -s rr
ipvsadm -a -f 66 -r 192.168.220.10 -g
ipvsadm -a -f 66 -r 192.168.220.20 -g
在这里插入图片描述
查看策略
在这里插入图片描述

3)测试

在这里插入图片描述

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值