Wiki [Tuto/HowTo] [Debian/Ubuntu] Clusteriser vos bases de données MariaDB avec Galera Cluster et HaProxy

0
21
sept.
2017

Sommaire

Présentation

Un Cluster de base de données est un ensemble de serveurs reliés entre eux via réseau afin de créer un ensemble virtuel utilisant la réplication des données pour protéger les bases de données contre une éventuelle panne (machine, réseau).

HaProxy va servir de pont (proxy) entre les clients et les serveurs du cluster de base de données. C'est un répartiteur de charge (load balancer) qui va choisir le serveur le plus facilement accessible (le moins occupés) lorsqu'un client veut effectuer une action sur les BDD. Il n'est pas obligatoire au bon fonctionnement du cluster, juste une belle optimisation.

Galera Cluster quant à lui permet de créer/gérer le cluster mariaDB. Il va aussi s'occuper de la redondance des données (leur multiplication dans la grappe).

Un serveur peut tout à fait cumuler répartiteur de charge HaProxy et serveur de base de données Galera Cluster.

Attention : Si vous devez reboot une machine du cluster, vous devrez probablement lancer cette commande sur un des Noeuds et relancer les autres.

sed -ie '/safe_to/c\safe_to_bootstrap: 1' /var/lib/mysql/grastate.dat
mysqld_safe --wsrep-new-cluster

Limitations

source : MariaDB Galera Cluster : la réplication multi maitres

Mise en place de Galera Cluster + mariadb

Passez en administrateur (root)
  • Sur Ubuntu / Raspbian
sudo su
  • Sur Debian / Ubuntu Minimal
su
Ajoutez clés et dépôts pour la dernière version (10.2.x)
  • Sur Ubuntu 16.xx
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.cu.be/repo/10.2/ubuntu xenial main'
  • Sur Debian 8 (Jessie) / Raspbian Jessie
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.mirror.nucleus.be/repo/10.2/debian jessie main'
  • Sur Debian 9 (stretch)
sudo apt-get install software-properties-common dirmngr
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://mariadb.mirror.nucleus.be/repo/10.2/debian stretch main'
Installez la dernière version de mariadb-server et galera
apt-get update
apt-get install -y mariadb-server galera-3
Créez /etc/mysql/conf.d/galera.cnf
nano /etc/mysql/conf.d/galera.cnf
  • Ensuite ajoutez dedans
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=256M
bind-address=10.8.1.42

#Galera settings
wsrep_provider=/usr/lib/libgalera_smm.so
#SSL for Galera
#wsrep_provider_options="socket.ssl_key=/etc/mysql/ssl/server-key.pem;socket.ssl_cert=/etc/mysql/ssl/server-cert.pem;socket.ssl_ca=/etc/mysql/ssl/ca-cert.pem"
wsrep_cluster_name="monSuperCluster"
wsrep_cluster_address="gcomm://10.8.1.42,10.8.1.43,10.8.1.44"
wsrep_sst_method=rsync
wsrep_on=ON
wsrep_node_address="10.8.1.42"
wsrep_node_name="monJoliNom"
  • Ajoutez à wsrep_cluster_address= les hostnames de vos machines séparés par des virgules par exemple
wsrep_cluster_address="hostnameMachine1,hostnameMachine2,hostnameMachine3"

Note : il est déconseillé de spécifier des adresses IP, privilégiez plus tôt des noms de domaines dont vous ferez la correspondance soit dans votre serveur DNS, soit dans vos fichiers /etc/hosts.

  • Vérifiez à default_storage_engine= qu'InnoDB est bien le moteur par défaut (vous pouvez éventuellement le remplacer par un autre moteur tant qu'il est compatible avec galera)
default_storage_engine=InnoDB
  • Spécifiez éventuellement à innodb_buffer_pool_size= combien mémoire (RAM et Swap) InnoDB peut consommer
innodb_buffer_pool_size=256M

Note : la doc conseille de prendre la valeur qu'on utilise sur un serveur lambda et de réduire l'utilisation mémoire de 5% afin de ne pas subir une augmentation dû a l'utilisation du cluster.

  • Le nom du cluster (doit obligatoirement être identique sur chaque Node)
wsrep_cluster_name="monSuperCluster"
  • L'adresse du Node
wsrep_node_address="10.8.1.42"
  • Le nom du Node
wsrep_node_name="monJoliNom"
  • Le provider du Node (paramètre wsrep_provider)
