9

我搜索了负载平衡,但我唯一能找到的是工作理论,目前,这对我来说是“简单”的部分。但是零示例如何实现一个。

我有几个关于负载平衡的问题:

  1. 我有一个域(example.com),我在它后面我有一个负载平衡服务器(我们称之为A),根据理论,它将要求客户端关闭与 A 的连接,并连接到 B,一个子-服务器并与 B 进行请求。客户端会在 Web 浏览器中停止在地址栏中看到“example.com/page.html”并开始看到“B_ip_address/page.html”吗?

  2. 如何从头开始实现一个简单的负载均衡器?我的怀疑是针对 HTTP 部分的。是否有一些特定的消息或一组消息我需要发送给客户端,这将使他与我断开连接并连接到子服务器?

  3. 比 HTTP 更底层的协议,比如 TCP/IP,有什么标准的数据包告诉客户端他刚刚连接到负载均衡服务器,现在他需要连接到 xxx.xxx.xxx.xxx 来进行请求?

  4. 什么方法用得最多?(1) 客户端连接到负载均衡服务器,它要求客户端直接连接到其中一个子服务器,或者 (2) 负载均衡服务器开始将客户端的所有流量桥接到子服务器,反之亦然以透明的方式?

所以问题 2、3 和 4 是关于负载平衡协议的,第一个问题是域名可以连接到负载平衡器的方式以及潜在的后果是什么。

4

1 回答 1

8

您的方法是一种通过将调用重定向到另一台服务器的静态负载平衡。所有后续调用都可能使用此其他服务器或再次发送到负载均衡器以进行重定向。

实现取决于系统的实现。负载均衡器最适合没有会话状态的独立请求。您需要在“结束”服务器之间同步会话状态。或者使用共享会话存储向所有服务器提供会话状态。

HTTP 服务器负载平衡有一个简单而透明的解决方案。您可以使用 nginx 服务器的负载平衡模块 ( http://nginx.org/en/docs/http/load_balancing.html )。这可用于 HTTP 和 HTTPS 请求。如果负载增加,它可能会动态扩展额外的服务器。您需要编辑 nginx 配置并重新启动服务器。这对现有连接是透明的。并且 nginx 不会导致更改域名或主机名的问题。

其他协议需要客户端和服务器的一些支持。如果客户端和服务器之间有专门的设备,负载平衡可能是透明的。或者通信协议需要支持连接重定向。

编辑:负载平衡也可以通过 DNS 循环实现。每个 DNS 查找调用都会返回相同域名的另一个 IP 地址。客户端选择一个 IP 并连接到该服务器。另一个客户端可以使用下一个 IP。地址栏名称始终相同。

例子:

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.209
      173.194.116.210
      173.194.116.212
      173.194.116.211
      173.194.116.208

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.210
      173.194.116.212
      173.194.116.211
      173.194.116.208
      173.194.116.209

Non-authoritative answer:
Name:    www.google.com
Addresses:  2a00:1450:4001:80f::1010
      173.194.116.212
      173.194.116.211
      173.194.116.208
      173.194.116.209
      173.194.116.210

IP 地址范围旋转。大多数 HTTP 负载均衡器作为透明负载均衡器工作,如 nginx 或其他反向代理实现。我认为重定向负载均衡器更像是一种低技术实现。

TCP/IP 不是协议。它是用于传输实现特定通信协议的数据的传输层。而 TCP/IP 本身是网络组件的协议。但不是应用程序。您可以查看https://en.wikipedia.org/wiki/OSI_model

于 2015-07-28T18:53:39.550 回答