Frage

Ich versuche, einen hohen verfügbaren MySQL -Cluster mit einer Master- / Slave -Konfiguration einzurichten. Ich möchte, dass der Sklave Meister wird (zB nicht schreibgeschützt, aber schriftlich), wenn der erste Knoten herunterkommt (wie in dieser Frage: https://stackoverflow.com/questions/9409111/database-fail-over-jboss-data-sources)

Ich verwende also eine Datenquelle mit Connector/J -Treibern:

<datasources>

    <local-tx-datasource>
    <jndi-name>alfresco-datasource</jndi-name>
    <connection-url>jdbc:mysql://10.1.2.13,10.1.2.14:3306/alfresco</connection-url>
    <driver-class>org.gjt.mm.mysql.Driver</driver-class>
    <user-name>alfresco</user-name>
    <password>alfresco</password>
    <exception-sorter-class-name>
        org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter
    </exception-sorter-class-name>


    <connection-property name="readOnly">false</connection-property>
    <failOverReadOnly>false</failOverReadOnly>

    <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>

    <metadata>
      <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

Ich habe viele, viele Beiträge hier gelesen, die sich darüber befassen, aber ich bin mir noch nicht sicher, ob dies ausreicht (in der Tat bin ich sicher, dass es nicht so ist;)).

Um meine Konfiguration zu testen, stoppe ich einfach die erste Instanz:

service mysql stop

Sobald meine Bewerbung (Alfresco, die sich auf Activiti stützt), die Ibatis verwendet, erkennen, dass es einen Fehler gibt, überflutet mich die Nachricht, dass die Verbindung verloren geht / abgelehnt ist.

    GRAVE: Error while closing command context
    org.apache.ibatis.exceptions.PersistenceException: 
    ### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    The last packet successfully received from the server was 1 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.
    ### The error may exist in org/activiti/db/mapping/entity/Job.xml
    ### The error may involve org.activiti.engine.impl.persistence.entity.JobEntity.selectNextJobsToExecute_mysql
    ### The error occurred while executing a query
    ### SQL: select *      from ACT_RU_JOB      where (RETRIES_ > 0)       and (DUEDATE_ is null or DUEDATE_ <= ?)       and (LOCK_OWNER_ is null or LOCK_EXP_TIME_ <= ?)
    ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

    The last packet successfully received from the server was 1 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.
        at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:8)
        at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:77)
        at org.activiti.engine.impl.db.DbSqlSession.selectList(DbSqlSession.java:191)
        at org.activiti.engine.impl.persistence.entity.JobManager.findNextJobsToExecute(JobManager.java:97)
        at org.activiti.engine.impl.cmd.AcquireJobsCmd.execute(AcquireJobsCmd.java:49)
        at org.activiti.engine.impl.cmd.AcquireJobsCmd.execute(AcquireJobsCmd.java:32)
        at org.activiti.engine.impl.interceptor.CommandExecutorImpl.execute(CommandExecutorImpl.java:24)
        at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:42)
        at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:42)
        at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
        at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:40)
        at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:33)
        at org.activiti.engine.impl.jobexecutor.JobAcquisitionThread.run(JobAcquisitionThread.java:63)
    Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


[...]


Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2552)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3002)
    ... 45 more
09:54:00,270 WARN  [LocalManagedConnectionFactory] Destroying connection that is not valid, due to the following exception: com.mysql.jdbc.JDBC4LoadBalancedMySQLConnection@33dd0edd
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 31 875 milliseconds ago.  The last packet sent successfully to the server was 0 milliseconds ago.

[...]

09:54:00,355 WARN  [JBossManagedConnectionPool] Destroying connection that could not be successfully matched: org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener@34775a91[state=DESTROYED mc=org.jboss.resource.adapter.jdbc.local.LocalManagedConnection@244f22a3 handles=0 lastUse=1339055604851 permit=false trackByTx=false mcp=org.jboss.resource.connectionmanager.JBossManagedConnectionPool$OnePool@3d01c1a context=org.jboss.resource.connectionmanager.InternalManagedConnectionPool@53e4f0ea xaResource=org.jboss.resource.connectionmanager.TxConnectionManager$LocalXAResource@476b0df4 txSync=null]
09:54:01,702 ERROR [STDERR] Thu Jun 07 09:54:01 CEST 2012 WARN: Connection to primary host failed

EXCEPTION STACK TRACE:



** BEGIN NESTED EXCEPTION ** 

Usw ...

Ich hatte zuvor ein Problem, da mein App -Server -Benutzer (alfresco@10.1.2.11) in der Datenbank nicht gewährt wurde. Aber es ist vorerst entschlossen.

Hier meine MySQL -Konfigurationsdateien (falls ich etwas vergessen habe):

Master (10.1.2.13) [mysqld] user = s-mysql port = 3306-basiertiR =/app/mysql/aktuell datadir =/app/data/mysql log-eRror =/app/log/mysql/master log =/app/ log/mysql/query.log

#clustering
server_id       =1
log-bin         =/app/log/mysql/log-bin/log-bin.master
innodb_flush_log_at_trx_commit=1
sync_binlog     =1
skip-slave-start
expire_logs_days=10

binlog-do-db    =alfresco

Sklave (10.1.2.14)

[mysqld]
user            = s-mysql
port            = 3306
basedir         =/app/mysql/current
datadir         =/app/data/mysql
log-error       =/app/log/mysql/slave
log             =/app/log/mysql/query.log

# Clustering
server_id       =2
log-bin         =/app/log/mysql/log-bin/log-bin.slave
expire_logs_days=10
skip-slave-start
relay-log-index =/app/log/mysql/log-relay/relay-log.slave.index
relay-log       =/app/log/mysql/log-relay/relay-log.slave

binlog-do-db    =alfresco
replicate-do-db =alfresco

Sklaven Privilegien

SHOW GRANTS for 'alfresco'@'10.1.2.11';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for alfresco@10.1.2.11                                                                                               |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'alfresco'@'10.1.2.11' IDENTIFIED BY PASSWORD     '*F9F457310EF9364D42AABE6D8C24A21712C000B5' |
| GRANT ALL PRIVILEGES ON `alfresco`.* TO 'alfresco'@'10.1.2.11' WITH GRANT OPTION                                    |
+-----------------------------------------------------------------------------------------------------------------+

Könnte mir jemand Hinweise geben, um dieses Problem zu lösen?

War es hilfreich?

Lösung

In der Tat scheint es, dass ich einen Parameter "vergessen" habe

<autoReconnect>true</autoReconnect>

Ich sagte mit Vorsichtsmaßnahme vergessen, denn wie der pro Doc sagt: https://community.jboss.org/wiki/setupamysqldatasource

Automatische Verbindung wieder herstellen

WARNUNG: Aktivieren Sie die automatische Verbindung nicht, wenn Sie verwaltete Transaktionen verwenden

Die automatische Wiederverbindung bewahrt den Transaktionszustand in der Datenbank nicht.

Es ist in Ordnung, wenn Sie immer Auto-commit = true verwenden.

Ich war mir nicht sicher, ob ich es aktivieren konnte ... und ich frage immer noch.

BEARBEITENSplit Thread, weil meine erste Frage (automatisch) beantwortet wird. Ich werde einige Informationen über Alfresco, Auto Commit und verwaltete Transaktion hinzufügen, wenn ich einige bekomme.

Problem mit dem Schreiben von Schreiben: https://stackoverflow.com/questions/10945261/jboss-alfresco-cannot-write-on-lave-after-failover

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top