wsrep_provider=/usr/lib/libgalera_smm.so
  • Au choix /usr/lib/libgalera_smm.so ou /usr/lib/galera/libgalera_smm.so
Autoriser dans AppArmor le cluster à utiliser des ports non root (source)
sudo ln -s /etc/apparmor.d/usr /etc/apparmor.d/disable/.sbin.mysqld
sudo service apparmor restart
Sur certaines machines le fichier /etc/mysql/my.cnf n'existe pas. Si c'est le cas, créez le en copiant le contenu suivant
[a vérifier] Si vous partez d'une base de données mysql/mariadb déjà existante, vous devez l'upgrade vers galera (source)
Sur un des nodes (que nous considérerons comme le premier) arrêtez mariadb
service mysql stop
Sur ce même node éditez le fichier /etc/mysql/conf.d/galera.cnf
nano /etc/mysql/conf.d/galera.cnf
Commentez ensuite la ligne concernant la liste de vos nodes "wsrep_cluster_address" puis ajoutez la ligne suivante
wsrep_cluster_address="gcomm://"
Ensuite initialisez le cluster
sudo /usr/bin/galera_new_cluster
Relancez mariadb sur tout les Nodes
service mysql restart
Testez si ça fonctionne
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Si ça fonctionne, replacez la liste de vos nodes dans /etc/mysql/conf.d/galera.cnf sur votre premier node (celui qui a initialisé le cluster) et supprimez "wsrep_cluster_address="gcomm://""
wsrep_cluster_address="gcomm://hostname1,hostname2"
Si vous avez l'erreur "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded", sur tout les nodes, resetez les password admin :
service mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot
use mysql;
update user set password=PASSWORD("MY_NEW_PASSWORD_HERE") where User='root';
update user set plugin="mysql_native_password";
quit;
/etc/init.d/mysql stop
kill -9 $(pgrep mysql)
/etc/init.d/mysql start

Installation d'un répartiteur de charge HaProxy pour Galera Cluster

Note : vous pouvez le ou les installer sur des machines dédiés, ou sur un ou plusieurs de vos serveurs de bases de données (dans ce dernier cas, veillez à écouter sur des ports différents si non conflit). Vous pouvez aussi directement l'installer sur un client.

