Load balancing sous Ubuntu

Résolu/Fermé
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 - 2 avril 2012 à 17:51
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 13 avril 2012 à 20:46
Bonjour,
Je viens de configurer mes serveur avec MySQL cluster et c'est fonctionnel. Par contre la je bloque sur comment installer Heartbeat et comment faire la répartition des charges...
En bref, avec Heatbeat je veux créer un IP virtuelle qui pourra me permettre de faire la répartition des charges vers mes 2 serveurs MySQL.. Ça fait déjà quelques jours que j'essaie des tutoriels et recherche sur internet comment faire... Je ne trouve pas beaucoup d'information là dessus pour Ubuntu...

Quelqu'un pourrait m'aider ou m'indiquer de bon tutoriels ?



A voir également:

5 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
2 avril 2012 à 20:12
Pour la répartition de charge, personnellement j'utilisais dans ma jeunesse mysql-proxy et ça marchait plutôt pas mal. Dans mon cas j'avais 1 serveur maître et n serveurs esclaves. Le serveur maître servait principalement à gérer les opérations en écriture (insert, update...) et les esclaves les requêtes en lecture (select ...).

L'idée c'est que le(s) client(s) se connectent au proxy comme si c'était une base, et en fonction de la nature de la requête (par exemple en lecture ou en écriture quand tu utilises le script rw-splitting.lua), tu peux envoyer la requête vers le serveur maître ou un de ses esclaves.

Cet article explique ce qu'il faut faire
http://www.dsivolant.com/articles/2010/07/22/configurer-mysql-proxy/

En gros tu installes mysql-proxy sur la machine qui va héberger le proxy (ce peut être une machine hébergeant un esclave, le maître ou une autre, c'est toi qui voit, il faut juste que tes clients s'y connectent) :

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install mysql-proxy


Ensuite tu configures /etc/default/mysql-proxy comme indiqué dans le lien et en veillant à ne pas utiliser le même port que ton serveur mysql s'il y en un sur cette machine. Tu peux vérifier le port en regardant dans /etc/mysql/my.cnf (par défaut 3306, si tu le corriges pense à relancer mysql) et avec la commande suivante si mysql tourne :

sudo netstat -ntlp


Dans /etc/default/mysql-proxy tu références notamment les IPs/ports du maître et du (des) esclave(s). Enfin il faut lancer mysql-proxy :

sudo service mysql-proxy restart


... et vérifier qu'il écoute bien sur le port configuré dans /etc/default/mysql-proxy :

sudo netstat -ntlp


Enfin il ne reste plus qu'à faire un test en te connectant à ton proxy avec une commande du genre :

mysql -u root -p -h ip_du_proxy -P port_du_proxy


Bonne chance
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
Modifié par enyrix le 2/04/2012 à 20:50
Merci, mais présentement je suis encore à configurer l'IP virtuelle... j'ai suivi ce tuto: http://blogs.dixcart.com/public/technology/2011/01/load-balancing-and-failover-for-replicated-mysql.html et jusqu'à présent c'est la première fois que je réussi a faire fonctionner heartbeat sans erreurs... là ou ça coince c'est dans la configuration de pacepaker...

Voici la configuration de heartbeat qui fonctionne correctement:

fichier /etc/heartbeat/ha.cf
autojoin none 
logfacility daemon 
keepalive 2 
deadtime 15 
warntime 5 
initdead 120 
ucast eth1 192.168.0.201 
node r415-2 
node r415-3 
use_logd yes 
crm respawn 


fichier /etc/heartbeat/haresources
r415-2 IPaddr:192.168.0.111/24/eth1


fichier /etc/heartbeat/authkeys
1 sha1 heartbeatpassok 


Mon IP virtuelle voulu etant 192.168.0.111 et le host du serveur étant r415-2 et j'utilise la carte réseau eth1:
primitive shared_ip_one IPaddr params ip=192.168.0.111 cidr_netmask="255.255.255.0" nic="eth1" 
property stonith-enabled="false" 
location share_ip_one_master shared_ip_one 100: r415-2 

Ça me fait une erreur lorsque je valide la dernière ligne ci-dessous:
WARNING: share_ip_one_master: referenced node r415-2 does not exist


une idée là dessus ?
d'ailleurs je me demande aussi si faut absolument avoir pacemaker avec heartbeat pour créer l'IP virtuelle.... d'après ce que je comprend ensuite on fait la répartition des charger avec mysql-proxy ou haproxy... je suis un peut perdu là...
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
3 avril 2012 à 09:49
Par IP virtuelle je suppose que tu veux parler plutôt d'IP locale ? Ou tu parles d'une IP associée à une interface virtuelle ?

Dans ton cas je pense que r415-2 doit désigner un hostname qui peut être résolu par DNS ou /etc/hosts, est-ce le cas ?

nslookup r415-2


Quel est le résultat des commandess "uname -a" sur les deux machines ?

Bon sinon là tu pars sur une approche différente de celle dont j'ai parlé (et que je n'ai jamais testé) donc je ne sais pas si je pourrai vraiment t'aider, je découvre en même temps que je lis ton article :p
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
3 avril 2012 à 15:48
Il s'agit d'un IP virtuelle localement... Si je fait un ping en local vers le hostname ça fonctionne bien. Malgré l'erreur ça fonctionne tout de même. Il me reste plus que la partie de la répartition des charges avec MySQL proxy... Merci pour les infos!
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
3 avril 2012 à 19:21
Peut-être qu'on peut m'aider sur cela:
Je bloque sur la configuration de haproxy...

