Разделение чтения / записи для MySQL кластера с HAproxy

0

У меня есть кластер 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

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

Теги:
reverse-proxy
portforwarding
haproxy

1 ответ

1
Лучший ответ

В 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
  • 0
    Попался. Нет ли способа сделать это без второго IP-адреса?
  • 0
    В этом случае вам придется связываться с разными портами, потому что только с одним IP нет другого способа различить цели.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню