forum.bitel.ru
http://forum.bitel.ru/

mysql slave host down -> виснет сервер биллинга
http://forum.bitel.ru/viewtopic.php?f=19&t=5020
Страница 1 из 1

Автор:  Cromeshnic [ 24 янв 2011, 08:45 ]
Заголовок сообщения:  mysql slave host down -> виснет сервер биллинга

Решили ребутнуть сервер со slave-базой, в результате сервер биллинга просто повис.

Выдаёт кучу соответствующих ошибок:
java.net.NoRouteToHostException: No route to host
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

После рестарта сервера биллинга он заработал, но с тормозами, пока не поднялся slave.

Вопрос к разработчикам: как правильно в рабочем режиме выключать slave? Сначала гасить mysql, потом ждать определенное время?
И почему сервер виснет при недоступности слейва?

Автор:  skyb [ 24 янв 2011, 09:18 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

он виснет потому что пытается достучаться до него, у меня та же проблема была.
а что значит выключить слейв?

Автор:  Cromeshnic [ 24 янв 2011, 10:06 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Физически вырубить хост :)

Автор:  skyb [ 24 янв 2011, 10:11 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

я как делал - вырубал в конфигах биллинга все что связано со слейвом и ребутал это все, потом физически вырубал. :)

Автор:  Cromeshnic [ 24 янв 2011, 11:06 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Нет, просто физически ребутал.
Как бы ожидалось, что при недоступности слейва биллинг просто перейдет на основную базу.

Автор:  skyb [ 24 янв 2011, 11:08 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

не отрабатывает конфиг о том что при не доступности отключать слейв?

Автор:  Cromeshnic [ 24 янв 2011, 12:00 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Отрабатывает, письма шлёт. Но висит при этом. Видимо при недоступности хоста каждый вызов getDBSlaveConnectionFromPool() выполняется довольно долго. Но это так, моя версия.

Автор:  skyb [ 24 янв 2011, 12:47 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

ненене, я говорю про то что он должен отключать слейв при недоступности

Автор:  Cromeshnic [ 24 янв 2011, 12:59 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Цитата:
ID события: db.slave.connect.error
Время регистрации события: 24.01.2011 10:23:37

Ошибка соединения с Slave базой данных: null.
Вместо соединения с данной базой было использовано соединение с Master базой.
Необходимо срочно восстановить соединение с Slave базой null.

java.lang.NullPointerException
at ru.bitel.bgbilling.server.util.DefaultServerSetup.getDBSlaveConnectionFromPool(DefaultServerSetup.java:566)
at ru.bitel.bgbilling.server.util.DefaultServerSetup.getDBSlaveConnectionFromPool(DefaultServerSetup.java:510)
at bitel.billing.server.admin.eventbus.BillingEventBus$ListenerThread.run(BillingEventBus.java:188)


Цитата:
ID события: db.slave.connect.error
Время регистрации события: 24.01.2011 10:23:03

Ошибка соединения с Slave базой данных: 1.
Необходимо срочно восстановить соединение с Slave базой 1.

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.SocketException
MESSAGE: java.net.NoRouteToHostException: No route to host

STACKTRACE:

java.net.SocketException: java.net.NoRouteToHostException: No route to host
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:276)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2641)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:94)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:300)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:816)
at ru.bitel.bgbilling.server.util.DefaultServerSetup.getSlaveConnectionFromPool(DefaultServerSetup.java:768)
at ru.bitel.bgbilling.kernel.admin.server.errorlog.DatabaseCheckTask.checkForDisable(DatabaseCheckTask.java:103)
at ru.bitel.bgbilling.kernel.admin.server.errorlog.DatabaseCheckTask.doTask(DatabaseCheckTask.java:23)
at bitel.billing.server.admin.errorlog.AlarmSender.run(AlarmSender.java:238)


** END NESTED EXCEPTION **



Last packet sent to the server was 0 ms ago.
at com.mysql.jdbc.Connection.createNewIO(Connection.java:2707)
at com.mysql.jdbc.Connection.<init>(Connection.java:1531)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at org.apache.commons.dbcp.DriverManagerConnectionFactory.createConnection(DriverManagerConnectionFactory.java:94)
at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:300)
at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:816)
at ru.bitel.bgbilling.server.util.DefaultServerSetup.getSlaveConnectionFromPool(DefaultServerSetup.java:768)
at ru.bitel.bgbilling.kernel.admin.server.errorlog.DatabaseCheckTask.checkForDisable(DatabaseCheckTask.java:103)
at ru.bitel.bgbilling.kernel.admin.server.errorlog.DatabaseCheckTask.doTask(DatabaseCheckTask.java:23)
at bitel.billing.server.admin.errorlog.AlarmSender.run(AlarmSender.java:238)


Автор:  Администратор [ 24 янв 2011, 13:03 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Там если уже есть соединение созданное с БД в пуле, то при отваливании MySQL и вызове этого коннекта повисает на тестовом запросе SELECT 1.
Возможно, нет в Java возможности распознать, что коннект TCP закрыт с другой стороны.. Или в драйвере это не предусмотрено.
Решили проблему установкой для тестового запроса таймаута на выполнение и + опции коннекта &queryTimeoutKillsConnection=true
Т.е. если по таймауту не отвечает коннект, то соединение считается неактивным. И коннект возвращается как null с подхватом мастер - БД.
Только:
1) это сделали только для 5.2 пока.
2) нужно будет обновить версию MySQL.
В ближайшее время тогда постараемся портировать на 5.1.

Автор:  Cromeshnic [ 24 янв 2011, 13:45 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Ок, спасибо.

Автор:  Администратор [ 25 фев 2011, 13:26 ]
Заголовок сообщения:  Re: mysql slave host down -> виснет сервер биллинга

Обновления выложены. Нужно поставить update_lib для BGBIllingServer, чтобы обновилась библиотека mysql.jar.
В прочих приложениях можно обновить её вручную.
И в URL подключения к БД везде нужно выставить опцию queryTimeoutKillsConnection=true.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/