У меня есть кластер mysql на ubuntu 16.04 и вы хотите разделить чтение/запись с помощью haproxy.
Все подключения будут выполняться через порт 80. Если кто-то подключается к серверу с помощью XXXX/write, я хочу, чтобы он был перенаправлен на 1 конкретный сервер. Пока это моя конфигурация, которая работает по умолчанию (ничего, кроме/записи), но при попытке подключения с /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-адреса или имени хоста - не имя хоста и путь, потому что пути нет. Обнаружение имени хоста, используемого клиентом, невозможно, поскольку оно не передается при установлении соединения.
Чтобы выполнить то, что вам нужно, вам понадобятся два разных имени хоста, указывающие на два разных IP-адреса на HAProxy-сервере, и каждый из этих двух IP-адресов в своем отдельном frontend
с оператором bind
.
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