LVS 负载均衡

本文详细解析了阿里云SLB中LVS的不同工作模式(NAT、DR、TUN、FULLNAT),包括它们的原理、配置要求、特点和适用场景,以及调度算法和管理工具ipvsadm的使用。同时提到LVS的局限性和解决方案,如健康检查和HA工具如keepalived的应用。
摘要由CSDN通过智能技术生成

科普

集群概念

0

0

0

0

0

阿里云的SLB 服务

0

基于工作的协议层次划分

传输层(通用):DNAT 和 DPORT

LVS:

nignx:stream

haproxy:mode tcp

应用层(专用):针对特定协议,常陈伟proxy server

0

LVS 有4种工作模式,10种调度算法

LVS 集群类型中的术语

VS:virtual server ,director server(DS),dispatcher(调度器),load balancer

RS:real server (lvs) ,upstream server (nginx),backend server(haproxy)

CIP:client IP

VIP:virtual server IP VS 外网的IP

DIP:Director IP VS内网的IP

RIP:Real server IP

访问流程 CIP VIP ==== DIP RIP

0

LVS 模型

1、LVS-NAT:修改请求报文的目的IP,多目标的DNAT

2、LVS-DR:操作封装新的mac地址

3、lVS-TUN:在原请求IP 报文之外新加一个IP首部

4、LVS-FULLNAT:修改请求报文的源和目标IP【默认内核不支持,需要做二次开发】

LVS-NAT

0

LVS-NAT:本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为挑出得RS的

RIP和PORT 实现转发

(1)RIP 和 DIP 应在同一个IP网络,且应使用私网地址;RS 的网关要指向DIP

(2)请求报文和响应报文都必须经由Director 转发Director 易于成为系统瓶颈

(3)支持端口映射,可修改请求报文的目标PORT

(4)VS 必须是linux 系统,RS 可以是任意OS 系统

为什么要求RIP 和 DIP 应在同一IP 网络?

实际也可以不在同一网段内,但是中间得换成路由器以及RIP 服务器的网关部署在路由器上

交换机的转发性能优于 路由器

0

IPVS 位于PREROUTING 和 INPUT 链之间,然后再强制调转到forward--postrouting 转发

LVS-DR[请求报文和响应报文是不同路,不需要都经过LVS,形成三角形]

0

0

direcrt router 直接路由模式,需在每台RIP上都配置VIP

其中每台RIP 都配置VIP 会有提示地市冲突问题,因此需要在每台RIP 服务器上关闭arp 通告和 arp 忽略等功能【具体是VIP 的arp 功能禁用,物理网卡不禁用】

/proc/sys/net/ipv4/conf/all/arp_ignore

/proc/sys/net/ipv4/conf/all/arp_announce

DR 模式的特点:

(1)Director 和 各RS 都配置有VIP

(2)确保前端路由器将目标IP 为VIP 的请求报文发往Director

在前端网关做静态绑定VIP 和 Director 的MAC地址

在RS 上使用arptables工具

arptables -A IN -d $VIP -j DROP

arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

在RIP上修改内核参数以限制arp通告及应答级别

/proc/sys/net/ipv4/conf/all/arp_ignore

/proc/sys/net/ipv4/conf/all/arp_announce

(3)RS的RIP 可以使用私网地址,也可以是公网地址,RIP 与DIP 在同一IP 网络,RIP 的网关不能指向DIP,

以确保响应报文不会经由Director

(4)RS 和 Director 要在同一物理网络,因为Director 需要发送RIP的mac 请求。

(5)请求报文要经由Director,但响应报文不经由Director,而由RS 直接发往Client

(6)不支持端口映射(端口不能修改)【因为DR 模式下,只修改目的MAC】

(7)RS 可使用大多数OS系统

LVS的TUN 模式

转发方式:不修改请求报文的IP头部(源IP为CIP、目标IP为VIP),而在原IP 报文之外再封装一个IP头部(源IP是DIP,目标IP是RIP)。将报文发往挑选出的目标RS,RS 直接响应给客户端(源IP为VIP,目标IP是CIP)

0

TUN模式特点:

(1)DIP、VIP、RIP 可以是公网地址

(2)RS的网关一般不能指向DIP

(3)请求报文要经由Director,但响应不经由Director

(4)不支持端口映射

(5)RS的OS 支持隧道功能

LVS FULLNAT【默认内核不支持,需要编译修改内核参数】

0

通过同时修改请求报文的源IP地址和目标IP地址进行转发

CIP --- > DIP

VIP--- > RIP

fullnat 模式特点:

(1)VIp是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此RIP的网关一般不会指向DIP

(2)RS 收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client

(3)请求和响应报文都经由Director

(4)相对NAT 模式,可以更好的视线LVS --- Realserver 间跨VLAN通讯

(5)支持端口映射

LVS-FUllNAT 模式目前阿里内部使用,

LVS 工作模式总结和比较

0

LVS-NAT 与LVS-FULLNAT

请求和响应报文都经由Director

LVS-NAT:RIP 的网关要指向DIP,或者做通路由

LVS-FULLNAT:RIP 和 DIP 未必在同一IP 网络,但要能通信

LVS-DR与 lVS-TUN

请求报文要经由Director,但响应报文由RS 直接发往Client

LVS-DR :通过封装新的MAC 首部实现,通过MAC 网络转发

