四层负载均衡

负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

实现方式

通过发布三层的 IP 地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行 NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

tcp负载均衡举

负载均衡设备在接收到第一个来自客户端的 SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务器。TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。

1、设置vip,在网关设备实现arp代答

vip是虚拟ip,当用户宿主机 ping vip时,会先向网关发arp包请求mac地址,arp包到网关后,根据流表策略匹配到目的地为vip的包,且flag=skip_hw_act代表支持从硬件up到软件里,同时从入口转发,包回到用户宿主机时,拆包发现vip对应的mac是网关的物理mac

在网关设备的ovs下流表:vip=10.255.1.24,protocal=1

ovs-appctl dpctl/add-flow priority:10,flags:skip_hw_act,in_port(5),eth_type(0x0800),ipv4(dst=10.255.1.24,proto=1),icmp() icmp_proxy,5
2、设置vport,在网关设备实现负载均衡转发

实现负载均衡是基于tcp协议,本质是tcp连接的负载均衡,当tcp三次握手建立起连接后,后续的包都会从这个连接转发,这个流表要匹配vip和vport,修改源mac为网卡mac,目的mac为真实物理机器的mac,多台物理机之间是根据weight权重分配到真实物理机,同时从另一口转发

匹配项:
1、将用户源ip转换成上联物理口一个网卡配置的多个虚拟ip地址(10.87.255.50-10.87.255.255)其中的一个ip
2、将目的ip由vip转换成pool里真实rs的ip
3、指定轮询算法wrr,支持toa(client的ip对rs而言是不可见的,但有对于rs放开白名单的需求,需要查看client的ip,所以toa支持将client的ip保存在tcp option里,rs可以看到)
4、从mac地址dd:d9:31:ee:44:56即与真实提供服务的物理机连接的物理口转发出去

在网关设备的ovs下流表:

ovs-appctl dpctl/add-flow in_port(3),eth(),eth_type(0x0800),ipv4(dst=10.255.1.24,proto=6),tcp(dst=8080) ct(commit,nat(src=10.87.255.50-10.87.255.255,dst=pool(ddfead09a2eb46bc9e08406acd71a314),alg=wrr,toa)),set(eth(dst=dd:d9:31:ee:44:56)),6
3、添加rs端口服务到负载均衡池

将真实物理机的ip(10.72.19.56和10.72.19.58)放入转换池,以供vip和port地址转换,注意此时虽然rs加入了pool但是weight=0

在网关设备的ovs下流表:

ovs-appctl dpctl/ct-add-pool "name(ddfead09a2eb46bc9e08406acd71a314),dst((addr=10.72.19.56:8081,active=true),(addr=10.72.19.58:8081,active=true))

此时通过访问vip可以访问物理机8081端口的服务

4、从负载均衡池删除rs服务

将一台设备的服务从连接池删除

在网关设备的ovs下流表:

ovs-appctl dpctl/ct-del-pool "name(ddfead09a2eb46bc9e08406acd71a314),dst((addr=10.72.19.56:8081,weight=10,active=true))"
5、删除vport

在网关设备的ovs下流表:

ovs-appctl  dpctl/del-flow in_port(5),eth(),eth_type(0x0800),ipv4(dst=10.255.1.24,proto=6),tcp(dst=8080)
6、更新vport算法

在网关设备的ovs下流表:

ovs-appctl dpctl/mod-flow in_port(3),eth(),eth_type(0x0800),ipv4(dst=10.255.1.24,proto=6),tcp(dst=8080) ct(commit,nat(src=10.87.255.50-10.87.255.255,dst=pool(ddfead09a2eb46bc9e08406acd71a314),alg=rr,toa)),set(eth(dst=dd:d9:31:ee:44:56)),2
7、删除vip

在网关设备的ovs下流表:

ovs-appctl dpctl/del-flow priority:6,flags:skip_hw_act,in_port(5),eth_type(0x0800),ipv4(dst=10.255.1.24,proto=1),icmp()
内部负载均衡流程

外部负载均衡流程

如果想实现公网访问,需要再经过虚拟网关vrouter


ovs常用命令:

ovs-appctl dpctl/add-flow    //添加流表
ovs-appctl dpctl/mod-flow    //修改流表
ovs-appctl dpctl/dump-flows  //查看流表ovs-appctl dpctl/ct-add-pool    //在pool中加入ip,若想更新pool中的ip,重写即可,会覆盖为最新的
ovs-appctl dpctl/ct-dump-pool   //展示pool中的ip