Installez les pré-requis
apt-get update
apt-get install haproxy
Éditez la valeur ENABLED=0 à ENABLED=1 dans les fichiers /etc/default/haproxy et /etc/init.d/haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/default/haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/init.d/haproxy
Éditez /etc/haproxy/haproxy.cfg
sudo nano /etc/haproxy/haproxy.cfg
Adaptez puis ajoutez
# Load Balancing for Galera Cluster
listen galera
bind 10.8.0.66:3306
balance leastconn
mode tcp
option tcpka
option mysql-check user haproxy
server hostnameNode1 10.8.1.42:3306 check weight 1
server hostnameNode2 10.8.1.43:3306 check weight 1
server hostnameNode3 10.8.1.44:3306 check weight 1
  • listen galera => Format "listen numUnique". Identifie notre bloc de configuration.
  • bind 10.8.0.66:3306 => adresseIP:port sur quelle adresse le serveur HaProxy doit-il écouter (si vous passez par des tunnels SSH, choisissez 127.0.0.1). Si votre répartiteur est sur la même machine que le cluster de Base De Données, pensez à lui attribuer un port différent. (qu'il faudra mentionner aux clients) Le caractère magique * est autorisé.
  • mode tcp => choisissez tcp
  • balance leastconn => l’algorithme de répartition de charge (load balancing). Accepte : roundrobin , leastconn, source. (informations) option mysql-check user haproxy => on demande a HaProxy de tenter de se connecter à la base de données du cluster
  • stats => configurer la WEBUI pour administrer HaProxy depuis votre navigateur

    • listen stats 127.0.0.1:8080 => adresseIP:port sur quelle adresse le serveur Web doit écouter/répondre pour la WEBUI (si vous passez par tunnels SSH ou Tor Hidden Service indiquez 127.0.0.1 comme IP et prenez un port inutilisé (peu importe lequel tant que vos ne l’oubliez pas)
    • stats enable|disable => activer|désactiver la WEBUI
Commentez option httplog puis sauvez et quittez avec CTRL+X
Sur le cluster Galera, créez l'utilisateur dédié à HaProxy
mysql -u root -p -e "CREATE USER 'haproxy'@'10.8.1.%';"
  • 10.8.1.% => ici on autorise les connexions entrantes depuis les adresses IP allant de 10.8.1.0 à 10.8.1.255, remplacez par une seule adresse si vous le souhaitez (déconseilez si vous souhaitez pouvoir utiliser plusieurs répartiteur de charge)
Démarrez HaProxy
service haproxy restart

Ajouter un serveur à Galera Cluster

Installez votre serveur en suivant la procédure ci-haut.
Sur chacun de vos Nodes éditez le fichier /etc/mysql/conf.d/galera.cnf afin d'ajouter l'hostname de votre nouveau serveur. La valeur à éditer est wsrep_cluster_address (CTRL+W pour chercher), comme suit
wsrep_cluster_address="gcomm://hostnameServer1,hostnameServer2,hostnameServer3"
Sur chacun de vos Nodes éditez le fichier /etc/hosts afin d'ajouter la correspondance entre adresse IP et nom de domaine pour votre nouveau serveur. Par exemple
10.8.0.42 penséeprofonde
10.8.0.43 server1
10.8.0.44 server2
  • Note : A moins d'avoir spécifié "bind 0.0.0.0" (= écoute sur toutes les IP) sur vos différents Noeuds, il est primordiale de joindre les ip que vous avez spécifiez en écoute. Si par exemple sur server1 vous avez spécifiez "bind 10.8.0.43" (= écoute uniquement sur 10.8.0.43) alors il faut obligatoirement joindre ce serveur sur cette adresse (même 127.0.0.1 et localhost ne fonctionneront pas!).

Connecter un client au Cluster Galera

Installez le client mysql/mariadb

apt-get install -y mariadb-client

Si vous souhaitez pouvoir 'l'utiliser depuis php, installez le module php-mysql

apt-get install php-mysql

Pour vous connecter à vos Bases De Données, spécifiez comme host au choix votre Répartiteur de charge HaProxy ou directement un de vos serveurs Galera. N'oubliez pas de bien joindre les IP que vous avez spécifiez en écoute à moins d'avoir choisis "bind 0.0.0.0".

Du point de vue client le cluster va se comporter comme un simple serveur mysql/mariadb. N'oubliez pas néanmoins de toujours utiliser des clés primaires dans vos tables de données.


Quelques commandes

Afficher des infos à propos du cluster (toutes les variables "wsrep_").
mysql -u root -p -e "show status like 'wsrep%';"
Afficher des infos à propos des utilisateurs de vos Base de Données.
mysql -u root -p -e "select host, user, password from mysql.user;"
Créer un utilisateur et sa Base de Données
mysql -u root -p -e "CREATE DATABASE MA_BASE; GRANT ALL PRIVILEGES ON MA_BASE.* TO 'monUSER'@'10.8.1.%' identified by 'monPass'; FLUSH PRIVILEGES;"
  • Traduction : Créer la base de données intitulée MA_BASE. Ensuite donner accès à MA_BASE à l'utilisateur monUSER depuis n'importe quelle adresse du réseau 10.8.1.x et dont le mot de passe est monPass (en claire).
Changer mot de passe utilisateur
mysql -uroot -p -e "UPDATE mysql.user SET Password=PASSWORD('monNouveauPASS') WHERE USER='monUSER';"
Changer Host accepté pour un utilisateur
mysql -uroot -p -e "UPDATE mysql.user SET Host='%.%.%.%' WHERE USER='monUser';"
  • Dans l'exemple ici on autorise toutes les IP sources pour l'utilisateur monUser.
Checker combien de Nœuds sont connecté.
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
  • Cette commande est très utile pour vérifier qu'une machine est bien connectée au cluster.

screenshot-2017_08_22-Commade_Galera_Cluster_mariadb_Status_Cluster

Supprimer une Base de Données.
mysql -uroot -p -e "DROP DATABASE maBaseDeDonnées;"
Supprimer un utilisateur
mysql -uroot -p -e "DROP USER ‘identifiant’@’serveur’;"

Forum Linux.général [Tuto/HowTo] [Ubuntu/Debian] Load Balancing - redirection vers plusieurs vhost avec HaProxy

Posté par . Licence CC by-sa
4
20
sept.
2017

musique d'ambiance : Les Choristes - Vois Sur Ton Chemin (Paraphonics Remix) LES RAMONEURS DE MENHIRS - Dans An Diaoul
Testé avec succès sur : Ubuntu Minimal 16.04 (ARM)
Difficulté : moyen

Mise en place HaProxy (load balancing)

Installez les pré-requis

apt-get update
apt-get install -y haproxy

Activez HaProxy

sed -i "s/ENABLED=0/ENABLED=1/g" /etc/default/haproxy
sed -i "s/ENABLED=0/ENABLED=1/g" /etc/init.d/haproxy

Créez le dossier qui va accueillir les certificats TLS (exSSL)

mkdir -p /etc/haproxy/certs/

Concaténez chaque certificat (clés publique) et sa clés privé (recommencez (...)

Forum Linux.débutant serveur et mailing list

Posté par . Licence CC by-sa
0
2
sept.
2017

Bonjour,

je suis "très" débutant sous linux. mais je peux apprendre vite.

Je suis dans une association. Mon idée est de mettre en place avec un serveur power edge 2950,
une mailing list interne au club sans passer par OVH avec qui nous avons des problèmes de gestion de la ML réguliers. Nous possèdont un serveur (power edge 2950) qui peux fonctionner sous linux. Je n'y connais pas grand chose mais sous vos conseils je me dit que nous allons (...)

Forum général.cherche-matériel Serveur headless en remplacement d'un sheevaplug

6
7
juil.
2017

Bonjour,

Ma dernière déconvenue m'a amené à me poser des questions sur la pérennité de mon sheevaplug: il doit bien avoir dans les 8 ans, et la mémoire flash interne donne des signes de faiblesses avec quelques blocs défectueux.

Actuellement mon sheevaplug me permet de faire tourner un serveur web hébergeant plusieurs applications (jirafeau, tiny tiny rss, rss-bridge, shaarli, wallabag), une base pgsql, un serveur de mail, un serveur XMPP, un serveur CalDav/CardDav, un gitolite, un serveur NFSv4, un bouncer (...)

Forum général.cherche-logiciel Serveur mail avec accès "en lecture seule" pour les utilisateurs

Posté par . Licence CC by-sa
2
28
juin
2017

Bonjour !

Je souhaite réutiliser à la rentrée prochaine auto-multiple-choice, un logiciel de correction automatique de QCM. Ce logiciel très pratique envoie chaque copie corrigée par e-mail mais cela pose plusieurs difficultés :
1) des élèves et/ou parents n'ont pas d'e-mails
2) les mots de passe sont parfois oubliés
3) des élèves peuvent supprimer le mail annonçant le résultat de leur contrôle
4) certains mails sont détectés comme spam et n'arrivent pas à destination
5) il est compliqué de récupérer (...)

