Ref

参考写在前面,基本都是把需要的重点用自己的话摘抄下来方便自己以后看懂,原文写的更好。

  1. https://www.kancloud.cn/noahs/linux/1540462
  2. http://www.linuxvirtualserver.org/zh/lvs3.html

LVS负载均衡

Linux Virtual Server LVS是一个虚拟的服务器集群系统,可以实现负载均衡。当并发超过了Nginx上限(目前1000-2000w PV或并发请求1w以下可以使用Nginx)可以考虑LVS。LVS已集成到linux内核中,只需要进行配置即可。

pv=并发连接数 * 统计pv的总时间 * web服务器数量 / 页面衍生连接次数(比如那些对css js 图片的额外http请求) / http响应时间 / 因数(一般为5)

LVS的IP负载均衡技术

VS/TUN 通过IP隧道实现虚拟服务器

在说明VS/TUN的实现前,先简述一些预备知识。

  • 基于RR-DNS(Round-Robin Domain Name System)

    这是一组Web服务器,通过分布式文件系统AFS来共享文档。这组服务器的域名是相同的,用户访问域名时,RR-DNS的服务器会将域名轮流解析成不同的服务器ip,这样访问就会被负载到各个服务器上。(即DNS轮询)

    这种方法有三方面的问题。

    • 域名解析方面,域名服务器是分布式系统,有一定层次结构,这样当请求域名解析时,如果该级别的域名服务器无法解析,将会向上一级的域名服务器进行提交…在不断向上提交的过程中,每次提交到域名服务器都会缓存一个映射:域名-ip。缓存之后,这个域名服务器组下的所有用户再访问都会访问这个ip,这样负载并非均衡。解决办法是让这个映射缓存的时间短一些,在这个映射上设置一个ttl值,过了这个ttl,映射会在缓存中被淘汰,再次请求时会重新映射。那么对这个ttl值的设置就会成为负载均衡的关键和制约,如果设置的过大,那么很多请求将映射到同一ip,会造成负载不均衡。如果ttl值过小,会导致本地域名服务器频繁提交请求,增加了域名解析的网络流量。
    • 用户机器方面,同样是域名-ip的映射,用户机器也会缓存并且不受ttl限制,那么用户的访问请求就会重复打到同一个ip。每个用户的访问不一定,导致严重的负载不均衡。
    • 高可用方面,如果一台服务器失效了,并不会阻止域名解析到它的ip上。如果需要对服务器维护升级,需要将该服务器的ip从RR-DNS服务器的ip地址列表中删掉,经过长时间等待所有域名服务器将这个映射淘汰掉,并且所有映射到这台ip的客户不再使用这个站点为止。
  • 基于IP层负载均衡调度

    用户通过vip(虚拟地址)访问服务,访问请求的报文会到达负载调度器来进行调度。负载调度器将从一组真实的服务器中选出一个,将用户的访问请求报文目的地址vip改写成选出来的服务器ip,端口也修改为对应的端口。完成修改后,将报文发送给选定的服务器。真实服务器的响应报文同样要经过负载调度器,将报文源地址和源端口再改回vip,最后发回给用户。

  • 通过NAT实现虚拟服务器(VS/NAT)

    内部网络有一些专门保留的ip地址(如10.0.0.0/255.0.0.0、 172.16.0.0/255.128.0.0和192.168.0.0/255.255.0.0),如果内网中的主机需要访问或被外网访问,需要采用网络地址转换NAT来将内部地址转换为外网可用的外部地址。NAT的工作原理:由负载调度器改写报文头部(目标地址、源地址、端口),这样客户和服务器认为他们直接通过ip地址相连,不同真实IP地址的并行网络服务变成了在一个IP地址上的虚拟服务。

    上述两种解决方案都是通过调度+改写报文的形式完成的。在改写vip之后,调度器还会在连接Hash表中记录这个连接,这样当该连接的下个报文到达的时候,直接从Hash表中取到应当改写的目的地址和端口,将报文传给选定的服务器。

    从真实服务器的响应报文返回时同样经调度器改写源ip和端口。

  • 通过IP隧道实现虚拟服务器(VS/TUN)

    在前面讲的VS/NAT的集群系统中,是由一个负载调度器来改写报文头部实现调度的,这就说明请求和响应的报文都需要流经这个负载调度器。当真实服务器的数量增加,负载调度器就称为整个集群系统的性能瓶颈——在大多数Internet服务中,请求报文一般较短,而响应报文往往包含大量数据。所以,自然而然想到如果将请求和响应报文分开处理,而且让负载调度器只负责调度请求报文,响应报文不再经过调度器而是直接返回给客户,那就可以极大提升系统吞吐量。

    实现的方法是IP隧道(IP tunneling)技术,将一个IP报文封装在另一个IP报文里。这样做的功能是可以将目的地址为a的数据报文被封装和转发到另一个ip地址b。这样,我们说在移动主机和虚拟私有网络(Virtual Private Network)中建立了一个IP隧道,这个隧道是静态建立的,隧道两端分别是两个唯一ip地址。

    整体报文转发过程是这样:请求报文->封装[请求报文]->转发[封装[请求报文]]->后端服务器。

    这样请求报文在被封装后转发到后端服务器,响应报文直接从后端服务器返回给用户。但是一条隧道只能连接一对用户和服务器,而后端服务器有多个,不可能静态建立所有对应的隧道。解决方案是动态选择一台服务器建立隧道,也即,将请求报文封装和转发给选出的这台服务器。结果就是一组服务器上的网络服务成为了一个ip地址上的虚拟网络服务(vip),各个服务器将vip地址配置在自己的ip隧道设备上。

    如上图所示,用户发送请求至负载均衡器的虚拟ip,这个请求通过ip隧道被负载到真实服务器上,真实服务器直接将响应报文返回给用户。

    VS/TUN和VS/NAT的工作流程中的区别主要在报文转发的方式。同样是由调度器来动态选择一台真实服务器(依据是各个服务器的负载情况),然后调度器使用ip报文b来封装请求报文r,封装后的ip报文b转发给选出的这台真实服务器。服务器收到报文之后先将报文拆成原来的请求报文r,获得请求报文r的目的地址(就是vip),检查这个vip是否被配置在了本机ip隧道设备(虚拟网卡)上,如果对应上了就处理这个请求,然后根据路由表来将响应报文直接返回给用户。

    当请求报文的目的地址为vip,响应报文的源地址也是vip,响应报文无需修改。用户不用知道是哪台真实服务器处理的。