基于underlay和overlay转换的四层负载均衡相关推荐

  1. CDN基于谷歌开源Katran四层负载均衡方案的应用 - 原理篇

    CDN作为一种分布式缓存加速服务,对于访问量级大的区域,单个节点带宽建设一般可达百Gb量级,对外配置虚拟IP提供服务,节点内部需要通过多层负载均衡(LB)将请求分发到内部的若干台服务器进行处理.一般情 ...

  2. Nginx基于TCP的四层负载均衡介绍

    Nginx Plus的商业授权版开始具有TCP负载均衡的功能.从Nginx 1.7.7版本开始加入的,现在变成了一个商业收费版本,想要试用,需要在官网申请.也就是说,Nginx除了以前常用的HTTP负 ...

  3. nginx1.9基于端口的四层负载均衡实践,基于端口的转的负载均衡

    在大型项目四层负载有LVS,但在中小型项目或者内部有很多应用需要做TCP四层基于端口转,以前我们采用Socat,后面也尝试使用iptables来做四层的端口转发,同样HAProxy提供高可用性.负载均 ...

  4. MGW——美团点评高性能四层负载均衡

    本文整理自美团点评技术沙龙第14期:美团背后的故事-你不知道的美团云. 美团点评技术沙龙由美团点评技术团队主办,每月一期.每期沙龙邀请美团点评及其他互联网公司的技术专家分享来自一线的实践经验,覆盖各主 ...

  5. java服务架构 之MGW(美团点评高性能四层负载均衡)

    为什么80%的码农都做不了架构师?>>>    本文整理自美团点评技术沙龙第14期:美团背后的故事-你不知道的美团云. 美团点评技术沙龙由美团点评技术团队主办,每月一期.每期沙龙邀请 ...

  6. lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...

    目录 lvs的调度算法 lvs的四种模式 四层均衡负载和七层的区别 1.lvs调度算法(最常用的四种) 轮叫调度(rr) 调度器通过外部请求的顺序轮流分配到集群中的真实服务器上,对每台服务器都是均等的 ...

  7. 企业级负载均衡解决方案之二:美团点评四层负载均衡解决方案MGW

    一.前言 在互联网厂商业务不断扩展之后,多种服务的入口会导致接入流量的剧增,所以多数基于IPVS或者Nginx等初级负载均衡技术的早期方案都会面临故障或者失效,所以就像google开发meglev一样 ...

  8. f5 会话保持 负载均衡_四层负载均衡和七层负载均衡区别在哪里?

    年后至今这段时间工作重心都在调整公司现有API Gateway的系统架构以及对现有技术栈选型.经过对主流互联网网关所实现各种方案的调研,我们在API Gateway前置一层接入层,接入层主要用于实现限 ...

  9. 四层负载均衡与七层负载均衡

    lvs+nginx的拓扑结构 四层负载均衡 四层的负载均衡就是基于IP+端口的负载均衡:在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需 ...

最新文章

  1. iOS开发-自己定义重用机制给ScrollerView加入子视图
  2. Gartner:解开关于人工智能的六个迷思
  3. Oracle数据库卸载
  4. Python学习笔记(序列和元组)
  5. python之协程函数、递归、二分法
  6. Kubernetes-命名空间namespace(ns)(十四)
  7. mysql 5.7.10免安装_免安装版mysql5.7.10-16配置教程(2)
  8. Mac桌面上找不到或无法显示USB问题
  9. 英制BSW 美制UNC 螺牙的理解
  10. 《自己动手写网络爬虫》读书笔记——队列与集合
  11. PS安装失败解决方法
  12. Spring4实战读书笔记
  13. IE和谷歌浏览器区分
  14. python 读取jpg_Python OpenCV读取png图像转成jpg图像存储的方法
  15. 超赞!世界10个著名悖论的最终解答来了!
  16. 如何从VirtualBox中的Ubuntu虚拟机访问主机上的文件夹
  17. 第二届2011年国信蓝点杯软件设计大赛预赛的试题6
  18. php天气源码_php 天气预报代码
  19. 两个常见Qt编译错误的解决
  20. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

热门文章

  1. ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )
  2. numpy的内存映射
  3. JQ动画和特效轮播图
  4. 1024 程序员节城市嘉年华,共话技术生涯的一万种可能!
  5. 控制算法-PID算法总结-从公式原理到参数整定解析(附C源码)
  6. CAD-VB多段线、波浪线、射线、构造线
  7. 信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序
  8. 港科夜闻|推进湾区产学研融合发展,香港科大(广州)—广州市属国企校企合作专题交流会圆满举行...
  9. 教你如何在Linux系统安装软件
  10. 常用ADB命令——安装、安装镜像