mysql - 使用 HAproxy 拆分 mysql 集群的读/写
问题描述
我在 ubuntu 16.04 上有一个 mysql 集群,想用 haproxy 拆分读/写。
所有连接都将通过端口 80 完成。如果有人使用 XXXX/write 连接到服务器,我希望他被重定向到 1 个特定服务器。到目前为止,这是我的配置,它适用于默认值(除 /write 之外的任何内容),但是当尝试与 /write 连接时,我得到“未知的 MySql 服务器主机”。我的配置如下:
global
log 127.0.0.1 local0 notice
maxconn 2000
user haproxy
group haproxy
defaults
mode tcp
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000
backend read
balance roundrobin
server mysql1 192.168.0.4:3306
server mysql2 192.168.0.5:3306
server mysql3 192.168.0.6:3306
backend write
server mysql1 192.168.0.4:3306
frontend local
bind *:80
acl write url_beg /write
use_backend write if write
default_backend read
谢谢您的帮助!
解决方案
MySQL 连接中没有“URL”,因此url_beg
不可能匹配任何内容。连接到 MySQL 服务器(或代理)仅通过 IP 地址或主机名完成——不是主机名和路径,因为没有路径。检测客户端使用的主机名是不可能的,因为建立连接时没有通过。
为了完成你想要的,你需要两个不同的主机名,指向 HAProxy 服务器上的两个不同的 IP 地址,并且这两个 IP 中的每一个都在它自己的单独frontend
的 withbind
语句中。
frontend read
mode tcp
bind 203.0.113.1:3306
default_backend read
frontend write
mode tcp
bind 203.0.113.2:3306
default_backend write
推荐阅读
- amazon-web-services - 我没有使用的服务的 AWS 账单
- windows-server-2016 - 无法从 Windows Server 2016 Datacenter 卸载 IIS 10
- python - 在内存中处理非常大的字符串
- c++ - 无法在 Windows 终端中运行 C 文件
- java - 如果 Number 为 null,Java 是否有任何优雅的方法可以为 Number 分配默认值
- java - 如何使用 Java 从 ARN 值中解析 Amazon S3 存储桶名称和对象键?
- java - 当我尝试将列表过滤到地图中时出现空指针异常
- python - 从命令行在 google collab 文件中打开新的 python 文件
- javascript - JavaScript Promise 与 Coherent GT
- flutter - Listview 动画切换器