LVS负载均衡-NAT模式-DR模式

一、LVS

1、lvs集群

lvs(linux virtual server ):阿里的章文嵩发起的开源项目,linux的内核层面实现负载均衡的软件。

主要作用:将多个后端服务器组成一个高可用,高性能的服务器集群,通过负载均衡的算法将客户端的请求分发到后端的服务器上,来实现高可用和负载均衡。

2、集群

集群:为了解决某个特定的问题,将多台计算机组合起来形成的单个系统。

1、系统的拓展方式

垂直扩展:向上扩展,增强,性能更强的计算机,瓶颈,计算机本身设备的限制,硬件本身的性能瓶颈。

水平扩展:向外扩展,增加设备,并行的运行多个服务,依靠网络解决内部通信的问题,cluster集群。

2、集群的类型:三种类型

LB:load balance 负载均衡集群,多个主机组成,每个主机只承担一部分的访问请求。

HA:high availiablity 高可用,这设计系统时,采取一定的措施确保系统当中某一组件或者部分出现故障,整个系统依然能够正常的运行,为了维护整个系统的可用性,可靠性,容错性。

HPC:high-performance computing 高性能 对响应时间,处理能力要求更高。

3、系统可靠性指标

MTBF:Mean time Between Failure 平均无故障时间

MTTR:Mean Time Resotration repair 平均故障恢复时间

A= MTBF/(MTBF+MTTR)

A指标的范围在0-1之间,A指标就是系统可用性的度量,0表示系统越不可以,1表示系统越可用。

A指标要无限接近于1(99.99%)

90%-95% 不合格 98-99% 接受范围内

都是以小时为单位:1年365天=8760小时

4、停机时间

计划内时间,计划内的时间可以不计,但是现在也算在内

计划外时间就是故障时间,从故障发生到故障解决的总时间,计划外时间是我们必须关注的一个指标

当天事必须当天解决-----------没有解决之间人是不可以离开的------------解决完之后必须生成报告,备案以及日报,周边,月报,年报等。

3、lvs适应场景

小集群不需要使用lvs,大集群适应lvs

1、lvs集群中的术语

vs vittual server lvs 服务的逻辑名称,也就是我们外部访问lvs集群时使用的ip地址和端口

DS director server lvs集群中的主服务器,也是调度器(nginx的代理服务器)是集群的核心,调度器就是用来接受客户端的请求转发到后端的服务器。

RS real server lvs集群中的真实服务器,后端服务器,用来接收DS转发来的请求,并且响应结果。

CIP Client ip 客户端的地址,发起请求的客户端地址。

VIP virtual ip lvs 集群使用的ip地址,对外提供集群访问的虚拟ip地址。

DIP dirextor ip 调度器在集群当中的地址,用于和RS通信。

RIP real ip 后端服务器在集群当中的ip地址。

2、lvs的工作方式

NAT模式 :响应要有调度器响应给客户端

DR模式 :直接路由模式 真实服务器直接响应给客户端

TUN: 隧道模式

常用的模式:NAT和DR模式

二、NAT模式

1、nat模式

nat模式是常用的lvs的模式之一。

在nat模式下,lvs会将来自客户端的请求报文中的目标ip地址和端口修改为lvs内部的ip地址和端口,然后把请求转发到后端服务器。

响应之后,响应结果返回客户端的过程中,响应报文经过lvs的处理,把目标ip和端口修改成客户端的ip地址和端口。

好处在于对客户端来说,请求的目标地址始终不变,客户端的配置不需要做特殊修改,只是调度器在对ip和端口进行转换,后端的服务器也不需要修改任何配置。

缺点:性能损失,请求和响应都需要调度器做地址转换,影响性能,net模式只能有一个调度,调度器故障,整个集群就不能正常工作。

2、地址转换

内网-----外网 转换的是源ip地址 snat

外网-----内网 转换的是目的ip dnat

1、客户端发起请求,访问的是vip地址,到达调度器

2、调度器接收到请求之后,根据负载均衡算法选一个后端服务器

