Я настроил репликацию master-master mysql, и теперь я пытаюсь сбалансировать нагрузку на серверы mysql с помощью Haproxy.
Приведенная ниже конфигурация haproxy работает нормально, и она вращает узлы, такие как roundrobin.
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
#chroot /usr/share/haproxy
chroot /etc/haproxy
user haproxy
group haproxy
pidfile /var/run/haproxy.pid
daemon
#debug
#quiet
defaults
log global
#mode http
mode tcp
#option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
#contimeout 5000
contimeout 3600000
#clitimeout 50000
clitimeout 3600000
#srvtimeout 50000
srvtimeout 3600000
listen mysql_cluster 0.0.0.0:3307
mode tcp
balance roundrobin
option mysql-check user root
#option httpchk GET /mysqlchk/?port=3306
option tcpka
server mysql1 192.168.1.107:3306
server mysql2 192.168.1.108:3306
Это НЕ то, что я хотел.
Я хочу Active-Passive
настроить. Например, конфигурация, которая должна отправлять все запросы на 192.168.1.107
по умолчанию и переключение на 192.168.1.108
если 192.168.1.107
не существует. Я видел некоторые ссылки, делающие это, упоминая как резервное копирование но у меня ничего не получилось.
Когда я попытался заменить последние две строки приведенной выше конфигурации на,
server mysql1 192.168.1.107:3306 check port 9200 inter 12000 rise 3 fall 3
server mysql2 192.168.1.108:3306 check port 9200 inter 12000 rise 3 fall 3 backup
Я получаю сообщение об ошибке ниже при перезапуске haproxy, и оно останавливается.
Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!
Jan 20 16:18:18 localhost haproxy[523]: proxy mysql_cluster has no server available!
У кого-нибудь есть надежная рабочая конфигурация haproxy для балансировки нагрузки mysql, чтобы использовать ее на производстве с некоторой статистикой haproxy ?. Мне нужна активно-пассивная конфигурация, о которой я спрашивал выше, какая перенаправление на резервный узел, если узлов нет. Я собираюсь реализовать это на новом производственном сервере ubuntu.
Любая помощь приветствуется !. Спасибо!
У вас работает репликация мастер-мастер, но даже в этом случае я не думаю, что использование HAProxy для балансировки нагрузки MySQL - правильный выбор.
HAProxy великолепен, но при работе в качестве балансировщика нагрузки на уровне TCP он не может иметь никакого представления о состоянии SQL. Поведение при длительных транзакциях SQL неясно и подвержено ошибкам; это то, что вас не должно устраивать.
Ваша установка мастер-мастер имеет емкость записи одного узла (так как все операции записи необходимо дублировать). Таким образом, то, что вы увеличиваете с помощью своей установки, - это чтения и соединения. Более распространенная и, по моему мнению, намного лучшая установка:
Что-то вроде Прокси MySQL или другое промежуточное ПО для обработки соединений также может хорошо работать в вашем случае.
«Высокопроизводительный MySQL» действительно хорошая книга с практическими советами по масштабированию MySQL. Если вы прочтете эту книгу, я думаю, вы более четко увидите, какие конструкции наиболее распространены и проверены для вашей конкретной ситуации.
Этот конфиг делает именно то, что вы хотите :)
global
log 127.0.0.1 local0
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 4000
clitimeout 50000
srvtimeout 30000
stats enable
stats scope .
frontend mysql_cluster
bind 3.3.3.3:3307
#bind *:3307
default_backend mysql_cluster
backend mysql_cluster
mode tcp
option mysql-check
balance roundrobin
server db01_1.1.1.1 1.1.1.1:3306 weight 1 check port 3306
server db02_2.2.2.2 2.2.2.2:3306 weight 100 check port 3306 backup
listen stats 3.3.3.3:10000
mode http
option httpclose
balance roundrobin
stats uri /
stats realm Haproxy\ Statistics
#stats auth user:pass
Для истинного кластера MySQL master-master в сочетании с haproxy попробуйте использовать кодерство Galera или percona XtraDB Cluster.
Удалите контрольный порт 9200s, тогда ваш вариант резервного копирования должен работать. Кажется, вы смешиваете разные примеры, mysql-check работает на стандартном порту, хотя есть еще один распространенный пример, который использует проверку http, где они настраивают процесс xinetd, отвечающий на порт 9200, который запускает отдельный сценарий проверки.