2014-02-14 2 views
2

Я использую jdbc:mysql:loadbalance://... в своем приложении Java. jdbc url выглядит следующим образом.MySQL JDBC loadbalance и failover

jdbc:mysql:loadbalance://xxx.xxx.xxx.xx,yyy.yyy.yyy.yyy.../database?zeroDateTimeBehavior=convertToNull&autoReconnect=true

я могу получить соединение одинаково с этого адреса, когда все серверы БД, живы и mysqlds работают. Кроме того, я могу это сделать, когда все серверы БД живут (ping достижимый) и один mysqld не работает (т. Е. Mysqld имеет некоторые проблемы или разбился), а остальные работают.

Но есть проблема, когда один из серверов не жив. Например, я выключил сервер yyy и попытаюсь установить соединение. Механизм отказоустойчивости, похоже, работал правильно, и я наконец смог получить соединение. Однако это заняло слишком много времени (около 75 - 85 секунд).

Как я могу сократить это время ожидания?

+1

Я точно не знаю о mysql, но у меня может быть какое-то отношение к 'connection timeout' –

+1

это много времени ... вы можете найти эту ссылку полезной (может быть, и на форуме) http: // dba.stackexchange.com/questions/1974/mysql-high-availability-failover-and-replication-with-latency – Leo

+1

И BTW нам нужны такие аккуратные, сжатые и хорошо направленные первые вопросы. Добро пожаловать в stackoverflow. Возможно, у вас уже есть, но посетите faq. –

ответ

2

Поскольку @randyumi заявил в комментариях, что мое решение сработало для него, я добавляю это как законный ответ.

Причина задержки в резерве объясняется тем фактом, что mysql пытается подключиться к первому экземпляру базы данных и ждет от него ответа на определенное количество времени, то есть connection timeout. По истечении этого времени ожидания подключения mysql переключается на резерв.

Таким образом, сокращение времени ожидания по умолчанию может уменьшить задержку.