Bonjour,

J'ai un problème dans le configuration de cluster au niveau de DataSource.
J'ai deux bases de données (MySQL) Replication Master Master.

Dans la configuration ci-dessous, sans cluster l'application fonctionne correctement.

Configuration de data-source:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
    <bean id="mydataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/zaas?autoReconnect=true"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="validationQuery" value="Select 1"></property>    
    </bean>
Une seule connexion est ouvert d'après la table PROCESSLIST de MySQL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
mysql> show PROCESSLIST;
+----+------+-----------------+------+---------+------+-------+------------------+
| Id | User | Host            | db   | Command | Time | State | Info             |
+----+------+-----------------+------+---------+------+-------+------------------+
| 50 | root | localhost:51096 | zaas | Sleep   |    2 |       | NULL             |
| 51 | root | localhost       | NULL | Query   |    0 | NULL  | show PROCESSLIST |
+----+------+-----------------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
Les problèmes commencent lors de l'ajout de la configuration de cluster comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
    <bean id="mydataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost,192.168.1.161:3306/zaas?autoCommit=true&amp;autoReconnect=true&amp;failOverReadOnly=false"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        <property name="validationQuery" value="Select 1"></property>    
    </bean>
Le problème est que pour chaque requête, une connexion sera ouverte comme le montre la table PROCESSLIST :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> show PROCESSLIST;
+----+------+-----------------+------+---------+------+-------+------------------+
| Id | User | Host            | db   | Command | Time | State | Info             |
+----+------+-----------------+------+---------+------+-------+------------------+
| 51 | root | localhost       | NULL | Query   |    0 | NULL  | show PROCESSLIST |
| 53 | root | localhost:35600 | zaas | Sleep   |   94 |       | NULL             |
| 54 | root | localhost:35609 | zaas | Sleep   |   34 |       | NULL             |
| 55 | root | localhost:60089 | zaas | Sleep   |    5 |       | NULL             |
| 56 | root | localhost:60093 | zaas | Sleep   |    4 |       | NULL             |
| 57 | root | localhost:60094 | zaas | Sleep   |    4 |       | NULL             |
| 58 | root | localhost:60095 | zaas | Sleep   |    4 |       | NULL             |
| 59 | root | localhost:60096 | zaas | Sleep   |    3 |       | NULL             |
| 60 | root | localhost:60097 | zaas | Sleep   |    3 |       | NULL             |
| 61 | root | localhost:60098 | zaas | Sleep   |    3 |       | NULL             |
| 62 | root | localhost:60099 | zaas | Sleep   |    3 |       | NULL             |
| 63 | root | localhost:60100 | zaas | Sleep   |    2 |       | NULL             |
| 64 | root | localhost:60101 | zaas | Sleep   |    2 |       | NULL             |
+----+------+-----------------+------+---------+------+-------+------------------+
13 rows in set (0.00 sec)
Si le nombre de connexions dépasse les 100 connexions (la valeur par défaut de MySQL), nous avons un problème de "Too many connection"

Si nous nous arrêtons la bases de données localhost, le serveur utilise la deuxième base de données mais avec une seule connexion ouverte comme le montre la table PROCESSLIST :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
mysql> show PROCESSLIST;
+-----+------+------------------------------+------+---------+------+-------+------------------+
| Id  | User | Host                         | db   | Command | Time | State | Info             |
+-----+------+------------------------------+------+---------+------+-------+------------------+
| 372 | root | wissem-desktop-2.local:47227 | zaas | Sleep   |   36 |       | NULL             |
| 374 | root | wissem-desktop-2.local:47299 | NULL | Query   |    0 | NULL  | show PROCESSLIST |
+-----+------+------------------------------+------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
Avec une exception dans le log
Est-ce la bonne façon de configurer un cluster ?
L'url de configuration de DataSource : http://dev.mysql.com/doc/refman/5.0/...roperties.html

J'ai essayé plusieurs configurations :
- JNDI
- la configuration c3p0 comme suit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
    <bean id="mydataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"     destroy-method="close">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl"  value="jdbc:mysql://localhost:3306,192.168.1.161:3306/zaas?autoCommit=true&amp;autoReconnect=true&amp;autoReconnectForPools=true&amp;failOverReadOnly=false"/>
        <property name="user" value="root" />
        <property name="password" value="root" /> 
        <!-- these are C3P0 properties -->
        <!-- property name="acquireIncrement" value="${acquireIncrement}" /_-->
        <property name="minPoolSize" value="6" />
        <property name="maxPoolSize" value="10" />
        <property name="maxIdleTime" value="100" />
    </bean>
Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

Merci d'avance pour votre aide.