在通过aws负载均衡器传递时,连接上丢失了什么信息?

这里是一个新手问题的位。 stream量通过负载均衡器发生什么情况? 我一直认为负载平衡器只是把客户端连接到一组服务器之一,而没有太多解释的方式。

我有一个应用程序,需要一个MySQL连接,使旧图书馆hppy。 数据库仅用于短期的作业跟踪数据 – 如果数据丢失,meh。 这不是logging系统。 负载是最小的。 即使磁盘大小是<10G。 但是,如果connecton消失,遗留的库变得非常不愉快。

公司政策阻止了我使用RDS,并且在build立HA集群时遇到了一些麻烦 – 尤其是因为我不关心通常的数据备份,复制等。

我们的其他服务器都使用Ec2-自动调整组来部署到AWS。 大多数情况下,每台服务器都是一个单独的服务器,我们使用ASG来确保一个服务器大部分已经启动 – 健康检查的时间都在10到20分钟左右。

我想把这个mysql实例也放到一个ASG中,但是在通过关联的LB传递stream量时遇到了麻烦。 我从Google那里收集到的信息是,你不能仅仅将一个LB粘贴在一个mysql实例的前面,而是希望能够解决数据质量问题。

我可以使用DNS来完全忽略LB,所以它不是一个硬阻塞,在一个更困难的系统中,这将是错误的答案。 但是我不明白协议层为什么stream量不通过。

负载平衡器端口configuration:
3306(TCP)转发到3306(TCP)

==========更新。 其实这里的问题似乎是LBconfiguration。 切换到内部LB并重新启动客户端后,一切都在嗡嗡作响。

我也不得不在数据库上刷新主机,仍然不知道连接器来自哪里。

我也不得不在数据库上刷新主机,仍然不知道连接器来自哪里。

除非在服务器configuration中增加max_connect_errors的值,否则您将不得不再次执行此操作,因为ELB运行状况检查将被MySQL解释为不良连接 ,因为ELB连接和断开连接而不进行身份validation。 将这些机架放置足够,入站连接将再次被拒绝。 在一个安全的环境中,一个连接有重大错误的主机并不会对服务器造成严重的威胁,所以增加max_connect_errors ,显然,解决这个问题应该没问题。

你可以SET GLOBAL LOG_WARNINGS = 2; 在MySQL服务器上,然后检查MySQL错误日志( SHOW GLOBAL VARIABLES LIKE 'log_error';find错误日志的path)。 这个值(2)实际上是一个很好的默认设置,用于log_warnings所有时间。

否则,是的,您可以通过ELB或任何其他TCP负载均衡器代理TCP连接到MySQL,但“丢失什么”的答案是您失去了发起连接的主机(IP地址和端口)的身份, MySQL会看到ELB的IP地址,所以如果你在MySQL层的authentication要求某些用户从特定的IP地址或范围进入,那么MySQL就不会看到这个地址。 ELB支持PROXY协议,它使TCP连接上的源IP和端口信息再次可用,但是MySQL不支持PROXY协议,所以没有了。

另一个用于MySQL的负载平衡器是HAProxy,它能够理解足够的MySQL协议,以便实际尝试login到服务器,然后在执行健康检查时再次断开连接。 (我并不隶属于该产品或项目,而是广泛使用它。)与ELB不同,它支持“备份”服务器的概念,除非主服务器closures,否则不要联机。 考虑到这一点,我可以写一个“虚拟的MySQL服务器”作为最后一招的备份服务器,它只是返回一个MySQL客户端认为是来自MySQL服务器的有效消息的错误…所以,当遇到这种情况时,应用程序会迅速果断地(不会超时),并在应用程序日志中logging消息,指出问题的本质。 当没有可用的服务器时,我回复一个假的错误(与消息一起,错误代码是可configuration的,但是,如果由翻译错误代码的客户端库解释,则意味着“正在进行服务器closures”):

 $ mysql --host xxxx --port xxxxx ERROR 1053 (HY000): No healthy MySQL servers are available to provide the requested service (but the connection to the load balancer was successful) $ mysqldump --host xxxx --port xxxx --all-databases mysqldump: Got error: 1053: No healthy MySQL servers are available to provide the requested service (but the connection to the load balancer was successful) when trying to connect 

整洁,嗯?

通常不可能“转发”TCP连接。 负载均衡器终止来自客户端的连接,并打开到源服务器的新连接,因此负载均衡器不会收集并传递给源的任何特定于连接的信息都将丢失 – 最常见的是源IP地址(通常使用X-Forwarded-For头传递给原始服务器)和源端口号。

Amazon Elastic Load Balancer也具有较短的超时期限,通常阻止它们用于客户端期望连接保持打开并可用的持久数据库连接。 他们最近引入了自定义超时的function,最长可达3600秒(一小时),这对您来说可能已经足够了。