3、把请求的地址转换成可以直接和内部RS通信的ip地址(源地址转换)

4、后端服务器处理请求

5、目的地址转换,转换成vip地址

6、调度器的vip响应给客户端。

3、lvs的工具

ipvsadm工具,用来配置和管理lvs集群的工具

-A 添加虚拟服务器 vip

-D 删除虚拟服务器地址

-s 指定负载均衡的调度算法

4、算法

rr默认轮询

wrr加权轮询

最小连接lc

加权最小连接 wlc

5、选项

-a 添加真实服务器

-d 删除真实服务器

-t 指定vip地址和端口

-r 指定rip真实服务器的地址和端口

-m 使用nat模式

-g 使用DR模式

-i 使用隧道模式

-w 设置权重

-p 60 设置连接保持时间

-l 列表查看

-n 数字化展示

6、实验

备配置

nginx1 RS1

nginx2 RS2

test1 调度器 ens33 ens36

test2 客户端

实现使用客户端访问真实服务器RS1,RS2

1、实验原理图

2、相关配置 

nginx1配置

nginx1的网卡设置

访问nginx1页面

 

 nginx2配置

 访问nginx2页面

 

test2-1 调度器 配置

 modprobe ip_vs     //手动加载 ip_vs 模块
 cat /proc/net/ip_vs    //查看当前系统中ip_vs模块的版本信息

 

[root@localhost ~]# yum -y install ipvsadm* -y #更新ip_vs模块的版本信息

新增一个网卡并修改对应的配置

ens33网卡配置  

ens36网卡配置  

 

地址转换:从内到外将源地址地址转换,转换成vip地址

使用iptables查看nat是否已存在策略

[root@localhost network-scripts]# iptables -t nat -vnL
#-t 指定表

 添加策略

[root@localhost network-scripts]# iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens36 -j SNAT --to 12.0.0.1
#-t指定表
#-A 添加链
#-s指定源地址
#-o指定设备
#-j 控制类型
#--to 转换

配置ipvsadm

 由于/etc/sysconfig/ipvsadm目录配置最开始为空,因为不能直接进行重启操作,需要先设置并将生成的文件保存到此目录下

[root@localhost opt]# ipvsadm -C #清空原有的策略
[root@localhost opt]# ipvsadm -A -t 12.0.0.1:80 -s rr #指定好vip地址和端口
#-A添加虚拟服务器 vip
#-t 添加指定的vip地址
#-s 添加指定算法
#rr 默认轮询算法

也可以添加其他策略  

