LVS详细配置

目录

LVS简介

LVS集群体系结构

LVS相关术语

lvs集群的类型

1、NAT模式

NAT简介

NAT模式数据逻辑

2、DR模式

DR模式简介

DR模式数据逻辑

DR模式的特点

3、TUN模式

TUN模式简介

TUN模式数据传输过程

TUN模式特点

4、fullnet模式

LVS模式总结

LVS调度算法

LVS静态调度算法

LVS动态调度算法

在4.15版本内核以后新增调度算法

LVS 部署命令介绍

ipvsadm命令

LVS集群中的增删改

管理集群服务中的增删改

管理集群中RealServer的增删改 

LVS NAT模式

ip配置

 lvs中打开内核路由功能

WEB配置 

 LVS配置

LVS DR模式

ip配置

 路由器打开内核路由功能

WEB配置 

在Ivs主机中和rs主机中添加vip

解决vip响应问题

LVS配置

验证

 防火墙标签解决轮询错误

轮询错误

解决方法

具体操作

LVS持久链接

解决方案

配置方法 


LVS简介

       LVS(Linux Virtual Server)即Linux虚拟服务器,是一个由章文嵩博士发起的自由软件项目,旨在通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集。LVS现已成为Linux标准内核的一部分,因此其性能较高,且配置和使用相对简单

LVS集群体系结构

使用LVS架设的服务器集群系统有三个部分组成:

最前端的负载均衡层(Loader Balancer)

中间的服务器群组层,用Server Array表示,

最底层的数据共享存储层,用Shared Storage表示。

LVS相关术语

VS(Virtual Server):虚拟服务器,通常是分发器或负载均衡器。

DS(Director Server):负载均衡器或分发器。

RS(Real Server):后端请求处理服务器。

CIP(Client IP):客户端IP,即请求的来源IP。

VIP(Director Virtual IP):负载均衡器虚拟IP,向外部直接面向用户请求,作为用户请求的目标IP地址。

DIP(Director IP):负载均衡器IP,主要用于和内部主机通讯的IP地址。

lvs集群的类型

vs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址

lvs-tun: 在原请求IP报文之外新加一个IP首部

lvs-fullnat: 修改请求报文的源和目标IP

1、NAT模式

NAT简介

本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改某挑出的RS的RIP和PORT实现转发

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

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

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

VS必须是Linux系统,RS可以是任意OS系统

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的调度机容易阻塞

2、DR模式

DR模式简介

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

DR模式数据逻辑

1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC

2.VS调度主机接收到数据帧后把帧中的VIP的MAC改为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC (将vip的MAC改成了RS1的MAC)

3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC

DR模式的特点

1.Director和各RS都配置有VIP

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

3.在前端网关做静态绑定VIP和Director的MAC

在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

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

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

4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;

5.RIP的网关不能指向DIP,以确保响应报文不会经由Director

6.RS和Director要在同一个物理网络

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

8.不支持端口映射(端口不能修改)

9.RS可使用大多数OS系统

3、TUN模式

TUN模式简介

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

TUN模式数据传输过程

1.客户端发送请求数据包,包内有源IP+vip+dport

2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1

3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给client

TUN模式特点

1.DIP, VIP, RIP都应该是公网地址

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

3.请求报文要经由Director,但响应不能经由Director

4.不支持端口映射

5.RS的OS须支持隧道功能

4、fullnet模式

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

CIP --> DIP

VIP --> RIP

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

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

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

4.支持端口映射

LVS模式总结

NAT模式

TUN模式

DR模式

RS操作系统

不限

支持隧道

禁用arp

调度器和服务器网络

可跨网络

可跨网络

不可跨网络

调度服务器数量服务器数量

RS服务器网关

指向到调度器DIP

指向到路由

指向到路由

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调度算法

lvs调度算法类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法

静态方法:仅根据算法本身进行调度,不考虑RS的负载情况

动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead (开销值)=value较小的RS将被调度

LVS静态调度算法

1、RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐

2、WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少 (权重轮询)

3、SH:Source Hashing(源hash),实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定 (将源地址进行hash运算,然后服务器记录这个值,下次遇到这个值直接访问这个服务器)

4、DH:Destination Hashing(目的地地址hash);目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商 (只要目的地是同一个就调到同一个地址去)

LVS动态调度算法

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

1、LC:least connections(最少链接发)

适用于长连接应用

Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)

活动链接:正在进行数据通信

非活动链接:连着的但是没有进行数据通信

2、WLC:Weighted LC(权重最少链接)

默认调度方法

Overhead(负载值)=(activeconns x 256+inactiveconns)/weight (权重)

3、SED:Shortest Expection Delay,

初始连接高权重优先

Overhead(负载值)=(activeconns+1+inactiveconns) x 256/weight

但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接

4、NQ:Never Queue,第一轮均匀分配,后续SED

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

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

在4.15版本内核以后新增调度算法

