1

对于我们在 Amazon EC2 实例上设置的应用程序,我们使用 MySQL 数据库,安装在 2 个 EC2 实例上,处于主-主复制模式。为了对这些数据库服务器进行负载平衡,我使用了部署在另一个 EC2 实例上的 HAProxy,并进行了配置

listen  mysql <public dns of haproxy>:<port>
mode tcp
balance roundrobin
server mysql-db-s1 <elastic ip of db server1>:<port> maxconn 2000
server mysql-db-s2 <elastic ip of db server2>:<port> maxconn 2000

所有三个实例都分配了弹性 ip,我使用 haproxy 的公共 dns 从我的应用程序连接。但有时我会收到错误

 `com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: C
  ommunications link failure The last packet successfully received from the server was  58,085 milliseconds ago.  
  The last packet sent successfully to the server was 0 milliseconds ago.`

这与我在这里给出的配置有什么关系吗?使用弹性 ip 而不是公共 DNS 更好吗?

4

2 回答 2

1

这本质上不是 HAProxy 问题,因为我在直接连接到其中一个数据库后遇到了同样的错误。稍微调整了数据库并修复了我的应用程序中的一些代码,现在我至少在过去 12 小时内都没有得到这个。感谢您的建议。我会将其中一个数据库移动到另一个可用区。

于 2013-01-31T04:40:13.950 回答
1

由于对大量网站的请求,Web 服务器和数据库的负载平衡概念。所以我们需要知道如何通过负载均衡来处理这么多的请求。

在本文中,我们将讨论使用 HAProxy 的 MySQL 负载平衡概念。假设 MySQL 节点 1 的 IP 地址为 192.168.1.172,MySQL 节点 2 的 IP 地址为 192.168.2.82。

第 1 步:创建 MySQL 用户并安装 MySQL 客户端 我们需要确保 MySQL 服务器必须配置为执行 Master-Master 复制,因为负载平衡涉及读取和写入所有后端。我们首先需要为 HAPorxy 创建一个 MySQL 用户。HAProxy 将使用第一个用户来检查服务器的状态

$ mysql -u root -p -e "INSERT INTO mysql.user (Host,User) values ('192.168.1.172','haproxy_check'); FLUSH PRIVILEGES;"
$ mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'haproxy_root'@'192.168.1.172' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES"

$ sudo apt-get install mysql-client

$ sudo apt-get install haproxy
$ sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/haproxy

$ sudo nano /etc/haproxy/haproxy.cfg 

并将此内容添加到该新配置文件中

global
log 127.0.0.1 local0 notice
user haproxy
group haproxy
defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000

listen mysql-cluster
bind 127.0.0.1:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 192.168.1.172:3306 check
server mysql-2 192.168.2.82:3306 check

第 3 步:测试负载平衡

$ mysql -u haproxy_root -p -e "show variables like 'server_id'"
于 2016-12-29T12:47:02.200 回答