【问题标题】:How to redirect connection to implement load balancer?如何重定向连接以实现负载均衡器?
【发布时间】:2019-11-18 12:27:19
【问题描述】:

我必须为我们的自定义服务器而不是 http 编写负载均衡器。 我在互联网上浏览了很多文章。每个地方都提到负载均衡器将连接重定向到实际服务器。 但是没有提到如何重定向连接。 有人能告诉我如何在 C 中实现连接重定向吗?

谢谢

【问题讨论】:

    标签: load-balancing


    【解决方案1】:

    在这种情况下重定向连接意味着在两个连接之间创建代理 - 外部(面向客户端)和内部(面向服务器)。一方面你监听传入的连接,另一方面你选择一个后端服务器并重定向来自客户端连接的流量。本质上,您是从两个 ip 元组创建一个流:

    ((external ip, external port, external interface) , (internal ip, internal port,internal interface))

    数据流为:

      client                load balancer                   server
    [c1 sock]<--->[external socket | internal socket]<--->[s1 sock]
    

    基本操作模式为:

    • 当客户端连接时,负载平衡器从服务器中选择一个服务器 水池。
    • 当数据在任一端传输时,负载平衡器复制 两个套接字之间的数据。
    • 当任一端的连接状态发生变化(关闭)时,负载平衡器会将状态复制到另一个套接字。
    • 当支持的服务器关闭时,负载平衡器会将其从池中排除(需要某种监控)。

    您可以在不使用套接字的情况下在网络层实现它,但这需要用户空间 TCP/IP 堆栈实现以及直接从网络适配器队列读取数据包的能力。

    nginx 可以负载平衡 TCPUDP 连接。为什么不使用它而不是重新发明轮子呢?几年后您的解决方案可能会经过更多调整和实战测试。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 2013-12-25
      • 1970-01-01
      • 2021-12-07
      • 2017-09-05
      • 1970-01-01
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多