MySQL 主服务器/主服务器复制:使用 EC 2 的弹性负载均衡器进行负载平衡

MySQL 主服务器/主服务器复制:使用 EC 2 的弹性负载均衡器进行负载平衡

我有一个在 EC 2 上运行的 RoR 应用程序。我在主/主复制环境中有两个 MySQL 服务器实例,以及一些读取从属服务器。一旦我确定主服务器按照我预期的方式工作,我就使用以下命令在位于不同可用区的两个主服务器之间设置 EC 2 负载均衡器:

elb-create-lb db_masters --zones us-east-1c,us-east-1b \
--listener "protocol=tcp,lb-port=3306, instance-port=3306"

当我通过直接查询手动添加数据时,它可以很好地复制,并且我可以使用 Rails 应用程序进行一些基本查询。 但是,当我通过 Rails 应用程序添加数据时,Rails 进程失败并出现以下错误:

状态:500 内部服务器错误主机“ip-xxxxxxxxxxxx.internal”由于许多连接错误而被阻止;使用“mysqladmin flush-hosts”解除阻止

在两台服务器之间直接添加数据是按预期进行的,在一台服务器上添加的数据总是会如实地复制到另一台服务器上。因此问题不在于复制设置。

我尝试将此 IP 地址作为通配符添加到此用户的主机中,但仍然出现此错误。我也尝试过刷新主机,它工作了一段时间后又失败了。

我的问题是如何正常设置 MySQL 主/主负载平衡,其次,如何使用弹性负载平衡器在 EC 2 上进行此操作。

答案1

我曾经读过一篇关于这个 URL 的博客文章,发表于 2009 年 7 月 13 日: http://www.mysqlperformanceblog.com/2009/07/13/what_problems_will_i_have_migrating_into_the_cloud/

以下是第 1 点的摘录:大多数高可用性工具(如 MMM 或 DRBD+Heartbeat)的工作原理是使用浮动 IP 地址,供应用程序连接到当前主服务器。使用 EC2,您无法做到这一点。

现在,如果这在某种程度上是真的,那么您可能必须在应用程序中实现一些循环负载平衡,以便在 MultiMaster 设置中将数据库写入 MySQL 服务器。您可能需要这样做才能确保安全。

您应该深入了解 EC2 负载平衡的工作原理。

您是否在读取从属服务器上使用 EC2 负载平衡?检查这些从属服务器上的服务器负载,以确保负载平衡确实正在发生。

答案2

从 EC2 LB ping 端口 3306 将导致 MySQL 中出现主机连接错误。max_connect_errors 的默认值为 10。您可以任意提高此数字并定期刷新主机,或者您可以在 EC2 LB 中使用不同的健康检查方法。例如,使用 HTTP 端口 80 的简单 PHP MySQL 连接如果成功将抛出 200,否则将抛出 404。

<?php
$link = mysql_connect('localhost', 'user', 'pass');
if (!$link) {
header("HTTP/1.1 404 Not Found");
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

使用此文件的 URL 将 EC2 LB 设置为健康检查 HTTP 端口 80,然后就可以开始了。

相关内容