我的问题很简单。是否可以使用用于应用程序负载平衡的同一 haproxy 实例来对 rds(主服务器和只读副本)进行负载平衡?
这意味着应用程序的 IP 和数据库的 IP 是相同的。mysql 部分的示例配置是什么?
例如,对于应用程序负载平衡,有如下内容:
backend php_app_servers
balance roundrobin
option redispatch
option forwardfor
option httpchk GET /url.php
server php-app1 10.100.2.40:80 weight 16 maxconn 160 check inter 10s
server php-app2 10.81.4.104:80 weight 16 maxconn 160 check inter 10s
server php-app3 10.100.129.162:80 weight 16 maxconn 160 check inter 10s
mysql设置要注意什么?
我遇到的另一个问题是,与通常的 opsworks 实例相比,rds 的性能相当差。问题可能是由应用程序服务器和数据库服务器之间的可用区域差异引起的,但性能下降似乎没有道理。我们在 m3.2xlarge 服务器上有很多数据库。CloudWatch 指标仅显示低到平均水平的 CPU、IO 和内存使用率指标。连接数也随时介于 40 到 60 之间。这种差异可能是由可用区域引起的吗?
答案1
简短的回答是不。
要在 RDS 环境中分割负载,您需要使用来自应用程序的多个连接 - 通常一个连接到只读副本进行读取,一个连接到主服务器进行写入。
这是因为只读副本只是一个读副本,使用 MySQL 主/从复制 - 默认情况下无法接受诸如INSERT
、UPDATE
或DELETE
SQL 语句之类的写入请求,并且即使您翻转开关read_only
,也几乎肯定会破坏(也许是不可逆转的)您的数据库。
如果你绝对必须在 Amazon 中有多主复制,你唯一的选择是在 EC2 实例之上运行你自己的 MySQL 安装,并使用类似Percona XtraDB- MySQL 的一个分支 - 实现双向复制。
性能子问题最好针对亚马逊自己,因为他们将能够查看你的确切设置和实例配置 - 如果你有“很多”数据库,那么你至少会有一个基本的支持合同,点击此处了解支持选项。