1.FO(Weighted Fai Over)调度算法:常用作灰度发布

在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_FOVERLOAD标志(污点))的且权重最高的真实服务器,进行调度

当服务器承接大量链接,我们可以对此服务器进行过载标记(IP_VS_DEST_F OVERLOAD),那么vs调度器就不会把链接调度到有过载标记的主机中。

2.OVF(Overflow-connection)调度算法

基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条件

LVS 部署命令介绍

ipvsadm命令

核心功能

集群服务管理:增、删、改

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

查看

命令参数

管理集群服务
ipvsadm -A|E -t(tcp)|u(udp)|f(防护墙标签) \
service-address(集群地址) \
  [-s scheduler(调度算法)] \
  [-p [timeout]] \
  [-M netmask] \
  [--pepersistence_engine] \
  [-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
 
管理集群中的real server
ipvsadm -a|e -t|u|f service-address -r server-address [-g | -i| -m](工作模式) [-w weight](权重)
ipvsadm -d -t|u|f service-address -r server-address 删除RS
ipvsadm -L|l [options] 查看rs
ipvsadm -Z [-t|u|f service-address] 清除计数器

LVS集群中的增删改

管理集群服务中的增删改

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

-A #添加

-E #修改

-D #删除

-C #清空

-t #tcp服务

-u #udp服务

-s #指定调度算法,默认为WLC

-p #设置持久连接超时,持久连接可以理解为在同一个时间段同一个来源的请求调度到同一Realserver

-f #firewall mask 火墙标记,是一个数字

#增加
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -A -f 66 -p 3000
#修改
ipvsadm -E -t 172.25.254.100:80 -s wrr -p 3000
#删除
ipvsadm -D -t 172.25.254.100:80
ipvsadm -D -f 66

管理集群中RealServer的增删改 

ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]

-a #添加realserver
-e #更改realserver
-t #tcp协议
-u #udp协议
-f #火墙 标签
-r #realserver地址
-g #直连路由模式
-i #ipip隧道模式
-m #nat模式
-w #设定权重
-Z #清空计数器
-C #清空lvs策略
-L #查看lvs策略
-n #不做解析
--rate :输出速率信息

LVS NAT模式

右边两台均为仅主机模式,网关配置为LVS仅主机网卡的IP

ip配置

lvs

server1

server2

 lvs中打开内核路由功能

vim /etc/sysctl.conf

WEB配置 

server1配置web

yum install httpd

echo "webserverA__192.168.0.101" > /var/www/html/index.html

systemctl restart httpd

server2配置web

yum install httpd

echo "webserverB__192.168.0.102" > /var/www/html/index.html

systemctl restart httpd

lvs中查看web是否配置成功

 LVS配置

lvs中安装lvs软件

yum install ipvsadm -y

ipvsadm -A -t 172.25.254.202:80 -s rr

ipvsadm -a -t 172.25.254.202:80 -r 192.168.0.102:80 -m

ipvsadm -a -t 172.25.254.202:80 -r 192.168.0.101:80 -m

LVS DR模式

ip配置

客户端

router

 LVS

ServerA

ServerB

 路由器打开内核路由功能

 vim /etc/sysctl.conf

WEB配置 

server1配置web

yum install httpd

echo "webserverA__192.168.0.101" > /var/www/html/index.html

systemctl restart httpd

server2配置web

yum install httpd

echo "webserverB__192.168.0.102" > /var/www/html/index.html

systemctl restart httpd

在Ivs主机中和rs主机中添加vip

ip a a 192.168.0.200/32 dev lo

解决vip响应问题

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

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

(2)在各RS使用arptables

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

ServerA

[root@ServerA ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@ServerA ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@ServerA ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@ServerA ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

ServerB

 [root@ServerA ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@ServerA ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@ServerA ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@ServerA ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

LVS配置

验证

 防火墙标签解决轮询错误

轮询错误

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

LVS配置

 实际问题如下:

解决方法

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

FWM:FireWall Mark MARK target

可用于给特定的报文打标记, --set-mark value 

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

具体操作

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

 验证

LVS持久链接

        在我们客户上网过程中有很多情况下需要和服务器进行交互,客户需要提交响应信息给服务器,如果单纯的进行调度会导致客户填写的表单丢失,为了解决这个问题我们可以用sh算法,但是sh算法比较简单 粗暴,可能会导致调度失衡

解决方案

        在进行调度时,不管用什么算法,只要相同源过来的数据包我们就把他的访问记录在内存中,也就是把这个源的主机调度到了那个RS上 如果在短期(默认360S)内同源再来访问我仍然按照内存中记录的调度信息,把这个源的访问还调度到 同一台RS上。 如果过了比较长的时间(默认最长时间360s)同源访问再次来访,那么就会被调度到其他的RS上。

配置方法 

ipvsadm -A/E -t/u/f service-address [-s scheduler] [-p [timeout]]默认360秒 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值