activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From SuoNayi <suonayi2...@163.com>
Subject Reply:Re: ActiveMQ Master/slave with MySQLCluster backend
Date Tue, 31 Jan 2012 15:09:57 GMT
I had set up two brokers based on master-slave mode.
What I'm suffering are the two problems:
1, NDB store engine of Mysql cluster does not support distributed lock
    so brokers based on master-slave mode fails to get the exclusive lock and finally two
masters are bringing up.
2, With the store of Mysql cluster the performance is slow than the single mysql
    and from time to time the producer blocks for several mintues and resumes  to send messages.
    Because no error logs and dead locks are found in brokers and mysql nodes
    So I have to give up the store of mysql cluster.

At 2012-01-31 21:13:53,"Gary Tully" <gary.tully@gmail.com> wrote: >This need some
work. >On 5.6, a single broker can deal with a failover of the jdbc store. >The difficulty
is locking in the master/slave case, or peer cluster case. > >The current lock impl
(who's job it is to get an exclusive lock on the >store) treats failure of a lock as a
fatal event and stops the broker. > >What would be great if you could describe how you
think it should >work, or how you would like it to work. > >I think this is something
we can/should support. > >On 30 January 2012 16:11, Christian Hilgers <Christian.Hilgers@consol.de>
wrote: >> Hi, >> >> I am trying to setup a redundant ActiveMQ environment
using >> * ActiveMQ 5.5.1 >> * MySQL Cluster  5.1.47-ndb-7.1.5-cluster-gpl >>
* on Solaris 10 zones >> * Java: >>  Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
>>  Java HotSpot(TM) Server VM (build 20.2-b06, mixed mode) >> * An application
deployed in a Glassfish is using the AMQ >> >> >> T
 he application uses failover connect to select the ActiveMQ master. >> This is working
as expected. For all further tests we disabled one >> ActiveMQ. ActiveMQ 1 and MySQL
Node 1 are on the same Solaris Zone. >> Same is true for ActiveMQ 2 and MySQL Node 2.
>> >> To make it more simple this is the setup used for testing MySQL Failover.
>> ActiveMQ 1--+--  MySQL Node 1 192.168.1.30 >>            ! >>       
    !----MySQL Node 2 192.168.1.31 >> >> MySQL Node 1 and Node 2 are setup as
Cluster and I made sure the >> tables get created with NDBCLUSTER engine. >> >>
We connect to the MySQL Nodes as follows: >>  <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource"
>> destroy-method="close"> >>    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
>>    <property name="url" >> value="jdbc:mysql://192.168.1.30,192.168.1.31/activemq?relaxAutoCommit=true&amp;autoRe
>> connect=true&amp;failOverReadOnly=false"/> >>    <property name="username"
value="XXX"/> 
 >>    <property name="password" value="YYY"/> >>    <property name="initialSize"
value="10"/> >>    <property name="maxActive" value="50"/> >>    <property
name="maxIdle" value="15"/> >>    <property name="poolPreparedStatements" value="true"/>
>>  </bean> >> >> >> From http://activemq.apache.org/jdbc-master-slave.html
I would expect >> that AMQ does a failover from Node 1 to Node 2 instead of doing a
restart >> cycle. >> >> What we see is, AMQ chooses a primary database node
and as long as we >> stop/start >> the secondary node, nothing happens. If we
stop the primary node, with >> secondary >> running the logs show: >> 2012-01-30
13:08:25,121 | ERROR | Failed to update database lock: >> com.mysql.jdbc.exceptions.jdbc4.Communication
>> sException: Communications link failure >> >> The last packet successfully
received from the server was 30,005 >> milliseconds ago.  The last packet sent succes
>> sfully to the server was 6 milliseconds ago. | >> org.apache.activemq.store.jd
 bc.DefaultDatabaseLocker | ActiveMQ >> Cleanup Timer >> com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
Communications link >> failure >> ... >> 2012-01-30 13:08:25,125 | INFO
 | No longer able to keep the exclusive lock >> so giving up being a master | org.a
>> pache.activemq.store.jdbc.JDBCPersistenceAdapter | ActiveMQ Cleanup Timer >>
(This is from our 5.6-Snapshot test today, Logs from 5.5.1 look similar) >> >>
I did test  with AMQ 5.6 Snapshot from today but no change in behaviour was >> seen.
>> >> We tried with >> jdbc:mysql:loadbalance://192.168.1.30,192.168.1.31/activemq?...
same >> behaviour. >> We tried with adding other parameter or changing existing
ones like >> * setting maxIdle=0 to force a opening a new connection upon each request.
>> * adding testOnBorrow=true >> * adding "validationQuery" value="select 'test'
from dual" >> No real improvment was visible. >> >> Searching the web and
asking in IRC came to >> https://issues.apache.org/jira/browse/AMQ
 -1780 >> https://issues.apache.org/jira/browse/AMQ-2497 >> they do indicate it
should work, >> >> whereas https://issues.apache.org/jira/browse/AMQ-2414 sounds
more like it >> cannot >> work by design. >> >> I can attach the activemq.xml
if wanted or needed, I can provide logfiles >> and >> we can test on the environment.
>> >> Questions: >> 1. Is anyone here using such a setup successfully? No
Broker restarts but >> JDBC failover? >> 2. What should I attach to this thread?
>> >> Kind regards >> >> Christian Hilgers >> -- >> Christian
Hilgers                  |ConSol* >> Tel.   +49.2102.994-483            |Consulting&Solutions
Software GmbH >> Fax    +49.2102.994-411            |Berliner Str. 101, 40880 Ratingen
>> email: Christian.Hilgers@consol.de |WWW: http://www.consol.de >> > >
> >--  >http://fusesource.com >http://blog.garytully.com
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message