长文预警,先看下目录
负载均衡产生背景
不要因为技术而技术!技术服务于业务,一定是当前的技术满足不了业务的发展才会产生新的技术来解决业务问题,负载均衡为什么能产生?那是因为有业务需求。
中国人口14亿,移动网络用户7亿,固网用户4亿,根据二八原则保守估计独立用户为2.4亿,他们具有消费能力。
假设你有一个idea,我一无是处只有钱,我当你的天使投资人给你第一笔投资,你会拿去干什么?毫无疑问是营销,营销谁?营销这2.4亿人,假设有2%的人(480万)看到了你的广告,有20%的人(96W)感兴趣下载了你的APP,你什么都不用做,光APP开屏广告就可以大赚一笔,当然96W人在用你的服务,这必然会造成高并发,说明高并发是真的!
高并发产生的日志,有一个字段表示来源站点(比如用户是通过百度点过来的还是微博点过来的),这就可以分析渠道流量,再通过和订单表一关联,就可以分析出渠道流量转化率,这有什么用?这直接明示你下一次该往哪个渠道营销!这说明高并发是有好处的!
有了高并发所以产生了负载均衡!
LVS简介
LVS(Linux Virtual Server) Linux虚拟服务器
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
- https://baike.baidu.com/item/LVS/17738
网络基础
参考之前写的不得不看的网络基础,很多基础的内容需要先阅读此文
学习手册
更多细节查看
- LVS手册man ipvsadm
- keepalived手册man keepalived
- keepalived配置文件手册man keepalived.conf
LVS调度算法
既然是负载均衡,那么后端肯定不止一台服务器,怎么去调度?LVS提供了下面的调度算法
静态调度
- rr(Round Robin): 轮询
- wrr(weight):加权
- sh(source hashing): 源地址散列
- dh(Destination Hashing): 目标地址散列
动态调度
- lc(Least-Connection): 最少连接
- wlc(Weighted Least-Connection): 加权最少连接
- sed(Shortest Expected Delay): 最短期望延迟
- nq(never queue): 永不排队
- LBLC(Locality-Based Least Connection): 基于本地的最少连接
- LBLCR(Locality-Based Least Connections withReplication): 基于本地的带复制功能的最少连接
LVS三种工作模式
名词定义:
- CIP: Client IP 客户端的IP
- VIP: Virtual IP LVS实例IP,一般是暴露在公网中的地址;向外部直接面向用户请求,作为用户请求的目标的IP地址
- DIP: Director IP,主要用于和内部主机通讯的IP地址
- RIP: Real IP 后端服务器的真实IP
- DS: Director Server 指的是前端负载均衡器节点
- RS: Real Server 后端真实的工作服务器
NAT模式
NAT(Net Address Transition)即网络地址转换模式
[图片上传失败…(image-2138b5-1615470382448)]
图中黄色数据包是从客户端到LVS集群的,绿色数据包是从LVS集群到客户端的,大概过程如下:
- 数据包CIP->VIP,如果直接将数据包塞给RS,RS会丢弃,因此LVS修改目标地址VIP为RIP(D-NAT),此时数据包变成CIP->RIP发给RS
- RS处理完成后发送数据包RIP->CIP,这个数据包直接塞给客户端,客户端是不会收的,因为客户端是发给VIP的,但是回来就变成RIP给客户端的了,客户端也会丢弃,因此LVS修改源地址为VIP(S-NAT),此时数据包变成VIP->CIP发给客户端
整个过程保证一个原则:怎么来的就怎么回去,按照Socket四元组IP反向发回去!比如就客户端和LVS而言发来的是CIP->VIP,发回去就得是VIP->CIP,LVS和RS之间也是同样的道理
特点
- RS应该使用私有地址,DIP和RIP必须在同一个网段内,RS的网关必须指向DIP(因为最终给CIP的数据包要扔回给LVS)