LVS-TUN:通过在原IP 报文外封装新IP报头实现转发,支持远距离通信

LVS 调度算法【灵魂】

ipvs scheduler:根据其调度时是否考虑各RS 当前的负载状态

分为两种:静态方法和动态方法

静态方法:

仅根据算法本身进行调度:

1、RR :roundbrobin 轮询

2、WRR:weighted RR ,加权轮询

3、SH:source hashing ,实现session sticky,源IP 地址hash,将来自于同一个IP地址的请求始终发往第一次挑中的RS 。从而实现会话绑定【适合后端服务器相对固定的情况下】

4、DH:Destionation hashing,目标地址 哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至

第一次挑中的RS ,典型使用场景是正向代理缓存场景中的负载均衡,如:带宽运营商

动态方法:

主要根据每RS 当前的负载状态及调度算法进行调度overhead=value 较小的RS 将被调度

1、LC:least connections 适用于长连接应用

overhead=activeconns*256 + noactiveconns

2、WLC:weighted LC,默认调度方法

overhead=(activeconns*256 + noactiveconns)/ weight

3、SED shortest expection delay ,初始链接高权重优先

overhead=(activeconns+1)*256 / weight

4、NQ: nerver queue,第一次均匀分配,后续SED

5、LBLC:locality-based LC,动态的DH算法,使用场景:根据负载状态实现正向代理

6、LBLCR:LBLC with replication,带复制功能的LBLV,解决LBLC 负载不均衡的问题,从负载重的复制

到负载轻的RS

内核版本4.15 版本后新增调度算法:FO 和 OVF

0

LVS 相关软件

程序包:ipvsadm

用户空间的程序软件,用于管理LVS的

ipvsadm核心功能:

集群服务管理:增删改

集群服务的RS管理:增删改

查看

ipvsadm工具用法:

0

注意 -g -i -m

-g 表示DR模式

-i 表示TUN 模式

-m 表示NAT 模式

LVS 防火墙标签

在Director 主机基于标记定义集群服务

0

LVS 会话保持

对于长连接的服务需要加入

ipvsadm -E -f 10 -s wrr -p

加入-p persistent 持久,官方文档写着默认300s ,实际敲下后显示360s

LVS 实现

LVS-NAT 模式案例

默认算法是WLC

ipvsadm -A -t 172.20.200.200:80 -s rr

ipvsadm -a -t 172.20.200.200:80 -r 10.1.1.1:80 -m -w 3

ipvsadm -a -t 172.20.200.200:80 -r 10.1.1.2:80 -m -w 3

ipvsadmi -Ln //查看IPvs 规则 ------- /proc/net/ipvs

ipvsadm -Lc //查看IPvs 链接数 ------- /proc/net/ipvs_conn

修改调度算法

ipvsadm -E -t 172.20.200.200:80 -s wrr

保存: 建议保存至 /etc/sysconfig/ipvsadm 【不然重启就丢失了】

ipvsadm-save > /PATH/TO>IPVSADM_FILE

ipvsadm -s > /PATH/TO>IPVSADM_FILE

systemctl stop ipvsadm.service #会自动保存规则至/etc/sysconfig/ipvsadm

启动ipvsadm 服务时候注意相关报错,需要新建相关文件 /etc/sysconfig/ipvsadm

并且注意LVS 需要开启 forward转发功能

cat /etc/sys/net/ipv4/ip_forward

echo 1 > /etc/sys/net/ipv4/ip_forward

LVS-DR 单网段的案例

一、internet hostname -I route -n 二、路由器配置 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf sysctl -p 修改路由器的转发模式 或者使用 echo 1 > /proc/sys/net/ipv4/ip_forward 此项只是暂时写在内存,临时生效

路由器的网卡配置

三、RS的配置

yum install -y httpd

hostname > /var/www/html/index.html

systemctl start httpd

修改内核参数以及VIP 网卡配置

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

echo 1 > /proc/sys/net/ipv4/conf/lo0/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/lo0/arp_announce

修改arp 参数参考如上,不发送免费arp,以及对arp 不响应

ifconfig lo0:1 10.0.0.100/32

注意:先修改内核参数,再配置IP 地址,避免IP地址冲突

四、VS的配置

ifconfig lo0:1 10.0.0.100/32

注意lVS 不支持端口映射,写上端口映射也没啥用,实际不生效

注意:LVS 是否需要有路由指向网关?

需要,因为LVS 在替换RIP mac的时候,也会查看SIP 是否可达,判断有误路由,有路由则会替换

RIP mac 进行转发。

tcpdump -i eth0 -nn -e

//-e 以太网链路层信息

LVS-DR 多网段的案例

LVS 最大的问题,缺少对后端服务器健康性检查

借助keepalived 组件

ldirectord

这个软件实现HA功能,比较老旧,现在都有keepalived 方案替代解决

idirectord 在centos6 7 上实现的,centos 8后被遗弃

补充:

对于内核参数补充说明

限制响应级别:arp_ignore

0:默认值,表示可使用本地任意接口上配置的任意地址进行响应

1:仅在请求的目标IP 配置在本地主机的接收到请求报文的接口上时,才给予相应。

限制通告级别:arp_announce

0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告

1:尽量避免将接口信息向非直接连接网络进行通告

2:必须避免将接口信息向非本网络进行通告

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值