192.168.0.111 est mon IP virtuelle qui est ouvert sur le port 3306 pour mysql

J'essaye de configurer haproxy pour la répartition des charges:
Lorsque je le redémarre voila le message qui apparait:

root@r415-2:/etc/haproxy# /etc/init.d/haproxy restart
 * Restarting haproxy haproxy                                                   [WARNING] 093/131348 (26457) : config : 'option httplog' not usable with proxy 'mysql' (needs 'mode http'). Falling back to 'option tcplog'.
[ALERT] 093/131348 (26457) : Starting proxy mysql: cannot bind socket


Mon fichier de configuration /etc/haproxy/haproxy.cfg:

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen mysql 192.168.0.111:3306
mode tcp
balance roundrobin

server r415-2 192.168.0.200:3306 check
server r415-3 192.168.0.201:3306 check


J'aimerais avoir votre avis sur l'erreur ou comment le résoudre, merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
3 avril 2012 à 19:40
[WARNING] 093/131348 (26457) : config : 'option httplog' not usable with proxy 'mysql' (needs 'mode http'). Falling back to 'option tcplog'.


Vu le message, j'ai l'impression que tu as une option (httplog) dans ta configuration qui ne marche pas, et où il devrait plutôt y avoir http (cf ligne option)

[ALERT] 093/131348 (26457) : Starting proxy mysql: cannot bind socket


Pour moi ton proxy mysql écoute sur le port 3306 (pour ne pas avoir à modifier le port sur lequel les clients se connectent). As-tu vérifier (1) que ton proxy mysql était installé (2) était lancé (3) écoutait sur le port 3306 ?

Du coup, si tu as un proxy mysql il faut corriger le port sur lequel le serveur mysql présent sur cette machine (s'il y en a un) écoute sur un autre port. Mais bon, j'ai l'impression que chez toi il s'agit de 3 machines différentes (192.168.0.111, 192.168.0.200, et 192.168.0.201) ? En tout cas, si sur la machine sur laquelle tu mets le proxy il y a déjà un serveur mysql, veille à ce que ce dernier écoute sur le port 3307 (en corrigeant au besoin /etc/mysql/my.cnf) et relance ce serveur mysql :

service mysql restart


Ensuite pour revenir à ton erreur, tu références dans ton fichier 3 couples (ip, port). Vu que la connexion échoue vers l'un des 3 (je dirais 192.168.0.111 au feeling), tu devrais tester depuis la machine sur laquelle tu configures /etc/haproxy/haproxy.cfg si tu parviens à te connecter avec un client mysql vers chacun de ces 3 serveurs (ou proxies) :

mysql -u root -p -h 192.168.0.111 -P 3306
mysql -u root -p -h 192.168.0.200 -P 3306
mysql -u root -p -h 192.168.0.201 -P 3306


Bonne chance
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
3 avril 2012 à 20:13
Oui la connexion se fait sur les trois ip. 192.168.0.111 c'est l'IP (geré par heatbeat et pacemaker) virtuelle qui redirige vers les deux machines réelle soit 192.168.0.200 et 192.168.0.201

Il me restait juste la répartition des charges en se connectant sur l'IP virtuelle... Pour suivre la logique du tutoriel j'ai installer haproxy (j'avais essayer mysql-proxy mais je l'ai enlever avec un apt-get remove mysql-proxy)

Pour l'erreur de http c'est réglé en commentant les options qui causait problème mais là reste le problème de port apparemment...

Si faut changer un port je préfèrais changer le port de haproxy, d'ailleurs je sais pas quel port il utilise...
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
Modifié par enyrix le 3/04/2012 à 20:23
Si je change la ligne pour
listen mysql 192.168.0.111:3307
ça passe et ça ouvre le port :
Port Scanning host: 192.168.0.111 
  Open TCP Port:  3306     mysql 
  Open TCP Port:  3307     opsession-prxy 


Mais on but c'est de pouvoir me connecter avec ce même ip (virtuelle) sur mysql avec un robin hood donc le but de haproxy... mais apparemment je comprend pas comment bien le configurer... et comment fonctionne exactement haproxy...
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
Modifié par enyrix le 3/04/2012 à 21:07
Je ne suis pas sûr de ce que je doit mettre après le mot listen ... je crois que c'est le nom du service qui est ouvert sur l'ipvirtuelle que je spécifie... Une idée la dessus ?

Si je met listen mysql 192.168.0.111:3307
lorsque je tente de me connecter a mysql ça me dit:
Host '192.168.0.200' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

J'ai essayer la commande indiqué mais sans succès.
0
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
3 avril 2012 à 22:12
Aucune, jamais utilisé :-) Comme je t'ai dit, il faut déjà commencer par voir si tu arrives à ta connecter à tes différents serveur avec un bon vieux client mysql.
0
enyrix Messages postés 145 Date d'inscription vendredi 11 novembre 2011 Statut Membre Dernière intervention 7 avril 2021 8
13 avril 2012 à 19:09
Mon IP virtuelle était en conflit avec l'ip de la machine... J'ai résolue le problème installant le répartiteur de charge (haproxy) sur le serveur maître...
0