Разделение чтения / записи для MySQL кластера с HAproxy - PullRequest
0 голосов
/ 10 мая 2018

У меня есть кластер mysql в Ubuntu 16.04 и я хочу разделить чтение / запись с помощью haproxy.

Все соединения будут осуществляться через порт 80. Если кто-то подключается к серверу с помощью X.X.X.X / 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

Спасибо за помощь!

1 Ответ

0 голосов
/ 10 мая 2018

В соединении 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
...