Назад | Перейти на главную страницу

ОШИБКА 2006 (HY000): MySQL Server ушел… (HaProxy / Galera)

Я устанавливаю кластер из 3 серверов MariaDB в конфигурации с несколькими мастерами, которая работает нормально. Я добавил 4-й сервер для HaProxy для балансировки нагрузки и циклического перебора, чтобы у нас была небольшая избыточность, которая также работает, за исключением одной проблемы.

Я вошел в клиент 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 в командной строке ваш timeout client и timeout server слишком короткие.

Они, вероятно, подходят для веб-сервера, обращающегося к БД, потому что соединение открыто только столько, сколько ему нужно, и каждая загрузка страницы создает новое соединение.

Чтобы соединения оставались открытыми в течение 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