如何基于DNS和Load Balancer做服务的负载均衡

2020-06-01 00:00:00 客户端 服务器 服务 返回 发给

我们来分析从外网访问内网的服务的具体过程:

首先我们看DNS和Load Balancer是怎么工作的。

  1. 客户端要访问我们的系统,发送了一个https请求,https://hello.mycompany.com

  2. 客户端的local resolver查看本地的缓存,是否能找到域名hello.mycompany.com

  3. 如果不能找到,则发送一个递归查询到本地的DNS服务器

  4. 本地的DNS服务器查看它的缓存,看是否能够找到域名

  5. 如果还是不能找到域名,则DNS服务器发送查询到root DNS服务器

  6. root DNS服务器找不到域名,返回.com域的DNS服务器地址给本地的DNS服务器

  7. 本地的DNS服务器发送查询到.com域的DNS服务器

  8. .com域的DNS服务器找不到域名,返回.mycompany.com域的DNS服务器给本地的DNS服务器

  9. 本地的DNS服务器发送查询到.mycompany.com域的DNS服务器

  10. .mycompany.com域的DNS服务器找到了域名hello.mycompany.com,返回一个别名hello.vip.mycomany.com,以及另外两个DNS Server的IP,这两个DNS Server我们分别称为dnsloadbalancer1 and dnsloadbalancer2

  11. 本地的DNS服务器选择其中一个,比如选择dnsloadbalancer1,来查找hello.vip.mycompany.com

  12. dnsloadbalancer1返回6个IP,这六个IP分别指向六个LoadBalancer,从LoadBalancer1到LoadBalancer6

  13. 本地的DNS服务器将这6个IP返回给客户端的Local resolver

  14. 客户端的Local Resolver在六个IP中,选择一个,比如选择LoadBalancer1

  15. 客户端连接LoadBalancer1,由于它是一个负载均衡,会将请求发给后端的多个hello服务的一个

  16. hello服务返回LoadBalancer1调用结果

  17. LoadBalancer1将结果返回给客户端

其次我们看网络流是如何工作的:

  1. 假设客户端想要访问https://hello.mycompany.com,当然需要经过上面的DNS过程,得到6个LoadBalacer的IP,并选择其中的一个,并试图去连接这个LoadBalancer。这整个过程如上面从步到第十四步,接下来第十五步要连接LoadBalacer1,连接的过程没这么简单,要经过复杂的过程。

  2. 连接LoadBalancer1的请求会到达其中的一个Border Router

  3. Border Router的通过iBGP知道,其中一个Available Zone 的aggregation router知道到LoadBalancer1的路由怎么走,于是Border Router通过Core Switch,将请求发送给aggregation router (AR1)

  4. aggregation router知道LoadBalancer1如何到达,于是将请求发给LoadBalancer1

  5. LoadBalancer1将包的源地址由客户端的IP变为自己的IP,然后将包发给其中一个hello服务

  6. 如果hello服务和LoadBalancer1在同一个VLAN中,则能够直接到达,否则还需要经过aggregation router

  7. 如果hello服务和LoadBalancer1不在同一个VLAN中,但是在同一个aggregation router连接的多个VLAN中,则通过aggregation router上的Virtual Interface就能够转发过去

  8. 如果hello服务在另一个aggregation router (AR2) 的管理之下,则还需要先发给自己的aggregation router,然后经过core switch发送给另一个aggregation router

  9. 另一个aggregation router利用arp找到hello服务的MAC地址,将包发给TOR switch

  10. TOR switch将包发给hello服务,hello服务处理请求,将结果通过TOR Switch –> aggregation router (AR2) –> core switches –> aggregation router (AR1) –> LoadBalancer1

  11. LoadBalancer1将目标地址改成客户端的地址,将结果发给aggregation router (AR1)

  12. AR1将结果发送给Border Router,Border Router通过Internet,将结果发送给客户端。


相关文章