1. 全局负载均衡(基于DNS)
如果有多台 WEB 服务器同时为一个域名提供服务时,即一条 URL 对应多个 IP 地址,那么该 URL 的权威域名服务器可能会根据该 URL 解析出多个 IP 地址,并根据每个 IP 地址所对应的服务器的性能和负载状况选择出最优的服务器 IP 地址返回给用户,用户根据该地址进行访问。
如图所示,步骤详解:
- 用户访问一个网站(www.blog.myyd.com),向本地 DNS 服务器请求该域名对应的 IP 地址
- 由于是第一次访问,本地 DNS 服务器也没有缓存记录,于是进行递归查询
- 递归查询返回的结果是指向该网站的权威域名服务器,于是本地 DNS 服务器向该权威域名服务器请求该域名所对应的 IP 地址
- 权威域名服务器根据自己本地配置的负载均衡策略(如A记录)返回一台 CDN 边缘节点的 IP 地址给本地 DNS 服务器(返回的IP是Virtual-IP2)
- 本地 DNS 服务器拿到 IP 地址后返回给用户
- 用户根据本地 DNS 服务器返回的地址(VIP2)对真实服务器进行访问
- 服务器返回响应
2. 本地负载均衡(基于LVS-DR)
对上图第 ⑥ 步的扩展:
- 用户(Client)向该 URL 对应的 IP 地址(VIP)发出请求,此时报文 IP 头是:src-ip=CIP|dst-ip=VIP,经过运营商的网络到达服务器集群的出口网关(Router)
- 网关(Router)拆开报文发现 dst-ip=VIP 在本地配置的静态路由中,下一跳指向 DIP,于是将报文重新封装好并且将 dst-mac 改为 DR-mac 发给 Switch
- Switch 查询 CAM 表后发送给 DR
- 实际上 DR 内核中的 IPVS 模块先收到该报文,然后判断 dst-ip 是否是 VIP 并且该数据包请求的服务是否是后端 RS 提供的服务?若是则执行 IPVSadm 中配置的负载均衡策略,并将 dst-ip 改为策略选中的 RS 的 RIP(不是VIP)
- RS 收到后直接将响应返回给用户(Client),不经过 DR