LVS(Linux virual server)详解

一,lvsLinux virtual server)运行原理

1.1 lvs简介

LVS:Linux Virtual Server ,负载调度器,内核集成,章文嵩,阿里的四层 SLB(Server LoadBalance) 是基 于LVS+keepalived 实现
LVS 相关术语
VS: Virtual Server ,负责调度
RS:RealServer ,负责真正提供服务

2.1 ,工作原理:

VS 根据请求报文的目标 IP 和目标协议及端口将其调度转发至某 RS ,根据调度算法来挑选 RS
2.2,LVS集群的类型
 
vs-nat:           修改请求报文的目标IP,多目标 IP DNAT
lvs-dr:             操纵封装新的MAC地址
lvs-tun:          在原请求IP报文之外新加一个 IP 首部
lvs-fullnat :       修改请求报文的源和目标 IP

 2.2.1 vs-nat

Ivs-nat:
本质是多目标 IP DNAT ,通过将请求报文中的目标地址和目标端口修改为某挑出的 RS RIP
PORT 实现转发
RIP DIP 应在同一个 IP 网络,且应使用私网地址 ;RS 的网关要指向 DIP
请求报文和响应报文都必须经由 Director 转发, Director 易于成为系统瓶颈
支持端口映射,可修改请求报文的目标 PORT
VS 必须是 Linux 系统, RS 可以是任意 OS 系统

 2.2.2 lvs-dr

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

 2.2.3 LVS-TUN

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

2.2.4lvs-fullnat

fullnat :通过同时修改请求报文的源 IP 地址和目标 IP 地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP 是公网地址, RIP DIP 是私网地址,且通常不在同一 IP 网络;因此, RIP 的网关一般不会指向 DIP
2.RS 收到的请求报文源地址是 DIP ,因此,只需响应给 DIP ;但 Director 还要将其发往 Client
3. 请求和响应报文都经由 Director
4. 支持端口映射

二,LVS的调度算法

1.1 静态调度算法

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

1.2 动态调度算法

主要根据 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

三,lvs部署集群演示

3.1.1 实验环境:
主机IPvip角色
lvs192.168.0.100172.25.254.100调度器
webserver1192.168.0.10null真实服务器
webserver2192.168.0.20null真实服务器
lvs配置:
yum install ipvsadm -y --- 安装软件ipvsadm
echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf/ 
添加调度策略并查看
[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
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0         
[root@lvs ~]# 
 
systemclt stop firewalld
 
 
查看策略另外的方式:
cat /proc/net/ip_vs
cat /proc/net/ip_vs_conn
 webserver1配置:
yum install httpd -y
 
echo webserver1 - 192.168.0.10 > /var/www/html/index.html
 
systemctl restart httpd
systemctl stop firewalld

 lvs上面测试

[root@lvs ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done

 

clinent主机环境:

router主机环境

DR环境部署

lvs主机环境

webserver1主机环境

 webserver2主机环境

解决 vip 响应问题
DR 模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
(1) 在前端网关做静态绑定
(2) 在各 RS 使用 arptables
(3) 在各 RS 修改内核参数,来限制 arp 响应和通告的级别
限制响应级别 :arp_ignore
0: 默认值,表示可使用本地任意接口上配置的任意地址进行响应
1: 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
通告级别 :arp_announce
0: 默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1: 尽量避免将接口信息向非直接连接网络进行通告
2: 必须避免将接口信息向非本网络进行通告

配置详情

配置要点
1.Director 服务器采用双 IP 桥接网络,一个是 VPP ,一个 DIP
2.Web 服务器采用和 DIP 相同的网段和 Director 连接
3. 每个 Web 服务器配置 VIP
4. 每个 web 服务器可以出外网
配置
在lvs和rs中设定vip
[root@lvs~]#ipaddradddevlo192.168.0.100/32 
[root@rs1~]#ipaddradddevlo192.168.0.100/32 
[root@rs2~]#ipaddradddevlo192.168.0.100/32
在RS1和RS2中解决响应问题
[root@rs1~]#echo1>/proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1~]#echo1>/proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1~]#echo2>/proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1~]#echo2>/proc/sys/net/ipv4/conf/all/arp_announce
在lvs中配置策略
[root@lvs~]#ipvsadm-A-t192.168.0.100:80-swrr
[root@lvs~]#ipvsadm-a-t192.168.0.100:80-r192.168.0.101:80-g [root@lvs~]#ipvsadm-a-t192.168.0.100:80-r192.168.0.102:80-g [root@lvs~]#ipvsadm-Ln
IPVirtualServerversion1.2.1(size=4096)
ProtLocalAddress:PortSchedulerFlags
测试效果:
root@node10~]#forNin{1..6};docurl192.168.0.100;done RS2server-192.168.0.102
RS1server-192.168.0.101
RS2server-192.168.0.102
RS1server-192.168.0.101
RS2server-192.168.0.102
RS1server-192.168.0.101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值