Forum Linux.général Informations et conseils

Posté par (page perso) . Licence CC by-sa
0
29
mai
2017

Bonjour,

J'ai un serveur 2 coeurs 3,7mhtz Intel
6go de ram
20go de ssd +500 hdd

Voilà en gros la configuration du serveur.
J'aimerai avoir vos conseils informations et savoir comment procéder.

Je souhaiterais mettre sur celui-ci RIVENDELL AUTOMATION logiciel radio interface graphique sur bureau.
Le logiciel dois être accessible par 3 personnes donc le bureau.

Installer un serveur ftp et web pour héberger mon site internet. En php MySQL
Ssl (besoin de conseils)

Un petit serveur mails pour les (...)

Forum Linux.debian/ubuntu [Auto-hébergement] Apache2 VirtualHosts par noms fonctionnement aléatoirement

Posté par . Licence CC by-sa
0
21
mai
2017

Salut à tous ;)

Je me permet de poster car j'ai du mal avec les Virtualhosts par noms d'Apaches.
J'ai installé un nouveau truc sur mon serveur web, je lui ai assigné le domaine "dns.wargof.xyz" en ServerName et "wargof.xyz" en ServerAlias ( c'est mon seul domaine en .xyz ).
Mon domaine n'est pas encore propagé, je l'ai donc fixé dans mon "/etc/hosts". Le truc c'est qu'en tapant son URL je tombe systèmatiquement soit sur mon site perso, soit sur mon blog (...)

Forum Linux.embarqué Communication arduino-Raspy et serveur web (HighCharts)

Posté par . Licence CC by-sa
2
4
avr.
2017

Bonjour à tous !

