Я устанавливаю кластер 3 серверов MariaDB в мультиосновной установке, которая хорошо работает. Я добавил 4-й сервер для HaProxy для загрузки баланса и циклического алгоритма так, чтобы у нас могло быть немного дублирования, которое также работает, за исключением 1 проблемы.
Я зарегистрирован в клиент MySQL на сервере HaProxy, выполняющем следующий запрос:
show variables like 'server_id';
Я получаю результаты, но если я ожидаю сроком на 5 или больше секунд и выполняю запрос снова, я получаю следующую ошибку:
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 52
Current database: *** NONE ***
Право после этого, я получаю результат с другим server_id, который указывает, что выравнивание нагрузки работает. Проблема, которую это вызывает, состоит в том, что, когда я пытаюсь соединиться из своего приложения Spring/Java, я могу выполнить запросы в течение того короткого промежутка времени и отбрасываний соединения. Я фигурирую, могу ли я решить его на сервере HaProxy, который решил бы другие проблемы, которые я имею.
Править: ДОБАВЛЕННЫЙ HAPROXY.CFG
global
log 127.0.0.1 local0 notice
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
user haproxy
group haproxy
maxconn 4096
daemon
defaults
log global
retries 2
timeout connect 3000
timeout server 5000
timeout client 5000
listen mysql-cluster
bind 0.0.0.0:3306
mode tcp
option tcpka
option mysql-check user haproxy_check
balance roundrobin
server mysql-1 192.168.10.241:3306 check inter 1000 rise 3 fall 1
server mysql-2 192.168.10.242:3306 check inter 1000 rise 3 fall 1
server mysql-3 192.168.10.243:3306 check inter 1000 rise 3 fall 1
listen stats
bind 192.168.10.211:8080
mode http
stats enable
stats uri /
stats realm Strictly\ Private
stats auth USER:PASSWORD
Для продолжительного сеанса, который бездействует, например, при запуске mysql
в командной строке, ваш клиент тайм-аута
и сервер тайм-аута
слишком короткие.
Они, вероятно, подходят для веб-сервера, обращающегося к базе данных, потому что соединение открыто только столько, сколько ему нужно, и каждая загрузка страницы создает новое соединение.
Чтобы разрешить соединения, чтобы оставаться открытыми в течение 10 минут, измените
timeout server 5000
timeout client 5000
на
timeout server 10m
timeout client 10m
. Если хотите, можете подняться еще выше. У меня есть кластеры RDS с 7-часовым тайм-аутом, и он отлично работает.
В документации есть более подробная информация о клиенте тайм-аута , сервере тайм-аута и короткометражке используется для спецификатора времени .
Попробуйте настроить max_allowed_packet
в mariaDB. Вот относительная ссылка, которая может решить вашу проблему.
http://stackoverflow.com/questions/10474922/error-2006-hy000-mysql-server-has-gone-away