2015-09-09 17 views
5

Ich habe gerade meine Datenbank zur Unterstützung der Replikation mit einer 2-Knoten-Cluster-Datenbank von MySQL zu Mariadb migriert. Die Datenbank wird über eine andere Domäne gehostet und über einen ELB aufgerufen. Wenn ich meine Anwendung auf einen der Knoten lege, funktioniert die Anwendung gut, aber wenn ich die ELB-URL zur Verbindung mit der Datenbank verwende, schwankt sie zufällig und zeigt häufig den folgenden Fehler anMysql Verbindung Timeout in Grails-Anwendung, mit Mariadb Galera-Cluster über ELB

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

Hier ist meine Datenquelle-Konfiguration: -

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 
} 

Kann jemand bitte identifizieren, was ist falsch und eine mögliche Lösung bietet dafür

+0

können Sie bitte versuchen, mit maxWait und maxAge in der DataSourceConfig.groovy zu erhöhen, wie es möglich ist, es dauert manchmal mehr als die übliche Zeit. –

+0

haben bereits alle möglichen Kombinationen ausprobiert – thickGlass

+0

wie über das Hinzufügen einer AutoReconnect-Eigenschaft zu Ihren DataSourceConfig-Einstellungen. Der Standardwert dafür ist falsch. Vielleicht möchten Sie es auf true setzen und sehen, ob das Ihr Problem löst. –

Antwort

4

ich das Problem herausgefunden, war es ein Feld in ELB namens idleTimeOut whic h wurde auf nur 60 Sekunden eingestellt, und die Abfrage, die länger als 1 Minute dauerte, wurde unerwartet gelöscht. Nach dem Erhöhen des Zeitlimits auf 600 Sekunden wird das Problem nicht mehr repliziert. :)