Je suis étudiant en Terminale S sciences de l'ingénieur et nous avons un projet de fin d'année qui consiste à gérer le niveau d'eau d'un moulin (en régulant l'ouverture ou la fermeture des vannes du moulin). Les données de la hauteur d'eau sont envoyer sur une Raspberry pi et traitée pour les envoyer sur le web avec un graphique d'historique de hauteur d'eau géré par le plugin web Highcharts. Je gère la Raspberry.
L'arduino m'envoie des données (...)

Forum général.petites-annonces [À vendre] Serveur NAS sûr mesure (sans disques durs) 600€

Posté par . Licence CC by-sa
4
17
mar.
2017

Bonjour,

Je me sépare de mon serveur NAS, monté sûr mesure il est vendu SANS DISQUES DURS. Il est en excellent état, l'ensemble des composants ont été achetés sur Amazon et LDLC courant 2016.

Voici la configuration détaillée du boîtier :
- Processeur Intel Core i5-4690K 4 cœurs à 3.5GHz
- Mémoire vive DDR3 Crucial Ballistix 8Go (2x 4Go) PC3-12800 à 1600MHz
- Carte-mère mini ITX Gigabyte Z97N-WIFI socket Intel 1150 LGA
- Alimentation Corsair CS550M de 550W
- SSD (...)

Évolutions des projets La Brique Internet et YunoHost des versions 2.2, 2.4 et 2.5

64
8
fév.
2017
Internet

Logo blanc de YunoHost

YunoHost est une distribution basée sur Debian GNU/Linux orientée serveur, ayant pour but de faciliter l’auto‐hébergement.

Dans un premier temps, sera présenté le projet La Brique Internet. Dans un second temps, les améliorations apportées dans les versions 2.2, 2.4 et 2.5 de YunoHost seront passées en revue. Pour finir, seront présentés la nouvelle organisation, les travaux qui ont été menés sur l’infrastructure du projet, les nouveaux outils de développement et les futurs chantiers.

Forum Linux.debian/ubuntu Difficultés avec serveur et client VPN

Posté par . Licence CC by-sa
1
28
jan.
2017

Bonsoir à toutes et tous,

J'ai loué pour ma fille (et pour moi) un VPS chez OVH.

J'ai installé un VPN sur ce VPN suivant ce tutoriel : Turoriel VPN.

Selon les tests avec client.cfg et server.cfg, je n'ai aucune erreur.

Les DNS employés par défaut sur la configuration d'easy-rsa sont ceux d'openvpn.

Lorsque je veux naviguer sur le web avec ceux-ci, très peu de pages s'ouvrent, je ne peux même pas faire de recherches.

J'ai essayé de remplacer (...)

Forum Linux.debian/ubuntu [Postfix] Tester une configuration

Posté par (page perso) . Licence CC by-sa
1
16
jan.
2017

Bonjour à tous,

Je dispose aujourd'hui d'un serveur sur lequel j'aimerais placer un postfix pour héberger quelques noms de domaine.

Evidemment première étape, la documentation de Postfix, qui correspond bien à mon objectif (plusieurs domaines, utilisateurs virtuels). C'est très bien expliqué, et avec la documentation sur l'architecture du système ça passe très bien.

Maintenant, je passe sur la partie sur l'authentification SMTP, afin de pouvoir envoyer les mails depuis un PC sur Internet. Pour ne pas créer un serveur (...)

Forum général.cherche-logiciel Outil d'automatisation de taches

Posté par . Licence CC by-sa
1
7
déc.
2016

Bonjour,
Je cherche un outil de type serveur me permettant d'effectuer des tâches automatiques en open source.
J'aimerai que cette outil :
- qu'il fonctionne en mode démon (backend) sous GNU/Linux
- puisse être configurer depuis un navigateur web
- qu'il puisse faire un bon nombre de tâche définie (exemple pouvoir récupérer des fichiers en rsync/scp ou http, envoyer des mails d'alerte)
- qu'on puisse définir/enrichir de nouvelle tâche (via un DSL?)
- que ces tâches/actions puisse être déclencher via (...)

Forum général.général Questions autour de Turtl, l'alternative à Evernote

Posté par (page perso) . Licence CC by-sa
0
19
nov.
2016

Bonsoir,

J'ai installé Turtl sur un serveur sous Debian 8, et présentement, je fais face à deux problématiques:

  • La première est qu'une fois que j'ai mis en place un proxy pour l'accès à l'application, cela ne fonctionne pas en https malgré que l'accès est disponible via un navigateur donnant le message "Authentification échouée" (ce qui est normal lorsqu'on ne passe pas par l'application qui permet l'identification). Avec http cependant, cela fonctionne correctement via le proxy.

  • La seconde est que je (...)