[root@localhost opt]# ipvsadm -A -t 12.0.0.1:80 -s wrr #创建加权伦询
[root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.41:80 -m -w 2 #加权
[root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.42:80 -m -w 3 #加权
[root@localhost opt]# ipvsadm -ln

 选添加vip,虚拟服务器的ip和端口,然后再添加真实服务器

#vip转发到那个真实服务器
[root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.41:80 -m
[root@localhost opt]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.10.42:80 -m
#-a添加真实服务器
#-t指定vip地址
#-r指定真实服务器的地址和端口
#-m指定模式为nat模式

查看  

[root@localhost opt]# ipvsadm -ln

 

保存  

[root@localhost opt]# ipvsadm-save >/etc/sysconfig/ipvsadm

 重启的时候可能会出现bug,策略可能会被情况,重启之后,重新查看一下策略

[root@localhost opt]# systemctl restart ipvsadm.service 
[root@localhost opt]# ipvsadm -ln

出现bug,vip地址与一开始配置不一样,只能进行删除,不可修改

删除策略,并查看

 [root@localhost opt]# ipvsadm -D -t 127.0.0.1:80
#-D删除
#-t指定vip(与bug一致的内容)
[root@localhost opt]# ipvsadm -ln

由于两个真实服务器从属于虚拟服务器下面,因此删除虚拟服务器,两个虚拟服务器也会被删除

 重新添加,并重启

 

保留策略,删除单个节点服务器

例如:删除192.168.10.42:80服务器

[root@localhost opt]# ipvsadm -d -r 192.168.10.42:80 -t 12.0.0.1:80

 开启路由转发功能

[root@localhost opt]# vim /etc/sysctl.conf 
--------------------------------------------
net.ipv4.ip_forward=1
wq
[root@localhost opt]# sysctl -p #生效

用本机进行测试,实现轮询功能

 

接下来进入客户端test2-2的配置

test2-2的网卡设置  

 使用客户端test2-2访问test2-1调度器,并在两个nginx后台服务器上动态的查看nginx的访问日志

 tail -f /usr/local/nginx/logs/access.log #动态查看

查看访问日志记录的仍是真实的客户端ip地址

三、DR模式

DR模式(直接路由模式)

1、特点

调度器在整个lvs集群当中是最重要的,在net模式下,即负责接受请求,同时根据负载均衡的算法转发流量,响应发送给客户端

DR模式下调度器依然负责接收请求,同时也根据负载均衡算法转发流量到RS,响应直接由RS响应给客户端。

直接路由Direct Routing 是一种二层转发模式。二层转发的是数据帧,根据源mac地址和目的mac地址进行转发。不会修改数据包源ip和目的ip,根据数据包的mac地址进行转发。

DR模式下,lvs也是维护一个虚拟的ip地址,所有的请求都是发送到这个vip,既然是走二层转发,当客户端的请求到底调度器之后,根据负载均衡的算法选择一个RS,修改vip服务器的目的mac变成RS的MAC地址,RS处理完请求之后,根据报文当中客户端的源mac地址直接把响应发送到客户端即可,不需要走调度器,调度器的压力相对较小。

2、前提条件

1、调度器的ip地址和RS的ip要在同一网段,数据才能进行二层转发。

2、RS是一个公网地址,互联网可以直接访问RS的地址。(基本不用)

3、DR模式是走内核转发,内核来判断数据包的地址,根据RS的地址把数据包重新封装,修改MAC地址。

4、调度器的地址只可以作为集群访问的入口,不能作为网关

5、所有的RS 上的lo(本地回环地址)都要配置vip地址

3、lvs和nginx做负载均衡的区别

lvs是四层转发 内核态 ip+端口 四层代理

nginx 四层代理也可以七层代理

lvs(DR模式) +nginx+tomcat

lvs实现四层转发+nginx实现7层转发(动态)

访问lvs的vip地址可以实现动静分里

4、实验

nginx1 RS1 192.168.10.41

nginx2 RS 2 192.168.10.42

vip 192.168.10.100

test2-1 调度器 192.168.10. 20

test2-2 客户端 192.168.10.30

1、原理图

2、相关配置

test2-1调度器的配置  

[root@localhost ~]# modprobe ip_vs #加载内核
[root@localhost ~]# yum -y install ipvsadm* #更新ip_vs模块的版本信息

创建vip地址

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
通过编辑配置文件的方式
[root@localhost network-scripts]# vim ifcfg-ens33:0
-----------------------------------------------------
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.100
NETMASK=255.255.255.255
~
wq
#临时启动
[root@localhost network-scripts]# ifup ifcfg-ens33:0

修改调度器的响应参数

[root@localhost network-scripts]# vim /etc/sysctl.conf 
-------------------------------------------------------
net.ipv4.ip_forward=0
#关闭数据包转发功能
net.ipv4.conf.all.send_redirects=0
#禁止系统发生icmp重定向的消息
net.ipv4.conf.default.send_redirects=0
#禁止默认网络接口发送icmp重定向的消息
net.ipv4.conf.ens33.send_redirects=0
#针对ens33设备。禁止发生icmp重定向消息
~
wq
[root@localhost network-scripts]# sysctl -p #配置立即生效

分配策略  

清空策略并查看
[root@localhost network-scripts]# ipvsadm -C
[root@localhost network-scripts]# ipvsadm  -ln
Try `ipvsadm -h' or 'ipvsadm --help' for more information.

指定负载的vip和策略
[root@localhost network-scripts]# ipvsadm -A -t 192.168.10.100:80 -s rr
添加真实服务器
[root@localhost network-scripts]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.41:80 -g
[root@localhost network-scripts]# ipvsadm -a -t 192.168.10.100:80 -r 192.168.10.42:80 -g

 重启查看是否会出现bug

[root@localhost network-scripts]# systemctl restart ipvsadm
[root@localhost network-scripts]# ipvsadm -ln

 nginx1添加回环地址

[root@localhost html]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
------------------------------------------------
DEVICE=lo:0
IPADDR=192.168.10.100
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
ONBOOT=yes

wq
[root@localhost network-scripts]# ifup ifcfg-lo:0 #重启端口

 添加lo接口作为vip

[root@localhost network-scripts]# route add -host 192.168.10.100 dev lo:0
#设置ip地址为192.168.10.100的只添加到回环接口,作为lvs的vip,通过路由的模式转发到RS
#能让vip识别到真实的服务器

调整真实服务器的内核响应

[root@localhost network-scripts]# vim /etc/sysctl.conf 
-------------------------------------------------------
net.ipv4.conf.lo.arp_ignore=1
#设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
#设置回环地址仅仅公告本地的ip地址,但不响应ARP请求
net.ipv4.conf.all.arp_ignore=1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce=2
#设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求
wq

查看  

访问nginx1  

 nginx2添加回环地址

[root@localhost html]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
------------------------------------------------
DEVICE=lo:0
IPADDR=192.168.10.100
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
ONBOOT=yes

wq
[root@localhost network-scripts]# ifup ifcfg-lo:0 #重启端口

查看  

 添加lo接口作为vip

[root@localhost network-scripts]# route add -host 192.168.10.100 dev lo:0
#设置ip地址为192.168.10.100的只添加到回环接口,作为lvs的vip,通过路由的模式转发到RS
#能让vip识别到真实的服务器

 调整真实服务器的内核响应

[root@localhost network-scripts]# vim /etc/sysctl.conf 
-------------------------------------------------------
net.ipv4.conf.lo.arp_ignore=1
#设置回环接口忽略来自任何接口的ARP请求
net.ipv4.conf.lo.arp_announce=2
#设置回环地址仅仅公告本地的ip地址,但不响应ARP请求
net.ipv4.conf.all.arp_ignore=1
#设置所有接口忽略来自任何接口的ARP请求
net.ipv4.conf.all.arp_announce=2
#设置所有接口仅仅公告本地的ip地址,但是不响应ARP请求
wq

 访问nginx2

 使用客户端test2-2 (192.168.10.30)访问192.168.10.100实现伦询  

 四、总结

lvs的三种工作模式

NAT DR TUN
优点 地址转换,配置简单 性能最好 AWN,可以实现较远距离的数据包传送
缺点 性能瓶颈 不支持跨网段 专用的通道,必须开通vpn(花钱)
RS的要求 无限制 必须要禁止非物理接口的ARP响应 支持隧道模式
RS的数量 10-20台 100台 100台

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 04:56:05       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 04:56:05       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 04:56:05       57 阅读
  4. Python语言-面向对象

    2024-07-16 04:56:05       68 阅读

热门阅读

  1. MySQL-字符集(charset)和校对规则(collation)

    2024-07-16 04:56:05       26 阅读
  2. 掌握Eureka:打造高效服务配置中心集成

    2024-07-16 04:56:05       27 阅读
  3. Docker的基本认识和常见命令以及场景介绍

    2024-07-16 04:56:05       21 阅读
  4. Spark和Hadoop作业之间的区别

    2024-07-16 04:56:05       28 阅读
  5. 七大排序算法的Python实现

    2024-07-16 04:56:05       21 阅读
  6. Linux命令更新-sort 和 uniq 命令

    2024-07-16 04:56:05       28 阅读
  7. 中介子方程五十九

    2024-07-16 04:56:05       25 阅读
  8. linux查找/搜索命令

    2024-07-16 04:56:05       27 阅读
  9. Django REST Framework(八)GenericAPIView5个视图扩展类

    2024-07-16 04:56:05       21 阅读