## LB & HA & 容灾
hard LB A10,F5,据说A10的财务状况并不好啊,可见以后是SLB天下了
SLB软件级负载均衡器(LVS/HAProxy/Nginx)
SLB DNS、NGX、LVS、HAproxy结合keepalived搭建
- keepalive作用是给haproxy可用性检查,一台haproxy挂了,检测切到另一台
- haproxy作用是做负载均衡
NGX利用反向代理upstream来实现负载均衡
据说Tengine在NGX基础进行了改进,但用户接受度并不高,不利于产品良性迭代,HA更重要
keepalived给HA提供保证,基于我们熟悉的VRRP协议,做容灾是很好的
四层负载均衡有LVS,七层负载均衡有Haproxy、Nginx,目前用的最多的就是这三种了
阿里云用LVS+Tengine SLB,ECS直接挂LVS,四层监听的流量直接由LVS转发到ECS,7层监听的流量会经过LVS到Tenigine再到用户ECS
**Nginx/LVS/HAProxy负载均衡相关知识可参考这篇 - [Nginx/LVS/HAProxy负载均衡软件的优缺点详解](http://www.ha97.com/5646.html)**
问题
- DNS不足?
- upstream 反向代理关系?
- LVS是什么,怎么实现?
- 天翼云没有A10?LB怎么做
- 跨域机房双活怎么做?
- 性能问题? QPS
- docker化下与虚拟机下LB思路不同?
---
阿里服务
```
redis/oss/
monitor/log dataV
| |
APP - CDN - WAF -|- SLB - ECS集群 -|- RDS集群
| |
```
SLB
```
+---------------------------------------------------------------+
| +--------------+ |
| ----------| CLOUD |---------- |
| | +--------------+ | |
| +---------+---------+ +--------------------+ |
| | | | |lvs cluster | |
| | LVS cluster | | | | |
| | |tengine cluster | tengine cluster |
| +---------+---------+ +----------+---------+ |
| |
| SLB cluster |
+---------------------------------------------------------------+
```
CDN
内容分发、复制、cache
智能DNS,优化到达缓存/复制点
缺点:内容可能不同步,可闲时同步
WAF价格高出SLB好多
---
### 容器云LB技术
几个基本概念:
#### 1. RSS/RPS/RFS/XPS的基本认识
- 对NIC出入数据的优化
- RSS(receive side scaling),数据队列均衡到不同核,硬件实现
- RPS(Receive Packet Steering),数据队列均衡到不同核,软件实现
RSS和RPS都是网卡为了在接受数据包的时候使用多核架构而进行的性能增强,RSS是在硬件层面而RPS在软件层面
- RFS(Receive Flow Steering) 保证接受中断CPU内核正好是用户处理的CPU,避免转换开销
XPS(Transmit Packet Steering) 保证发送软中断CPU内核正好是用户处理的CPU,避免转换开销
一句话,这4个东西:
- 保证入出数据在不同核之间的均衡,
- 保证入出数据中断和处理在同一个核心上
#### 2. PREROUTING/POSTROUTING/SNAT/DNAT
- 源地址发送数据--> {PREROUTING-->路由规则--> POSTROUTING}-->目的地址接收到数据
PREROUTING是“路由规则”之前的动作,POSTROUTING是“路由规则”之后的动作
- DNAT在PREROUTING,SNAT在POSTROUTING
- SNAT,数据包从网卡发送出去的时候,把数据包中的源地址替换,这样,接收方认为来源被替换IP
DNAT,数据包从网卡发送出去的时候,修改目的IP,你想访问A,DNAT后把访问A的数据包修改为访问B
#### 3. LVS模式
- DR
改写目的MAC为RS MAC,LVS对用户透明,不该IP,返回直接访问CLient
LVS&RS需在同一个二层
- NAT
来回都走LVS,LVS是瓶颈
LVS&RS需在同一个二层
- TUNNEL
只能Linux内核支持
- Full-NAT
Packet IN dest ip:LVS VIP->RS ip,src ip:CLent IP->LVS内网IP
Packet OUT dest ip:LVS 内网IP->Clent IP, src ip: RS IP->LVS VIP
```
FULLNAT MODE
+---------------- --+ PC/CLENT+- ---------------------+
REQUST | | |
| +------------+ |
SRCIP:CLIENTIP RESPONSE
DESTIP:L^S VIP |
| SRC:LVS VIP
| DEST:CLIENT IP
| |
+--------v------+ +--------------+ +------v--------+
| DNAT+SNAT | | LVS | ++ |
| +-------------+ +-------------+SNAT+DNAT |
+-------+-------+ +--------------+ +------+--------+
| |
SRC:LVS INTERNAL IP SRC:RS IP
DEST:RS IP +---------------+ DEST: LVS INTERNAL IP
| | | |
+------------------->+ RS +<-------------------+
+---------------+
```
---
### Nginx vs. LVS vs. haproxy vs. DNS
- Ngx做LB?优缺点?
- LVS 模式?优缺点?
- haproxy怎么做?优缺点
- DNS作为LVS一种模式
#### NGX
- 七层
- 正则
- 配置
- 日志
- 做webserver
- 做反向加速缓存
- http/https/mail
- 社区
- session保持 :question:
- 健康检查?url检测 :question:
#### LVS
- 四层
- 流量类型支持度
- 配置性
- 只发请求
- :x:正则
NAT模式DS(Director server)会成为瓶颈,DR模式回直接到Client,DS不会成为瓶颈,相对比较常用
- LVS缺点
- Keepalived主备模式设备利用率低;不能横向扩展;VRRP协议,有脑裂的风险。
- ECMP的方式需要了解动态路由协议,LVS和交换机均需要较复杂配置;交换机的HASH算法一般比较简单,增加删除节点会造成HASH重分布,可能导致当前TCP连接全部中断;部分交换机的ECMP在处理分片包时会有BUG。
#### haproxy
- session保持
- 处理效率
- 并发
haproxy策略
:one: roundrobin
:two: static-rr 权重 :star:
:three: leastconn 最少连接者先处理 :star:
:four: source 表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法 :star:
:five: ri 表示根据请求的URI
:six: rl_param 表示根据请求的URl参数'balance url_param' requires an URL parameter name
:seven: hdr(name) 表示根据HTTP请求头来锁定每一次HTTP请求
:eight: rdp-cookie(name) 表示根据据cookie(name)来锁定并哈希每一次TCP请求
#### 关于LVS替代DNS轮询:question:
- lvs/haproxy+ngx+keepalived基本满足大部分HA需求,大部分情况下构架已经可以满足替代DNS轮询
- 对极高并发场景,在接入层可以叠加DNS轮询
[可参见](imgs/t13.jpg)
#### 关于Zookeeper可以替代LVS,NGX:question:
[参考5](#references)
### references
1. [高性能负载均衡设计与实现](https://zhuanlan.zhihu.com/p/29949340)
1. [容器云负载均衡之三:RSS、RPS、RFS和XPS调整](https://blog.csdn.net/cloudvtech/article/details/80182074)
1. [从一个开发的角度看负载均衡和LVS](https://blog.csdn.net/daiyudong2020/article/details/51611118)
1. [HA接入层构架](https://cyningsun.github.io/02-03-2019/access-layer-architecture.html)
1. [keepalived和zookeeper对比](https://www.cnblogs.com/arjenlee/p/9254219.html)
1. [运维可用性能力建设](https://cloud.tencent.com/developer/article/1595028)
1. [haproxy+keepalived高可用负载均衡构建](https://blog.csdn.net/qq_41772936/article/details/80718014)
1. [LVS的原理-工作模式](https://yizhi.ren/2019/05/03/lvs/)