« cluster » Feed

97c7d57c23893194b0fa56035df6a5ce

Réplication MySQL en Master/Master avec partage de charge

2010-10-21 11:29

Write comment

Dans cet article nous allons essayer de mettre en place une solution qui assure la redondance d'une base de données MySQL et qui permet de partager la charge entre deux nœuds.
Pour assurer la redondance des données nous allons avoir recours à la réplication native de MySQL.
En ce qui concerne le partage de charge, nous allons utiliser MySQL Proxy bien qu'il soit encore à sa version 0.8 Alpha.

Redondance des données:

Dans cette section, nous allons configurer une réplication entre deux Maîtres MySQL, identifiés par DB-1 et DB-2, sachant que dans cette configuration, chaque Maitre sera en même temps l'esclave de l'autre.
Ce schéma est plus expressif:



Le grand avantage de cette architecture est d'avoir deux bases de données sur lesquelles on peut écrire en parallèle sans se soucier de la synchronisation, la réplication se charge de synchroniser vers DB-2 ce qu'on écrit sur DB-1, et vice versa.
C'est d'ailleurs pourquoi on va utiliser MySQL Proxy qui se placera comme partageur de charge entre ces deux bases de données.

On va commencer par mettre en place la réplication à double master:

NB: Toutes les requêtes SQL seront exécutés avec le compte root.

DB-1:

Ajouter ce qui suit à la section [mysqld] du fichier my.cnf et redémarrer mysqld:
 # primary master server id
server-id=1
auto_increment_offset=1
# total number of master servers
auto_increment_increment=2
# local slave replication options
log-bin=master1-bin
log-slave-updates
# remote master replication options
master-host=slave2.ip
master-port=3306
master-user=slave2
master-password=slave2
master-connect-retry=10 
Cette configuration indique à DB-1 d'accepter la réplication depuis Slave2.

DB-2:

Ajouter ce qui suit à la section [mysqld] du fichier my.cnf et redémarrer mysqld:
 # secondary master server id
server-id=2
auto_increment_offset=2
# total number of master servers
auto_increment_increment=2
# local slave replication options
log-bin=master2-bin
log-slave-updates
# remote master replication options
master-host=slave1.ip
master-port=3306
master-user=slave1
master-password=slave1
master-connect-retry=10 
Cette configuration indique à DB-2 d'accepter la réplication depuis Slave2.

Vous l'aurez certainement remarqué, auto_increment_offset et auto_increment_increment sont les clés du bon fonctionnement d'une réplication à double maîtres, car dans ce type de réplication et lors de l'écriture simultanée sur les deux maîtres, on aura facilement des collisions au niveau des clés auto incrémentées (auto_increment) menant à l'échec la réplication.
Prenons l'exemple de cette requête SQL
 mysql> INSERT INTO personne (id, name) VALUES (null, 'Mahmoud');  
Sachant que la colonne ID est une clé primaire auto incrémentée, à son exécution sur DB-1, la colonne ID aura la valeur '1'.
Et si on exécute une autre requête sur DB-2 comme suit
 mysql> INSERT INTO personne (id, name) VALUES (null, 'Fourat');  
La colonne ID sera incrémentée et aura la valeur '1', ce qui provoquera un conflit dans la réplication car le la deuxième ligne insérée sur DB-2 ne pourra jamais synchronisée sur DB-2 puisque la colonne ID est une clé primaire et donc unique.
Pour remédier à ce problème il faut appliquer configurer auto_increment_offset et auto_increment_increment en tenant compte de cette règle:

Read more…

6c4a91744a9f857f00ddd8802edb7465

Load balancing JBoss and Apache2 / mod_jk

2010-10-23 13:03

Write comment

Having more and more needs to deploy high load and critical applications, clustering JBoss in a load balancing mode is becoming a priority.

I will discuss a good old way to use mod_jk on Apache2 to balance the load on multiple JBoss servers, there's also different newish approaches using mod_proxy or mod_cluster from JBoss that i will discuss in future posts.

So let's start installing JBoss AS, you have to download it from the official site here, i've taken the last 6.x release (6.0.0.M5) to the date i'm writing this post, anyway you can even take a 5.x release as it has no difference for what we're going to make later.

After downloading, put the file into your /opt folder and unpack it, you'll get a /opt/jboss-6.0.0.20100911-M5, we'll try to run the JBoss AS server and check if it runs out of the box:

# cd /opt/jboss-6.0.0.20100911-M5/bin
# sudo ./run.sh

Wait some seconds, you shouldn't have errors till you get the last line looking like this: Started in 51s:29ms.

Everything seems okay, now we'll start the second JBoss server, all we have to do is to copy the jboss-6.0.0.20100911-M5 to another server (i use virtual nodes over Xen hypervisor) and start it.

You can go with one server and install two instances of JBoss AS on it, but dont forget to change the listening ports of the second instance to avoid this kind of errors: java.lang.Exception: Port 8080 already in use.

Anyway, whatever configuration you've chosen, we should end with an architecture like this:



Before going to put the load balancer on top of these two nodes (tux1 & tux2), make sure your JBoss AS is working by pointing your browser to the JMX console link on the http://host:8080 page.

Everything is okay ? let's go to Apache:

Read more…

 Nbre d'élements: 2/
2