LVS配置方法

  1. 先决条件:Linux虚拟机的防火墙和Selinux关闭。
  2. 安装使用lvs:yum install ipvsadm
  3. 绑定vip: ip addr add <服务运行主机的ip和子网掩码,例如10.0.0.13/24> dev eth0
  4. 配置ipvsadm:
ip addr add 10.0.0.13/24 dev eth0
ipvsadm -C   # 清除当前所有LVS规则
ipvsadm --set 30 5 60         # 分别设置tcp tcpfin udp连接的超时时间为30 5 60
ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20   # 添加虚拟服务,调度算法见 man ipvsadm
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1 # 将虚拟服务10.0.0.13:80绑定到真实服务(本机外网ip)10.0.0.17:80上
ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1 # 同上,绑第二台机器18,同一个虚拟服务ip
ipvsadm -ln # 查看下配置lvs结果
  1. 将lo网卡绑定vip:ip addr add <vip的ip和网段 如10.0.0.13/32> dev lo 为什么这里子网掩码是32位?
  2. 修改内核参数抑制APR响应
cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p

LVS负载均衡调度原理及配置方法相关推荐

  1. 【云服务器 ECS 实战】一文掌握负载均衡服务原理及配置方法

    一.负载均衡基本原理概述 协议/端口 轮询策略 会话保持 二.云服务器 ECS 负载均衡相关配置 协议&监听配置 后端服务器配置 健康检查配置 测试 在上期文章中,介绍了负载均衡的概述及优势, ...

  2. Nginx、Haproxy、LVS负载均衡从原理到部署(一)

    先说些题外话,我记得51博客的号早就注册了,之前只是不间断上来看看别人写的技术文章涨涨见识,自己后面开始接触到运维这块,就想到把平时学的一些相关技术记录到博客上来,只是方便自己可以随时上网回顾,由于多 ...

  3. lvs负载均衡调度器

    lvs简介 lvs(Linux Virtual Server):linux虚拟服务器.它是一款强大的基于ip的数据请求负载均衡调度器:终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web ...

  4. Lvs 负载均衡之nat模式配置

    2019独角兽企业重金招聘Python工程师标准>>> Lvs nat模式全称是Virtual Server via Network Address Translation(VS/N ...

  5. 50.Nginx负载均衡 ssl原理 密钥对 配置ssl

    2019独角兽企业重金招聘Python工程师标准>>> 12.17 Nginx负载均衡 12.18 ssl(https)原理 12.19 生成ssl密钥对 12.20 Nginx配置 ...

  6. LVS负载均衡(3)——LVS工作模式与工作原理

    LVS介绍及工作原理 1. LVS 介绍 LVS,Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统,可以在 UNIX/Linux 平台下实现负 ...

  7. LVS负载均衡群集之构建NAT模式

    一.案例概述 LVS负载均衡模式-NAT模式:NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一种上网方式(源地址NAT).如果把NAT的过程稍微变化,就可以 成为负载 ...

  8. LVS负载均衡群集之构建NAT模式,可跟做!!!

    有关于LVS负载均衡群集的相关概念可以参考博文:LVS负载均衡群集详解 一.案例概述 LVS负载均衡模式-NAT模式:NAT用法本来是因为网络IP地址不足而把内部保留IP地址通过映射转换成公网地址的一 ...

  9. LVS负载均衡DR模式实现

    LVS负载均衡之DR模式配置 DR 模式架构图: 操作步骤 实验环境准备:(centos7平台) 所有服务器上配置 # systemctl stop firewalld //关闭防火墙 # sed - ...

最新文章

  1. 关于创建zeromq消息队列,设置和更改IP地址,远程可以访问,不只是本地链接。python代码。
  2. shell 批量添加用户健壮版
  3. JavaScript 同源策略
  4. 2018-2019 20165208 网络对抗 Exp9 Web安全基础
  5. SAP中国,在中国,为中国,一些包含了SAP logo的NBA运动套装
  6. malloc/free与new/delete的区别
  7. 高德地图跟百度地图经纬度互转
  8. nginx_keepalived配置(转载保存)
  9. 项目开发:网上书店(详细的开发流程记录)----注册登录功能,通过邮件验证
  10. 用了这些软件,写代码有了飞一般的速度
  11. 独立按键与蜂鸣器的c语言编写,生产实习报告--单片机电子琴.doc
  12. 【智能制造】制造业信息化与工业4.0
  13. 叉乘点乘混合运算公式_Word打公式太麻烦?十分钟带你零基础上手LaTex数学公式...
  14. vue生命周期 阿星小栈
  15. 决策树:ID3C4.5cart算法(从原理到实现-小白教程超详细)
  16. 黑盒测试与bug定位
  17. 给出x.509证书的实例并分析其工作方式
  18. TCP/IP五层协议体系结构的各层功能
  19. 基于TP5、EasyWeChat、fastadmin微信公众号网页授权登录
  20. VS2017 如何连接mysql数据库依赖的驱动msi

热门文章

  1. Windows 7序列号
  2. DirectDraw
  3. WIS800C TCP Client 非透传模式连接远程服务器使用方法(转)
  4. 相似矩阵(Similar Matrixces)
  5. mysql 2000 无法安装_SQL2000安装窗口不出现怎么办
  6. python语句list_python中list的使用
  7. 计算机毕业设计Java学生培训管理系统(源码+系统+mysql数据库+lw文档
  8. c++ 常见基础知识以及面试常问知识点
  9. asp.net core 3.1和 .Net 5.0中使用AutoFac作为IoC容器组件
  10. 计算机用户名密码设置密码,电脑密码怎么设置 教你电脑开机密码 屏保密码如何设置【图文】-太平洋电脑网PConline_教你学电脑_太平洋电脑网PConline...