请求流程:用户发送请求,DNS解析并轮训打到vip上,最后通过lvs进行流量调度
这样的网络结构存在几个问题
1.负载不均衡。DNS会在客户端浏览器、系统等有缓存,在缓存期间请求一直打到同一个机房;各机房机器数量不等,即使打到机房流量相等,最终单机负载依旧不等。
2.调度不灵活。
- 无法快速调整调度策略,在晚高峰时,由于各个机器负载不均衡,只能手动或凭借经验调整DNS策略。
- 由于LVS使用DR策略,LVS只能对本机房机器做流量调度。
这里LVS采用DR策略,即LB和RS必须在同一物理网段
多机房之间已经实现互通,相当于内网
使用LVS的FULLNAT策略可以解决跨网的问题,不过调度策略配置不够灵活。
在此我们引入新的7层负载均衡,引入7层后的网络结构:
请求流程:用户发送请求,DNS机洗并轮训到vip上,接着lvs直接将请求发送给dproxy,通过dproxy代理打到实际主机
dproxy是使用openresty实现的7层调度器
加入dproxy后的收益:
1.通过dproxy对流量进行调度,没有无法跨网段的限制,实现各机器负载均衡
2.动态upstream。通过manager订阅注册中心机器变化,如有变化及时生成新的upstream文件并触发reload
3.简单定制开发
- 通过balancer_by_lua模块来完成自定义流量分配
- 通过access_by_lua来完成防抓及traceid生成等
- 可通过lua进行快速地定制逻辑开发