Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-23 Thread Dennis Plöger|getit GmbH
Hi!

> If it's not too much trouble maybe you could send a short message to haproxy
> list describing how you fixed the problem. This might help someone else who
> reads the list archives.

Yes, Jarno. You're absolutely right.

The main problem of this was the enormous default idle timeout of Hybris - 50 
minutes. Once I configure all timeouts (timeout connect, timeout client, 
timeout server. Though I'm actually not sure, if I really needed ALL timeouts) 
to reflect that, everything worked fine.

Thanks again for the help!

Kind regards

Dennis

-- 
Dennis Plöger
Systemadministrator und Berater

--
Besuchen Sie uns auf unseren nächsten Veranstaltungen:
- J.Boye Web- und Intranetkonferenz, 04.-06.11.2014, Aarhus
- konaktiva, 11.11.2014, Halle 3 B / Stand G4 (Westfalenhallen), Dortmund
--

getit - Gesellschaft für Technologie- und Informationstransfer mbH
Emil-Figge-Straße 76-80
44227 Dortmund

Tel: +49.231.9742.7846
Fax: +49.231.9742.356
http://www.getit.de

Amtsgericht Dortmund, HRB-Nr. 26548

Geschäftsführung: 
Dr. Thomas Krämerkämper (Vorsitzender) 
Christoph Hecker
Dietmar Müller
Leonardo Musso



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-17 Thread Dennis Plöger | getit GmbH
Hello!

> Oh. Thanks for mentioning that page (I somehow never got there). I now saw, 
> that
> the connections are dropped with "cD" - meaning, that HAproxy thought, the
> server would be down.

Getting back on that. I understand, that "D" means that HAProxy thinks, the 
server is down. Shouldn't hatop show something then that indicates a downtime 
on the server? Because hatop shows nothing in that direction. All's up, no 
downtime.

Kind regards

Dennis

-- 
Dennis Plöger
Systemadministrator und Berater

--
Besuchen Sie uns auf unseren nächsten Veranstaltungen:
- konaktiva, 11.11.2014, Halle 3 B / Stand G4 (Westfalenhallen), Dortmund
--

getit - Gesellschaft für Technologie- und Informationstransfer mbH
Emil-Figge-Straße 76-80
44227 Dortmund

Tel: +49.231.9742.355
Fax: +49.231.9742.356
http://www.getit.de

Amtsgericht Dortmund, HRB-Nr. 26548

Geschäftsführung:
Dr. Thomas Krämerkämper (Vorsitzender)
Christoph Hecker



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-17 Thread Dennis Plöger | getit GmbH
Hi!

> Maybe try with "no option dontlognull" ?
> Are all connections in logs logged with "normal --"  session state ?
> http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#8.5

Oh. Thanks for mentioning that page (I somehow never got there). I now saw, 
that the connections are dropped with "cD" - meaning, that HAproxy thought, the 
server would be down.

Could that be something in conjunction with the Percona-check on port 9200?

Kind regards

Dennis

-- 
Dennis Plöger
Systemadministrator und Berater

--
Besuchen Sie uns auf unseren nächsten Veranstaltungen:
- konaktiva, 11.11.2014, Halle 3 B / Stand G4 (Westfalenhallen), Dortmund
--

getit - Gesellschaft für Technologie- und Informationstransfer mbH
Emil-Figge-Straße 76-80
44227 Dortmund

Tel: +49.231.9742.355
Fax: +49.231.9742.356
http://www.getit.de

Amtsgericht Dortmund, HRB-Nr. 26548

Geschäftsführung:
Dr. Thomas Krämerkämper (Vorsitzender)
Christoph Hecker



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-17 Thread Jarno Huuskonen
Hi,

On Wed, Oct 15, Dennis Plöger | getit GmbH wrote:
> Hi!
> 
> > Hmm... I just understood, that we're probably talking about different things
> > here. As you can see in my configuration, I haven't specify a maxconn value.
> > From the configuration documentation I didn't understand, what the default
> > value is. I just updated my configuration based on this tutorial and will 
> > try
> > again:
> > http://www.percona.com/doc/percona-xtradb-cluster/5.5/howtos/haproxy.html
> 
> Same error (nothing in the logs however). My haproxy.cfg now looks like this:
> option  dontlognull

Are you using any kind of connection pool on hybis/jdbc ? (Hybris
opens/keeps open multiple connections and reuses the open connection).
Does the connection pool do any connection checking (periodically checks
that the connection is still alive) ? 
(Maybe pool opens connections that sit idle for too long -> haproxy
closes idle connection (50s?))

Maybe try with "no option dontlognull" ?
Are all connections in logs logged with "normal --"  session state ?
http://cbonte.github.io/haproxy-dconv/configuration-1.5.html#8.5

-Jarno

> retries 3
> option  redispatch
> maxconn 2000
> timeout connect 5
> timeout client 5
> timeout server 5
> 
> listen mysql-cluster 127.0.0.1:3306
> mode tcp
> balance roundrobin
> option httpchk
> server shopclusterdb1 10.10.42.82:3306 check port 9200 inter 12000 
> rise 3 fall 3
> server shopclusterdb2 10.10.42.83:3306 check port 9200 inter 12000 
> rise 3 fall 3 backup
> 
> Kind regards
> 
> Dennis
> 
> -- 
> Dennis Plöger
> Systemadministrator und Berater
> 
> --
> Besuchen Sie uns auf unseren nächsten Veranstaltungen:
> - konaktiva, 11.11.2014, Halle 3 B / Stand G4 (Westfalenhallen), Dortmund
> --
> 
> getit - Gesellschaft für Technologie- und Informationstransfer mbH
> Emil-Figge-Straße 76-80
> 44227 Dortmund
> 
> Tel: +49.231.9742.355
> Fax: +49.231.9742.356
> http://www.getit.de
> 
> Amtsgericht Dortmund, HRB-Nr. 26548
> 
> Geschäftsführung:
> Dr. Thomas Krämerkämper (Vorsitzender)
> Christoph Hecker

-- 
Jarno Huuskonen



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-15 Thread Dennis Plöger | getit GmbH
Hi!

> Hmm... I just understood, that we're probably talking about different things
> here. As you can see in my configuration, I haven't specify a maxconn value.
> From the configuration documentation I didn't understand, what the default
> value is. I just updated my configuration based on this tutorial and will try
> again:
> http://www.percona.com/doc/percona-xtradb-cluster/5.5/howtos/haproxy.html

Same error (nothing in the logs however). My haproxy.cfg now looks like this:

global
log /dev/log local1
log /dev/log local0 debug
chroot /var/lib/haproxy
maxconn 4096
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m

defaults
log global
modehttp
option  tcplog
option  dontlognull
retries 3
option  redispatch
maxconn 2000
timeout connect 5
timeout client 5
timeout server 5

listen mysql-cluster 127.0.0.1:3306
mode tcp
balance roundrobin
option httpchk
server shopclusterdb1 10.10.42.82:3306 check port 9200 inter 12000 rise 
3 fall 3
server shopclusterdb2 10.10.42.83:3306 check port 9200 inter 12000 rise 
3 fall 3 backup

Kind regards

Dennis

-- 
Dennis Plöger
Systemadministrator und Berater

--
Besuchen Sie uns auf unseren nächsten Veranstaltungen:
- konaktiva, 11.11.2014, Halle 3 B / Stand G4 (Westfalenhallen), Dortmund
--

getit - Gesellschaft für Technologie- und Informationstransfer mbH
Emil-Figge-Straße 76-80
44227 Dortmund

Tel: +49.231.9742.355
Fax: +49.231.9742.356
http://www.getit.de

Amtsgericht Dortmund, HRB-Nr. 26548

Geschäftsführung:
Dr. Thomas Krämerkämper (Vorsitzender)
Christoph Hecker



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-14 Thread Dennis Plöger | getit GmbH
Hi!

Me again.

> Kinda (see my haproxy.cfg below). You're right. I will check out the logging
> options and optimize logging.

I just checked the configuration options again and saw, that I'm already 
logging enough (I think). However, no errors are logged.

>> What kind of server / client timeouts do you use in haproxy or are
>> you reaching maxconn etc. limits ?
> 
> I don't think, I reach maxconn, because the maximum connections HATop shows 
> are
> 23 and my limit is around 2000.

Hmm... I just understood, that we're probably talking about different things 
here. As you can see in my configuration, I haven't specify a maxconn value. 
From the configuration documentation I didn't understand, what the default 
value is. I just updated my configuration based on this tutorial and will try 
again: http://www.percona.com/doc/percona-xtradb-cluster/5.5/howtos/haproxy.html

Kind regards

Dennis



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-14 Thread Dennis Plöger | getit GmbH
Hi!

Thanks for answering.

> (You might consider running garbd arbitrator on a third server (or a
> third node), because if the two pxc nodes loose connection between each other
> -> split brain and both nodes won't work
> http://www.percona.com/blog/2012/07/25/percona-xtradb-cluster-failure-scenarios-with-only-2-nodes/)

Yes, I am already planning this.

> Do you get any errors if you use direct jdbc connection from hybris to
> your PXC nodes (no haproxy in between) ?

No. Because of this and my tests with the Active/Passive-setup, I already ruled 
out the Percona cluster.

> Have you enabled logging in haproxy and do you get any errors in
> haproxy logs ?

Kinda (see my haproxy.cfg below). You're right. I will check out the logging 
options and optimize logging.

> What kind of server / client timeouts do you use in haproxy or are
> you reaching maxconn etc. limits ?

I don't think, I reach maxconn, because the maximum connections HATop shows are 
23 and my limit is around 2000.

Here's my haproxy.cfg btw:

global
log /dev/loglocal0
log /dev/loglocal1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 2m

defaults
log global
modehttp
option  tcplog
option  dontlognull
retries 3
option  redispatch
timeout connect 5
timeout client 5
timeout server 5
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

listen mysql-cluster 127.0.0.1:3306
mode tcp
balance roundrobin
option httpchk
server shopclusterdb1 10.10.42.82:3306 check port 9200 inter 12000 rise 
3 fall 3
server shopclusterdb2 10.10.42.83:3306 check port 9200 inter 12000 rise 
3 fall 3 backup

Kind regards

Dennis

-- 
Dennis Plöger
Systemadministrator und Berater

--
Besuchen Sie uns auf unseren nächsten Veranstaltungen:
- HartmanEVENT 2014, 09.10.2014, Utrecht, Niederlande
--

getit - Gesellschaft für Technologie- und Informationstransfer mbH
Emil-Figge-Straße 76-80
44227 Dortmund

Tel: +49.231.9742.355
Fax: +49.231.9742.356
http://www.getit.de

Amtsgericht Dortmund, HRB-Nr. 26548

Geschäftsführung:
Dr. Thomas Krämerkämper (Vorsitzender)
Christoph Hecker



Re: HAProxy proxying JDBC requests two a percona cluster

2014-10-14 Thread Jarno Huuskonen
Hi,

On Tue, Oct 14, Dennis Plöger | getit GmbH wrote:
> Hi there!
> 
> I'm currently trying to create a completely high available setup for the 
> Hybris platform (http://hybris.com/). Hybris is a Spring-based framework for 
> e-commerce sites, that is running on Tomcat and connecting via a JDBC pool to 
> different databases, MySQL being one.
> 
> So I've set up two MySQL nodes using a Percona cluster and HAProxy on the 
> application server node to proxy requests to one or both of the database 
> nodes. (I've tried Active/Active and Active/Passive setups)

(You might consider running garbd arbitrator on a third server (or a
third node), because if the two pxc nodes loose connection between each other
-> split brain and both nodes won't work
http://www.percona.com/blog/2012/07/25/percona-xtradb-cluster-failure-scenarios-with-only-2-nodes/)
 
> Everything works quite fine, but during the high-load initialization process, 
> the JDBC connections in the pool somehow seem to timeout or loose connection 
> to the databse. These exceptions pop up:

Do you get any errors if you use direct jdbc connection from hybris to
your PXC nodes (no haproxy in between) ?

Have you enabled logging in haproxy and do you get any errors in
haproxy logs ?
 
> INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | ... 4 more
> INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | Caused by: 
> java.io.EOFException: Can not read response from server. Expected to read 4 
> bytes, read 0 bytes before connection was unexpectedly lost.
> INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
> com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2914)
> INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
> com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3337)
> INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | ... 35 more

What kind of server / client timeouts do you use in haproxy or are
you reaching maxconn etc. limits ?

-Jarno
 
> I've been using version 1.4 from the Ubuntu repository and already updated to 
> current 1.5, in which these exceptions come at a later point during the 
> intialization process, however they still exist.
> 
> Can anybody help me here? How can I better debug this? Do you need any more 
> data to help?
> 
> Thank you in advance.
> 
> Kind regards
> Dennis
> 

-- 
Jarno Huuskonen



HAProxy proxying JDBC requests two a percona cluster

2014-10-14 Thread Dennis Plöger | getit GmbH
Hi there!

I'm currently trying to create a completely high available setup for the Hybris 
platform (http://hybris.com/). Hybris is a Spring-based framework for 
e-commerce sites, that is running on Tomcat and connecting via a JDBC pool to 
different databases, MySQL being one.

So I've set up two MySQL nodes using a Percona cluster and HAProxy on the 
application server node to proxy requests to one or both of the database nodes. 
(I've tried Active/Active and Active/Passive setups)

Everything works quite fine, but during the high-load initialization process, 
the JDBC connections in the pool somehow seem to timeout or loose connection to 
the databse. These exceptions pop up:

INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | The last packet 
successfully received from the server was 59.601 milliseconds ago.  The last 
packet sent successfully to the server was 0 milliseconds ago.
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
sun.reflect.GeneratedConstructorAccessor430.newInstance(Unknown Source)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
java.lang.reflect.Constructor.newInstance(Constructor.java:526)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.Util.handleNewInstance(Util.java:377)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1036)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3427)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3327)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2526)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4842)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
de.hybris.platform.jdbcwrapper.ConnectionImpl.doSetAutoCommit(ConnectionImpl.java:431)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
de.hybris.platform.jdbcwrapper.ConnectionImpl.setTxBoundUserTA(ConnectionImpl.java:228)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
de.hybris.platform.tx.Transaction.bindConnection(Transaction.java:578)
INFO   | jvm 1| main| 2014/10/14 15:59:45.361 | at 
de.hybris.platform.tx.Transaction.beginOuter(Transaction.java:538)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.tx.Transaction.begin(Transaction.java:486)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.tx.Transaction.execute(Transaction.java:1190)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.tx.Transaction.execute(Transaction.java:1160)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.jalo.Item.setAllAttributes(Item.java:2059)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.jalo.Item.setAllAttributes(Item.java:2034)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.converter.impl.ItemModelConverter.storeAttributes(ItemModelConverter.java:1402)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.converter.impl.ItemModelConverter.save(ItemModelConverter.java:683)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.model.impl.wrapper.ModelWrapper.save(ModelWrapper.java:336)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.model.impl.ResolvingModelPersister.saveOthers(ResolvingModelPersister.java:64)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.model.impl.ResolvingModelPersister.persist(ResolvingModelPersister.java:49)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.saveViaJalo(DefaultModelService.java:1059)
INFO   | jvm 1| main| 2014/10/14 15:59:45.362 | at 
de.hybris.platform.servicelayer.internal.model.impl.DefaultModelService.doJaloPersistence