将活动 TCP 会话负载均衡到 AWS Aurora RDS
Load balance active TCP sessions to AWS Aurora RDS
我目前在将打开的 TCP 会话(由 RoR 应用程序创建)正确负载平衡到动态创建的 Aurora Postgresql 只读副本时遇到问题。
这个问题是当已经建立到一个只读副本的 TCP 连接时,会创建另一个只读副本。之后来自第一个副本的流量将不会平均分配给第二个副本,因为 TCP 连接已经与第一个副本建立。
所附图表表示当前的基础结构设置。请注意,在只读副本(服务器)和应用程序(客户端)之间有一个负载均衡器,由 Aurora 服务提供,它基于 DNS 循环。
我试过 pgbouncer, pgpool and multiple Ruby gems (makara, fresh_connection),但其中 none 能够负载平衡,也没有消除长期存在的 TCP 连接..
我看了很多文章,他们帮助调查和确认了这个问题;但是 none 他们提出了解决方案。
所以...如您所见,我已经尝试从应用程序和网络的角度解决这个问题,不幸的是没有成功。有人遇到同样的问题吗?
您可以随数据库实例扩展负载平衡器。
+----+ +--------+
-> | LB | --> | Server |
+--------+ / +----+ +--------+
| Client |
+--------+ \ +----+ +--------+
-> | LB | --> | Server |
+----+ +--------+
当客户端以循环方式连接到负载平衡器时,负载平衡器将完成其工作以限制每台服务器的数据库连接总数。具有多个负载平衡主机的 simple routing policy in DNS 应该足够了。
我终于弄明白了这一点,必须在应用程序级别应用修复程序才能停止保持长期有效的 TCP 连接。
特别是 Ruby 我必须设置 idle_timeout and reaping_frequency parameters. However here 你可以找到其他编程语言的参数。
希望它对以后的人有所帮助。干杯!
我目前在将打开的 TCP 会话(由 RoR 应用程序创建)正确负载平衡到动态创建的 Aurora Postgresql 只读副本时遇到问题。
这个问题是当已经建立到一个只读副本的 TCP 连接时,会创建另一个只读副本。之后来自第一个副本的流量将不会平均分配给第二个副本,因为 TCP 连接已经与第一个副本建立。
所附图表表示当前的基础结构设置。请注意,在只读副本(服务器)和应用程序(客户端)之间有一个负载均衡器,由 Aurora 服务提供,它基于 DNS 循环。
我试过 pgbouncer, pgpool and multiple Ruby gems (makara, fresh_connection),但其中 none 能够负载平衡,也没有消除长期存在的 TCP 连接..
我看了很多文章,他们帮助调查和确认了这个问题;但是 none 他们提出了解决方案。
所以...如您所见,我已经尝试从应用程序和网络的角度解决这个问题,不幸的是没有成功。有人遇到同样的问题吗?
您可以随数据库实例扩展负载平衡器。
+----+ +--------+
-> | LB | --> | Server |
+--------+ / +----+ +--------+
| Client |
+--------+ \ +----+ +--------+
-> | LB | --> | Server |
+----+ +--------+
当客户端以循环方式连接到负载平衡器时,负载平衡器将完成其工作以限制每台服务器的数据库连接总数。具有多个负载平衡主机的 simple routing policy in DNS 应该足够了。
我终于弄明白了这一点,必须在应用程序级别应用修复程序才能停止保持长期有效的 TCP 连接。
特别是 Ruby 我必须设置 idle_timeout and reaping_frequency parameters. However here 你可以找到其他编程语言的参数。
希望它对以后的人有所帮助。干杯!