我意识到如果数据库服务器是外部的且是独立的,那么使用 HAPROXY 来处理数据库和服务器会更好,但是是否有可能让 2 台服务器相互复制数据库和文件并由 1 台 haproxy 服务器进行负载平衡?在监听两者的同时,让我的 haproxy 文件工作时遇到了一些麻烦,到目前为止,情况如下:
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
timeout connect 5000
timeout client 10000
timeout server 10000
listen servers 0.0.0.0:80
mode http
stats enable
balance roundrobin
option httpclose
option forwardfor
server server-1 1.1.1.1:80 check
server server-2 2.2.2.2:80 check
listen mysql-cluster
bind 127.0.0.1:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 1.1.1.1:3306 check
server mysql-2 2.2.2.2:3306 check
答案1
是的,您可以使用 HAProxy 来平衡 MySQL TCP 连接,但它不像 HTTP 连接那么简单。
- 您需要一个更好的状态检查器。类似于 xinetd 下的脚本,它将检查数据库是否正常工作,如果不起作用则返回 http 代码 200 或 503。如果没有它,HAProxy 将只能检测端口是否打开。
- Roundrobin 平衡将连接分散到两台服务器之间。最好使用源哈希来将会话保持在同一台服务器上。
- 您将需要主主复制,但这是一个灾难,总有发生的地方。也许,使用主从复制和主动备份 haproxy 后端会更好。
- 主-主将与 Galera 复制很好地配合。也许这是一条可行的路。
- 您可能还想使用 Pacemaker 或 Keepalived 而不是 HAProxy 来建立 HA 启用主从 MySQL 设置。
- 你也可以看看 MySQL 代理
无论如何,这并不容易,需要做很多工作才能做好。MySQL 可能非常古怪。