一文让你读懂LVS集群!

目录

一、LVS的简介

二、LVS集群体系结构

三、LVS集群类型

四、LVS的调度算法

五、LVS的实战案例

1、LVS部署相关命令介绍

2、部署nat模式集群

3、部署dr模式集群

4、防火墙标签解决轮询调度问题

一、LVS的简介

LVS:Linux Virtual Server,负载调度器,是一种基于Linux操作系统内核的高性能、高可用网络服务负载均衡解决方案。
LVS工作原理基于网络层(四层,传输层)的负载均衡技术,它通过内核级别的IP虚拟服务器(IPVS)模块实现透明的流量分发。
LVS 相关术语:
  • VS: Virtual Server,负责调度
  • RS:RealServer,负责真正提供服务
  • CIP:Client IP
  • VIP: Virtual serve IP VS外网的IP
  • DIP: Director IP VS内网的IP
  • RIP: Real server IP

二、LVS集群体系结构

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

三、LVS集群类型

1、net模式集群

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

2、dr模式集群

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

四、LVS的调度算法

1、静态调度算法

  • RRroundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
  • WRRWeighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
  • SHSource Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往
  • 第一次挑中的RS,从而实现会话绑定
  • DHDestination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请
  • 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商

2、动态调度算法

  • LCleast connections(最少链接法):主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
  • WLCWeighted LC(权重最少链接): 适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活动链接数)
  • SED:Shortest Expection Delay:默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
  • NQNever Queue,第一轮均匀分配,后续SED,初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1的权重为1node2的权重为10,经过运算前几次的调度都会被node2承接。
  • LBLCLocality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
  • LBLCRLBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS

五、LVS的实战案例

1、LVS部署相关命令介绍

  • 程序包:ipvsadm
  • Unit File: ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm
  • 管理集群服务中的增删改查: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
  • 管理集群中realserver的增删改查:ipvsadm -a|e -t|u|f service-address -r realserver-address [-g|i|m] [-w weight]
管理集群服务中的增删改查管理集群中realserver的增删改查
-A # 添加
-a #添加realserver
-E #修改-e #更改realserver
-t  #tcp服务-t #tcp协议
-u  #udp 服务
-u #udp协议
-p # 设置持久连接超时
-r #realserver地址
-f #firewall mask 火墙标记,是一个数字
-g #直连路由模式
-m #nat模式
-w #设置权重
-f #火墙标签
-L #查看全部策略
-C #清除所有策略

2、部署nat模式集群

2.1.实验环境

主机名IPVIP
lvs172.25.254.100(nat)192.168.0.100(仅主机)
webserver1192.168.0.10(仅主机),gateway:192.168.0.100null
webserver2192.168.0.20(仅主机),gateway:192.168.0.100null

2.2.实验内容

2.2.1设置vs、rs的ip

vs:

webserver1:

vim /etc/NetworkManager/system-connections/eth0.nmconnection

webserver2:

vim /etc/NetworkManager/system-connections/eth0.nmconnection
nmcli connection reload
nmcli connection up eth0

2.2.2在lvs中打开内核路由功能
vim /etc/sysctl.conf
sysctl -p

2.2.3在webserver安装apache
dnf install httpd -y  #安装
echo webserver1-192.168.0.10 > /var/www/html/index.html   #将不同内容写入网站首页
echo webserver2-192.168.0.20 > /var/www/html/index.html

在lvs测试一下:

 

2.2.4在lvs中加策略

安装ipvsadm:

dnf install ipvsadm -y

加策略:rr轮询策略

[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs ~]# ipvsadm -Ln

2.2.4检测

3、部署dr模式集群

3.1实验环境

主机名ipvip
client172.25.254.200(nat)
router172.25.254.100(nat),192.168.0.100(仅主机)
vs192.168.0.50(仅主机)192.168.0.200(lo)
werserver1192.168.0.10(仅主机)192.168.0.200
wevserver2192.168.0.20(仅主机)192.168.0.200

3.2实验内容 

3.2.1配置IP
vim /etc/NetworkManager/system-connections/eth0.nmconnection
nmcli connection reload
nmcli connection up eth0

client:需要将网关设置为路由器router的ip:

router:需要两个网卡,一个为nat模式,一个为仅主机模式:

vs:网关同样设置为路由器router的ip:

webserver1:网关同样设置为router的ip

3.2.2添加vip

在vs、wevserver1、webserver2上lo上添加vip

  • 使rs中的vip不对外生效
  • [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 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
    [root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
  • 添加vip 
    ip a a 192.168.0.200/32 dev lo
3.2.3在lvs中添加策略

策略算法为wrr:基于权重的轮询,分别设置webserver1的权重为1、webserver2为2。

[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

 3.2.3在client中检测

4、防火墙标签解决轮询调度问题

4.1.轮询调度问题

http https 为例,当我们在 RS 中同时开放 80 443 端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题 :当我第一次访问80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。
#在lvs添加rr策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g

轮询错误:

4.2.解决轮询调度问题

4.2.1安装mod_ssl模块,让rs支持https
yum install mod_ssl -y
4.2.2.在lvs主机中为端口做标记
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666
4.2.3.在lvs中添加策略
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g
4.2.4在client中检测

做端口标记后,rr轮询调度正常.。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值