我有一个RoR应用程序,我有EC 2的工作。我有一个主/主复制环境中的两个MySQL服务器实例,以及一些读取从属。 一旦我确定主人正在按我期望的方式工作,我使用以下命令在两个主控人员之间build立了一个EC2负载平衡器:
elb-create-lb db_masters --zones us-east-1c,us-east-1b \ --listener "protocol=tcp,lb-port=3306, instance-port=3306"
当我通过直接查询手动添加数据时,它复制得很好,我可以使用Rails应用程序进行一些基本查询。 但是,当我通过Rails应用程序添加数据时,导轨进程失败,出现此错误:
状态:500内部服务器错误主机'ip-xxxxxxxxxxxx.internal'由于连接错误而被阻塞; 用'mysqladmin flush-hosts'解锁
直接添加数据在两台服务器之间按预期工作,在一台服务器上添加数据总是在另一台上忠实地复制。 所以问题不在于复制设置。
我试图添加这个IP地址作为通配符,特别是这个用户的主机,仍然得到这个错误。 我也尝试了刷新主机,它再次失败之前工作了一段时间。
我的问题是如何正常设置MySQL主/主负载平衡,其次,如何在EC 2上使用弹性负载平衡器来完成。
我曾经在2009年7月13日发布的这个URL上看过一篇博客文章: 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负载平衡吗? 检查这些从服务器上的服务器负载,确保负载平衡实际上正在发生。
从EC2 LB ping端口3306将导致MySQL中的主机连接错误。 max_connect_errors的默认值为10.您可以任意提高此数字并定期刷新主机,也可以在EC2 LB中使用不同的运行状况检查方法。 例如,一个简单的PHP MySQL连接使用HTTP端口80,如果成功将抛出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,您应该很好。