Mettre en place un cluster de base de données avec MariaDB, Galera Cluster et H

Mettre en place un cluster de base de données avec MariaDB, Galera Cluster et HaProxy sous Debian 7 Qu’est-ce que MariaDB? Suite au rachat de MySQL par Sun Microsystems et des annonces du rachat de Sun Microsystems par Oracle Corporation, Michael Widenius, fondateur de MySQL, quitte cette société pour lancer le projet MariaDB, dans une démarche visant à remplacer MySQL tout en assurant l’interopérabilité. Le nom vient de la 2e fille de Monty Widenius, Maria (la première s’appelant My). MariaDB est un système de gestion de base de données édité sous licence GPL. Il s’agit d’un fork communautaire de MySQL : la gouvernance du projet est assurée par la fondation MariaDB, et sa maintenance par la société Monty Program AB, créateur du projet. Cette gouvernance confère au logiciel l’assurance de rester libre. MariaDB est en plein essor depuis ces deux dernières années, Wikipédia annonce, fin 2012, la migration de MySQL à MariaDB. Les distributions Linux, comme Fedora, CentOS ou OpenSuse, abandonnent elles aussi MySQL. En septembre 2013 Google annonce l’adoption de MariaDB en lieu et place de MySQL. Et Galera Cluster? Galera Cluster est une solution cluster multi-maître synchrone pour MariaDB. Il est disponible uniquement sous Linux. C’est solution permet de mettre en place avec un minimum de trois serveurs un cluster de base de données auto-répliquant et hautement disponible. Pour faire simple, les trois serveurs de bases de données sont actifs et les utilisateurs peuvent écrire sur n’importe quel serveur, les données sont alors répliquées entre les serveurs restant. Si un serveur devient injoignable, les deux autres serveurs sont toujours disponibles afin d’assurer la disponibilité des services. Galera Cluster est supporté par MariaDB (Galera Cluster se trouve d’ailleurs dans les dépôts de MariaDB). Une solution commerciale « Percona XtraDB Cluster » utilise le moteur de réplication de Galera Cluster. Voici la topologie que nous allons mettre en place Topologie Afin de mettre en place cette topologie nous allons commencer par mettre en place deux serveur HaProxy. Mise en place des machines virtuelles pour Haproxy et Galera Cluster Important! Dans Virtualbox, le réseau en 192.168.2.XXX est mon réseau local (mode pont) et pour le réseau en 10.1.0.XXX la configuration de la carte est en mode Réseau interne. Les serveurs sont configurés de la façon suivante: Serveurs de répartition de charge hostname: lb1db eth0: 10.1.0.41 hostname: lb2db eth0: 10.1.0.42 Serveurs de bases de données hostname: db1 eth0: 10.1.0.51 hostname: db2 eth0: 10.1.0.52 hostname: db3 eth0: 10.1.0.53 Commençons par mettre en place les deux serveur HaProxy Important! Attention les commandes suivantes sont á faire dur les deux serveur Installation de HaProxy echo "deb http://ftp.debian.org/debian/ wheezy-backports main" >> /etc/apt/sources.list apt-get update apt-get install haproxy Une fois l’installation terminée, nous devons éditer la valeur ENABLED=0 à ENABLED=1 dans les fichiers /etc/default/haproxy et /etc/init.d/haproxy. Vouc pouvez le faire avec les commandes suivantes: sed -i "s/ENABLED=0/ENABLED=1/g" /etc/default/haproxy sed -i "s/ENABLED=0/ENABLED=1/g" /etc/init.d/haproxy Configuration de HaProxy La configuration de HaProxy est assez simple et se fait dans un seul fichier de configuration, ce fichier se trouve dans /etc/haproxy/haproxy.cfg. global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy user haproxy group haproxy daemon defaults log global mode http option dontlognull contimeout 5000 clitimeout 50000 srvtimeout 50000 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 #Configuration de l'ip balancés listen cluster_db 10.1.0.40:3306 #Mysql mode tcp #Mode de balancement Round Robin balance roundrobin #Les serveurs mysql server db1 10.1.0.51:3306 check server db2 10.1.0.52:3306 check server db3 10.1.0.53:3306 check #Stats listen stats 10.1.0.40:80 stats enable stats hide-version stats refresh 30s stats show-node stats auth admin:admin stats uri /stats Je vais analyser ce fichier de configuration: listen cluster_db 10.1.0.40:3306: Cette directive nous permet de spécifier sur quelle adresse IP HaProxy va fonctionner, nous allons accéder aux bases de données depuis l’IP 10.1.0.40. mode tcp: permet de spécifier que le balancement de charge est utilisé pour du contenu TCP (http pour du contenu web). balance roundrobin: permet de spécifier l’algorithme de répartition de charge. Enfin stats, permet de configurer la page de statistiques de HaProxy, dans cette configuration,la page de statistiques sera disponibles via l’adresse suivante http://10.1.0.40/stats avec les identifiants admin/admin. Pour ma part j’ai rajouté une règle dans le script de firewall des LB web afin de pouvoir accéder aux stats depuis adresse IP balancé Web. #Stats pour les LB Mysql iptables -t nat -A PREROUTING -p tcp -d 192.168.2.100 --dport 8080 -j DNAT --to-destination 10.1.0.40:80 Je peux donc accéder aux stats de Haproxy avec l’adresse: http://192.168.2.100:8080/stats Maintenant, comme sur les serveur LB Web, il faut installer Heartbeat, afin de mettre en place l’adresse IP de balancement des bases de données que nous avons configurés dans HaProxy. Installation de HeartBeat Important! Les prochaines manipulation sont á faire dur les deux serveurs apt-get install heartbeat Une fois HeartBeat installé nous allons devoir créer trois fichiers dans le dossier /etc/ha.d/ – ha.cf : Pour la configuration générale de HeartBeatv – haresources : Pour la configuration des ressources – authkeys : Pour la clef partagé entre les serveurs du cluster Voici le contenu du fichier ha.cf mcast eth0 239.0.0.11 694 1 0 warntime 4 deadtime 5 initdead 15 keepalive 2 #Re-balance les services sur le lb primaire quand il revient en ligne auto_failback on #Serveurs du cluster node lb1db node lb2db Important! Attention! Pour que tout fonctionne bien il faut s’assurer que vous puissiez ping lb2db depuis lb1db et vice-versa. Pensez donc à rajouter les deux lignes suivantes sur le fichier /etc/hosts sur vos deux lb: ##LBDB 10.1.0.41 lb1db 10.1.0.42 lb2db Nous allons maintenant créer le contenu du fichier haresources lb1db IPaddr::10.1.0.40/24/eth0 haproxy Explications: lb1db = lb primaire du cluster IPaddr::10.1.0.40/24/eth0 = Adresse IP balancée pour HaProxy haproxy = service que HeartBeat va démarrer Et pour finir nous allons créer le fichier authkeys. Ce fichier contient un clef partagé entre les deux serveurs. Cela peut être un mot de passe, ou un simple mot. Voici le mien: auth 3 3 md5 cluster-db-key Ce fichier la doit avoir les permissions 600. Donc sur les deux serveurs tapez: chmod 600 /etc/ha.d/authkeys Enfin nous allons désactiver le démarrage automatique de HaProxy sur les deux serveurs: insserv -r haproxy Finalisation du balancement Sur les deux serveur arrêtez HaProxy: /etc/init.d/haproxy stop Puis sur lb1db démarrez HeartBeat /etc/init.d/heartbeat start Attendez quelques secondes et tapez la commande ifconfig: root@lb1db:~# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:35:e5:19 inet addr:10.1.0.41 Bcast:10.1.0.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe35:e519/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2234 errors:0 dropped:0 overruns:0 frame:0 TX packets:3670 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:292562 (285.7 KiB) TX bytes:692754 (676.5 KiB) eth0:0 Link encap:Ethernet HWaddr 08:00:27:35:e5:19 inet addr:10.1.0.40 Bcast:10.1.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Vous voyez que l’IP 10.1.0.40 est configurée sur lb1db Maintenant, démarrez heartbeat sur lb2db. Le balancement entre les deux serveurs est maintenant pleinement fonctionnel. Vous pouvez maintenant visualiser depuis l’IP de balancement web les statisques de HaProxy http://192.168.2.100:8080/stats, bien sur pou que cela fonctionne, il faut que au moins un des serveur serveur LB configurés pour le balancement Web soit actif. Test du balancement Pour tester le balancement, il vous suffit d’arrêter HeartBeat sur lb1db (ou le serveur) avec la commande: /etc/init.d/heartbeat stop Patientez quelques secondes et faites un ifconfig sur lb2db et vous verrez que l’IP balancée est maintenant sur ce serveur. Relancer HeartBeat sur lb1db afin de remettre l’IP sur celui-ci. Maintenant que les serveur de répartition de charge il est temps de mettre en place nos trois serveurs de bases de données. Installation de MariaDB et de Galera Cluster. Afin de mettre en place notre cluster de base de données MariaDB avec Galera Cluster, il faut ajouter les dépôt Debian nécessaire. Sur les trois serveurs de bases de données, faire les manipulation suivantes: apt-get install python-software-properties apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db add-apt-repository 'deb http://mirror3.layerjet.com/mariadb/repo/5.5/debian wheezy main' apt-get update DEBIAN_FRONTEND=noninteractive apt-get install -y rsync galera mariadb- galera-server Maintenant que MariaDb est installé, il faut configurer Galera Cluster afin de mettre en place la réplication entre les serveurs. Nous allons donc éditer le fichier de configuration de Galera se trouvant dans /etc/mysql/conf.d/galera.cnf Sur les trois serveurs, nous allons le configurer de la facon suivante: [mysqld] #mysql settings binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 #galera settings wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_cluster_name="mon_cluster_dbr" wsrep_cluster_address="gcomm://10.1.0.51,10.1.0.52,10.1.0.53" wsrep_sst_method=rsync La ligne la plus importante á configurée est la ligne: wsrep_cluster_address= »gcomm://10.1.0.51,10.1.0.52,10.1.0.53″ Sur cette ligne il faut mettre les adresses IP de tous les serveurs de DB. Une fois le fichier edité et sauvegardé nous pouvons démarrer le cluster :) Mais tout d’abord stopper mysql sur tous les serveurs de DB service mysql stop Sur le serveur db1 taper la commande suivante: service mysql start --wsrep-new-cluster Vous aurez en sortie ceci: root@db1:~# service mysql start --wsrep-new-cluster [ ok ] Starting MariaDB database server: mysqld . . .. [info] Checking for corrupt, not cleanly closed and upgrade needing tables.. Une fois le cluster démarré, faites la commande suivante sur db1: root@db1:~# mysql -u root -e 'SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size"' +--------------+ | cluster size | +--------------+ | 1 | uploads/Ingenierie_Lourd/ mettre-en-place-un-cluster-de-base-de-donnees-avec-mariadb.pdf

  • 22
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager