LVS负载均衡(1)-- LVS概述及LVS网络模型
1. 负载均衡集群概述
Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统。
LB:Load Balancing,负载均衡集群
将用户的请求按照一定的比例均匀的发布到不同的服务器上,该系统使负载可以在计算机群集中尽可能平均地分摊处理。
负载均衡集群按照工作的协议层次可以分为四层传输层负载均衡和七层应用层负载均衡。
四层负载均衡
在传输层进行负载均衡,仅需要对客户端的请求在TCP/UDP层进行包转发就可以实现。
四层负载均衡的性能极好,因为只需要在TCP层进行处理,无需解析应用层,理解应用层复杂的逻辑。
常用的解决方案为:
LVS
内核级实现,不需要装服务器软件,处理并发访问的调度能力极高,可达到400万的并发量,但由于工作在四层模式,对上层协议支持能力较弱,实际中较少使用,在大规模站点中有时会使用两层调度机制,LVS做为第一层调度,然后使用nginx或haproxy做第二次调度。
nginx的stream模块
haproxy的tcp模式
七层负载均衡
在应用层进行负载均衡,需要解析应用层报文,根据应用层信息进行负载。七层负载均衡可以完成应用方面的协议请求,比如nginx实现的http层负载,可以实现http头信息的改写,安全应用规则控制,URI匹配控制,rewrite等功能。
七层负载均衡相比四层性能会比较差,因为需要解析应用层信息。
常用的解决方案为:
nginx
可以当http和fastcgi的负载和代理服务器,不能代理mysql
haproxy
使用负载均衡集群存在的问题:
会话保持。服务器通过cookie识别用户,用户在该站点的行为会使用session机制记录保存于服务器端内存中,因此需要在进行集群调度时要保证该session可用。
解决方案:
1.session sticky:同一用户调度到固定的一台服务器上,有两种用户识别方式
Source IP:LVS sh算法(对某一特定服务而言)
Cookie 该方式会更加精准识别用户
2.session replication:会话复制,每台服务器拥有全部session,会使得集群中的服务器一直在实时同步session信息,对性能造成影响
session multicast cluster
3.session server:使用专门的session服务器
例如:Memcached,Redis
上传资源需要对所有用户可以。客户端使用POST或PUT方式上传资源到服务器上时,需要保证集群中的每台服务器都需要能够访问用户上传的资源,可以使用共享存储方式解决,图片和视频等无结构类型资源使用共享文件系统存储,例如nfs,cifs等方式,对于结构化数据则使用mysql服务器方式存储。
负载均衡器单点故障隐患,使用高可用技术解决,例如keepalived,heartbeat,coresync等技术。
2. LVS理论基础
LVS的英文全称是 Linux Virtual Server ,即 Linux 虚拟服务器。它是一种Cluster 集群技术,主要用于四层负载均衡,将用户请求均匀的调度到不同的服务器上
执行。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
内核级实现,不需要装服务器软件,处理并发访问的调度能力极高,可达到400万的并发量,但由于工作在四层模式,对上层协议支持能力较弱,一般在大规模站点中使用两层调度机制,LVS做为第一层调度,然后使用nginx或haproxy做第二次调度。
官方网站 http://www.linuxvirtualserver.org/
2.1 LVS常用术语
VS:Virtual Server,Director Server(DS) ,Dispatcher(调度器),Load Balancer
负载调度器,是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的
RS:Real Server(lvs), upstream server(nginx),backend server(haproxy)
是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等
CIP:Client IP
客户端ip地址
VIP: Virtual serve IP
调度服务器对外的IP地址
DIP: Director IP VS
调度服务器对于内网的IP地址
RIP: Real server IP
集群中提供服务的服务器IP地址
以上术语关系的示意图如下:
2.2 LVS数据调度原理
lvs需要借助iptables/netfilter,通过修改内核参数,在INPUT链前增加一个LVS功能模块,转发数据包。
Lvs工作在内核空间,在input链上设置规则,强行改变报文生命周期,将报文直接转发至POSTROUTING链中处理。
lvs: 由ipvsadm/ipvs两部分组成
ipvsadm:用户空间的命令行工具,规则管理器,用于管理集群服务及相关的RealServer;
ipvs:工作于内核空间的netfilter的INPUT钩子之上的框架;
2.3 LVS工作模型
LVS 负载均衡模型有四种工作模型: NAT、DR、TUN、FULL-NAT ,较为常见的模型有 NAT、DR ,使用最为广泛的模型是 DR模型。
2.3.1 NAT模型
lvs-nat转发方式本质是多目标IP的DNAT,通过将客户端请求报文中的目标地址和目标端口修改为根据调度算法挑出的RS的RIP和PORT实现转发。
RS的返回数据必须要流经LVS设备返回给客户端,因为客户端请求的的VIP地址而部署RIP,因此必须由VIP返回给客户端,否则客户端会丢弃返回报文。
NAT模型特点如下:
因为涉及到ip头的更改,需要启用LVS设备的ip_forword转发功能。
lvs服务器与RS服务器之间使用交换机或路由器都可以,RIP和DIP应使用私网地址(可以为公网,较浪费),当LVS和RS为直连网段时,RS的网关需要指向LVS,当LVS和RS之间存在路由设备时,需要把RS的网关指向路由器,但数据必须流经LVS再返回给客户端,要做好路由的规划。
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
LVS必须是Linux系统,RS可以是任意OS系统
ip数据包的转发过程如下图:
在LVS上把目的IP由VIP替换为RIP。
2.3.2 DR模型
Direct Routing,直接路由;LVS通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
DR模型特点如下:
源IP/PORT,以及目标IP/PORT均保持不变,传输层不动,不支持端口映射,LVS不需要启用Ip_forword转发;
当请求到达服务器时,网络层不动,只修改数据链路层的mac地址;
请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client,因此Director和各RS都得配置使用VIP,此时会产生VIP冲突的问题;
RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,应该指向出口路由器,以确保响应报文不会经由Director;
Director和各RS都配置有VIP,需要解决地址冲突问题;
RS可使用大多数OS系统;
ip数据包的转发过程如下图:
2.3.3 TUNNEL模型
转发方式:
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
tunnel模型特点如下:
DIP, VIP, RIP都应该是公网地址
RS的网关一般不能指向DIP
请求报文要经由Director,但响应不经由Director
不支持端口映射
RS的OS须支持隧道功能
TUN模式IP包调度过程如下:
2.3.4 FULL-NAT模型
此类型kernel默认不支持,多用于调度器和RS不在同一网络的场景中。
lvs-fullnat转发方式:
通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
网络配置要求:
VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client。
请求和响应报文都经由Director
支持端口映射
2.3.5 四种模型的比较
lvs-nat与lvs-fullnat:请求和响应报文都经由Director
- lvs-nat:RIP和DIP未必在同一网络,但是RIP回包要经过DIP
- lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
- lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
- lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
2.4 ipvsadm包组成
2.4.1 ipvsadm包结构
LVS内置在内核层面,无需安装软件包,但是我们需要安装ipvs的命令行管理工具软件ipvsadm工具。
安装ipvsadm
[root@lvs-01 ~]# yum install ipvsadm
ipvsadm的文件组成:
[root@lvs-01 ~]# rpm -ql ipvsadm
/etc/sysconfig/ipvsadm-config <==配置文件
/usr/lib/systemd/system/ipvsadm.service <==systemd的unit文件
/usr/sbin/ipvsadm <==主程序文件
/usr/sbin/ipvsadm-restore <==ipvs规则恢复工具
/usr/sbin/ipvsadm-save <==ipvs规则保存工具
/usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README
/usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz
/usr/share/man/man8/ipvsadm.8.gz
使用[root@Centos8 ~]# grep -C 10 -i "ipvs" /boot/config-4.18.0-147.el8.x86_64命令可以查看内核编译时是否编译lvs模块。
2.4.2 ipvsadm工具使用
ipvsadm 的用法大概分类如下两类
管理集群服务(定义负载均衡配置)
管理后端RS(定义负载均衡后端节点的增删改查)
管理集群服务:增、改、删
1.增、改:-A表示增加,-E表示修改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
2.删除:-D表示删除
ipvsadm -D -t|u|f service-address
参数说明
service-address:vip服务的地址及端口号
-t:TCP协议的端口,VIP:TCP_PORT
-u:UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法,默认为wlc
[-p [timeout]]:超时时长
管理集群上的RS:增、改、删
1.增、改:-a表示增加,-e表示修改
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
2.删:-d表示删除
ipvsadm -d -t|u|f service-address -r server-address
其他参数说明
-r server-address[:port]:RS的ip地址,如省略port,不作端口映射
server-address:vip的地址及端口
lvs工作模型:
-g:gateway, dr类型,默认
-i:ipip, tun类型
-m:masquerade, nat类型
-w weight:权重
清空定义的所有内容
- ipvsadm -C
清空计数器
- ipvsadm -Z [-t|u|f service-address]
查看规则
- 语法格式:ipvsadm -L|l [options]
options:
--numeric, -n:以数字形式输出地址和端口号
ipvsadm -Ln必须L在前,不然语法错误
--exact:扩展信息,精确值
--connection,-c:当前IPVS连接输出
IPVS connection entries
pro expire state source virtual destination
|协议|连接过期时间|连接状态| 客户端地址 | vip地址 | 响应的RS
TCP 01:58 TIME_WAIT 172.20.124.254:41326 172.20.125.0:80 192.168.50.105:80
--stats:统计信息
[root@lvs-01 ~]# ipvsadm -Ln --stats
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
|连接| 收到包 | 发送包 |收到大小|发送大小|
--rate :输出速率信息
[root@lvs-01 ~]# ipvsadm -Ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
|每秒连接数|收到报文|发出报文|收到字节|发出字节
ipvs规则保存文件:
/proc/net/ip_vs
显示内容与ipvsadm -Ln相似,只是将ip地址以16进制显示
ipvs连接保存文件
/proc/net/ip_vs_conn
保存策略
三种方式:
ipvsadm-save > /PATH/TO/IPVSADM_FILE
ipvsadm -S > /PATH/TO/IPVSADM_FILE
ipvsadm-save -n > /etc/sysconfig/ipvsadm
重定向至指定目录,可以自定义,推荐保存于/etc/sysconfig/ipvsadm中,当记载ipvsadm.service服务时会自动读取/etc/sysconfig/ipvsadm中保存的规则,自动加载。
[root@lvs-01 ~]# cat /usr/lib/systemd/system/ipvsadm.service
[Unit]
Description=Initialise the Linux Virtual Server
After=syslog.target network.target [Service]
Type=oneshot
ExecStart=/bin/bash -c "exec /sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm"
ExecStop=/bin/bash -c "exec /sbin/ipvsadm-save -n > /etc/sysconfig/ipvsadm"
ExecStop=/sbin/ipvsadm -C
RemainAfterExit=yes [Install]
WantedBy=multi-user.target
重载策略
三种方式:
ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
ipvsadm -R < /PATH/FROM/IPVSADM_FILE
systemctl restart ipvsadm.service
LVS负载均衡(1)-- LVS概述及LVS网络模型的更多相关文章
- LVS负载均衡软件使用及(LVS简介、三种工作模式、十种调度算法)
一.LVS简介 LVS(Linux Virtual Server)即Linux虚拟服务器,目前LVS已经被集成到Linux内核模块中.该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案, ...
- LVS负载均衡的三种模式和八种算法总结
三种LVS负载均衡模式 调度器的实现技术中,IP负载均衡技术是效率最高的,IP虚拟服务器软件(IPVS)是在linux内核中实现的。 LVS负载均衡模式---1.NAT模式 NAT用法本来是因为网络I ...
- lvs负载均衡(DR模式)
lvs负载均衡(DR模式) 系统环境:lvs+keepalivedcentos7.5 ip:192.168.1.157 vip:192.168.1.150(主)centos7.5 ip:192.168 ...
- LVS负载均衡-基础知识梳理
一. 集群的概念 服务器集群简称集群是一种服务器系统,它通过一组松散集成的服务器软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台服务器.集群系统中的单个服务器通常称 ...
- LVS负载均衡IP隧道模式原理介绍以及配置实战
LVS 基本工作原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数 ...
- 21.LVS负载均衡群集-DR群集
LVS负载均衡群集-DR群集 目录 LVS负载均衡群集-DR群集 数据包流向分析 DR模式的特点 LVS-DR中的ARP问题 IP地址冲突 解决办法 路由根据ARP表项,会将新来的请求报文转发给Rea ...
- 大数据高并发系统架构实战方案(LVS负载均衡、Nginx、共享存储、海量数据、队列缓存)
课程简介: 随着互联网的发展,高并发.大数据量的网站要求越来越高.而这些高要求都是基础的技术和细节组合而成的.本课程就从实际案例出发给大家原景重现高并发架构常用技术点及详细演练. 通过该课程的学习,普 ...
- LVS负载均衡原理
一.LVS基本原理概述 LB集群的实现,LB即负载均衡集群 硬件:F5 BIG-IP,Citrix NetScaler,A10,Array,Redware 软件:Lvs,nginx,haproxy,a ...
- LVS负载均衡群集
概述 群集的类型:无论是哪种服务器,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机.根据群集所针对的目标差异,可以分为以下三个类型: 1.负 ...
- LVS负载均衡集群--NAT模式部署
目录: 一.企业群集应用概述 二.负载均衡群集架构 三.负载均衡群集工作模式分析 四.关于LVS虚拟服务器 五.NAT模式 LVS负载均衡群集部署 一.企业群集应用概述 1.群集的含义 Cluster ...
随机推荐
- #对勾函数#洛谷 5695 [NOI2001]反正切函数的应用
题目 问给定的每一个\(a\),是否存在正整数\(b,c\), 使得在满足$$\arctan(\frac{1}{a})=\arctan(\frac{1}{b})+\arctan(\frac{1}{c} ...
- 【分享汇总】AIoT 开源科技节暨 OpenHarmony 技术论坛(附链接)
在开源科技 OSTech 和环球资源联手举办的"AIoT 开源科技节暨 OpenHarmony 技术论坛"上,一众技术大咖.开源鸿蒙生态上下游厂商与开发者群体齐聚一堂,畅谈&quo ...
- 【C#上位机】西门子1200PLC实用定位控制程序案例
1. 引言 新阁教育这篇文章是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够 ...
- Redis 17 穿透 击穿 雪崩
使用缓存的问题 Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面. 但同时,它也带来了一些问题.其中,最要害的问题,就是数据的一致性问题,从严格意义上讲,这个问题无解. 如 ...
- selenium 关闭浏览--- close 与 quit 的区别
selenium 关闭浏览器,有两种方式 close quit 既然都是关闭浏览器,为什么要写两种方式? 区别 close: close只是关闭浏览器,但是不会退出 webdriver quit: q ...
- 标签栏切换效果 JS
标签栏切换效果 JS 要求:class为tab-box的元素用于实现标签栏的外边框,,分别实现标签栏的标签部分和内容部分. html <div class="tab-box" ...
- ssm 创建bean的三种方式和spring依赖注入的三种方式
<!--创建bean的第一种方式:使用默认无参构造函数 在默认情况下: 它会根据默认无参构造函数来创建类对象.如果 bean 中没有默认无参构造函数,将会创建失败--> <bean ...
- spring boot 配置文件占位符和多环境配置 [七]
配置文件占位符 person.last-name=zhangsan person.age=${random.int} person.birth=2017/12/15 person.boss=false ...
- 我用这10招,能减少了80%的BUG
前言 对于大部分程序员来说,主要的工作时间是在开发和修复BUG. 有可能修改了一个BUG,会导致几个新BUG的产生,不断循环. 那么,有没有办法能够减少BUG,保证代码质量,提升工作效率? 答案是肯定 ...
- 框架hash/history实现简单原理
1.hahs <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...