技术学习总结 10 | 青训营

123 阅读3分钟

企业接入升级打怪之路(下)

一、四层负载均衡

①   问题背景

在运营商处租用的100.1.2.3的公网IP,如何在企业内部使用最合理?

答(现状):①直接找一个物理机,ifconfig将网卡配上这个IP,起server监听即可 ②应用多,起多个server监听不同的端口即可 ③租多个公网IP(数量有限)

②   什么是四层负载均衡?

定义:基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上

三个主要功能:①解耦vip和rs ②NAT ③防攻击:syn proxy

image.png

③   常见的调度算法原理

(1)       RR轮询(Round Robin):将所有的请求平均分配给每个真实服务器RS

(2)       加权RR轮询:给每个后端服务器一个权值比例,将请求按照比例分配

(3)       最小连接:把新的连接请求分配到当前连接数最小的服务器上

(4)       五元组hash:根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模

(缺点:当后端某个服务器故障后,所有连接都重新计算,影响整个hash环)

(5)       一致性hash:只影响故障服务器上的连接session,其余服务器上的连接不受影响

④   常见的实现方式FULLNAT

RS怎么知道真实的CIP?

答:通过TCP options字段传递,然后通过特殊的内核模块反解

image.png

⑤   四层负载均衡的特点

(1)       大部分都是通过dpdk技术实现,技术成熟,大厂都在用

(2)       纯用户态协议栈,kernel bypass,消除协议栈瓶颈

(3)       无缓存,零拷贝,大页内存(减少cache miss)

(4)       仅针对四层数据包转发,小包转发可达到限速,可承受高cps

⑥   使用四层负载均衡

image.png

二、七层负载均衡

①   问题背景

问:四层负载对100.1.2.3只能bind一个80端口,而有多个外部站点需要使用,该如何解决?

(或者问:有一些七层相关的配置需求,该怎么做?)

(1)       SSL卸载:业务侧是http服务,用户需要用https访问

(2)       请求重定向:浏览器访问toutiao.com自动跳转www. toutiao.com

(3)       路由添加匹配策略:完全、前缀、正则

(4)       Header编辑

(5)       跨域支持

(6)       协议支持:websocket、grpc、quic

②   Nginx简介

最灵活的高性能WEB SERVER,应用最广的七层反向代理:

image.png

(1)       模块化设计,较好的扩展性和可靠性

(2)       基于master/worker架构设计

(3)       支持热部署、可在线升级

(4)       不停机更新配置文件、更换日志文件、更新服务器二进制

(5)       较低的内存消耗:一万个keep-alive连接模式下的非活动连接仅消耗2.5M的内存

(6)       事件驱动:异步非阻塞模型,支持aio、mmap(内存映射)

③   Nginx和Apache性能对比

image.png

④   Nginx反向代理示意图

image.png

代理服务器功能:Keepalive、访问日志、url rewrite重写、路径别名、基于ip的用户的访问控制、限速及并发连接数控制等等……

⑤   Nginx内部架构

image.png

⑥   事件驱动模型

image.png

网络接入动手实践与课程总结

一、DNS服务器搭建

image.png image.png

二、四层负载均衡实验

开源的解决方案:LVS + keepalived

(1)       LVS(Linux Virtual Server):Linux虚拟服务器,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,详见www.linuxvirtualserver.org/

(2)       Keepalived集群高可用,解决某个节点故障问题

image.png

Nginx stream模块:

image.png

四层转发配置样例、请求样例和日志输出

image.png

三、七层负载均衡实验

四层转发配置样例、请求样例和日志输出

image.png

四、SSL自签证书实验

生成自签名证书:

image.png

五、如何将本地服务开放外网访问

服务开发前期,如何低成本的让别人访问自己的服务?

答:Ngrok,Expose your localhost to the web

使用条件:使用GitHub账户授权登录,即可使用,详见dashboard.ngrok.com/get-started…

命令:./ngrok http example.com:8082

总结与课程回顾

image.png