Тайм-аут подключения Mysql в приложении Grails с использованием кластера mariadb galera через ELB

Недавно я перенес свою базу данных для поддержки репликации с базой данных кластера из 2 узлов с mysql на mariadb. База данных размещена в другом домене и доступна через ELB, когда я указываю свое приложение на один из узлов, приложение работает нормально, но когда я использую URL-адрес ELB для подключения к базе данных, он случайным образом колеблется и часто показывает следующую ошибку

Communication Link Failure
could not execute query; nested exception is org.hibernate.exception.JDBCConnectionException: could not execute query

Вот моя конфигурация источника данных: -

dataSource {
shard = false
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
dbCreate = "update" // one of 'create', 'create-drop','update'

properties {
    initialSize=5
    maxActive=50
    minIdle=5
    maxIdle=25
    maxWait = 10000
    maxAge = 10 * 60000
    timeBetweenEvictionRunsMillis=5000
    minEvictableIdleTimeMillis=60000
    validationQuery="SELECT 1"
    validationInterval=15000
    testWhileIdle=true
    testOnBorrow=true
    testOnReturn=false
    jdbcInterceptors = "ConnectionState"
    defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
}

Может ли кто-нибудь определить, что не так, и предоставить возможное решение для этого


person thickGlass    schedule 09.09.2015    source источник
comment
не могли бы вы попробовать увеличить maxWait и maxAge в DataSourceConfig.groovy, поскольку иногда это может занимать больше времени, чем обычно.   -  person Vinay Prajapati    schedule 17.09.2015
comment
уже перепробовал все возможные комбинации   -  person thickGlass    schedule 17.09.2015
comment
как насчет добавления свойства autoReconnect в настройки DataSourceConfig. По умолчанию для него установлено значение false. Возможно, вы захотите установить для него значение true и посмотреть, решит ли это вашу проблему.   -  person Kartikey Joshi    schedule 17.09.2015
comment
это уже есть, я добавил это в свой jdbc:mysql://‹dburl›/‹dbname›?zeroDateTimeBehavior=convertToNull&autoReconnect=true   -  person thickGlass    schedule 17.09.2015


Ответы (1)


Я понял проблему, в ELB было поле с именем idleTimeOut, для которого было установлено значение всего 60 секунд, и запрос, который занял более 1 минуты, неожиданно отбрасывался, после увеличения времени ожидания до 600 секунд проблема больше не воспроизводится. :)

person thickGlass    schedule 21.09.2015