2015-09-09 14 views
5

Recentemente ho migrato il mio database per supportare la replica con un database di cluster a 2 nodi da mysql a mariadb. Il database è ospitato su un dominio diverso ed è accessibile tramite un ELB, quando indico la mia applicazione a uno dei nodi l'applicazione funziona bene ma quando uso l'url ELB per connettermi con il database, fluttua casualmente e mostra frequentemente l'errore followintTimeout della connessione Mysql nell'applicazione Grails, utilizzando il cluster mariadb galera su ELB

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

Ecco la mia configurazione di origine dati: -

dataSource { 
shard = false 
pooled = true 
driverClassName = "com.mysql.jdbc.Driver" 
//dialect = "com.deerwalk.everest.MySQLUTF8InnoDBDialect" 
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 
} 

qualcuno può identificare che cosa è sbagliato e di fornire una possibile soluzione per esso

+0

puoi provare ad aumentare maxWait e maxAge in DataSourceConfig.groovy poiché potrebbe essere possibile che a volte richieda più del solito. –

+0

hanno già provato tutte le combinazioni possibili – thickGlass

+0

come aggiungere una proprietà autoReconnect alle impostazioni di DataSourceConfig. Il valore predefinito per questo è falso. Potresti impostarlo su true e vedere se questo risolve il tuo problema. –

risposta

4

ho capito il problema, c'era un campo in ELB chiamato idleTimeOut whic h è stato impostato su solo 60 secondi e la query che ha richiesto più di 1 minuto è stata rilasciata in modo imprevisto, dopo aver aumentato il timeout a 600 secondi, il problema non si ripete più. :)

Problemi correlati