« LINUX:MariaDB/Galera - Solution d'automatisation de démarrage » : différence entre les versions
(Page créée avec « ---- ''→ retour au menu de Galera : Cluster de MariaDB'' ---- __FORCETOC__ =But= Pour contourner cette limitation d'automatisation de démarrage du cluster Galera, j'ai créé deux services Systemd de type Timer, l'un pour MariaDB et l'autre pour Garb. Au lieu d'utiliser Systemd, on peut utiliser le système de Cron. ---- ''→ retour au menu de Galera : Cluster de MariaDB'' -... ») |
Aucun résumé des modifications |
||
Ligne 5 : | Ligne 5 : | ||
=But= | =But= | ||
Pour contourner cette limitation d'automatisation de démarrage du cluster Galera, j'ai créé deux services Systemd de type Timer, l'un pour MariaDB et l'autre pour Garb. Au lieu d'utiliser Systemd, on peut utiliser le système de Cron. | Pour contourner cette limitation d'automatisation de démarrage du cluster Galera, j'ai créé deux services Systemd de type Timer, l'un pour MariaDB et l'autre pour Garb. Au lieu d'utiliser Systemd, on peut utiliser le système de Cron. | ||
=MariaDB= | |||
Le programme est écrit script "bash" et en LUA. | |||
==Principe= | |||
Le script passe par une série de vérifications pour aboutir, si c'est nécessaire, au lancement du service MariaDB. | |||
* La procédure commence par vérifier si le service MariaDB est déjà lancé. Si c'est le cas, la situation est opérationnelle. | |||
* Dans le cas contraire, on recherche sur parmi les autres machines du cluster MariaDB grâce à une procédure écrite en LUA, s'il y en a une où MariaDB s'exécute. Si c'est le cas, on lance le service MariaDB. | |||
* Sinon on vérifie que le fichier d'état de Galera possède un "bootstrap" actif, si c'est le cas, on lance le service MariaDB en initialisant Galera. | |||
* Si ce n'est pas le cas, on récupère grâce à Rsyncd, les états de Galera sur toutes les machines du cluster MariaDB car c'est sur celle qui a le n° de séquence le plus haut qui lancera le service MariaDB en initialisant Galera après activation du "bootstrap". Pour effectuer cette étape, il faut que toutes les machines du cluster MariaDB soient démarrées et accessibles. Si elles ne sont pas toutes actives, on attend. | |||
Cette procédure tourne à intervalle régulier sur toutes les machines du cluster MariaDB. | |||
==Installation== | |||
Une partie de la procédure est écrite dans le langage de schript LUA. Il faut l'installer: | |||
dnf install lua | |||
dnf install lua-socket | |||
==Localisation des scripts== | |||
Comme précédemment, nous avions placé la base de données dans le répertoire "/produc/mysql". Et nous plaçons les scripts dans le répertoire "/produc/mysql.bat". | |||
==Fichier "hosts.txt"== | |||
Nous créons pour commencer le fichier "/produc/mysql.bat/hosts.txt". Il contiendra les noms des machines du cluster MariaDB. | |||
---- | |||
sv1.home.dom | |||
sv2.home.dom | |||
sv3.home.dom | |||
sv4.home.dom | |||
---- | |||
==Script LUA== | |||
Ce script sert à rechercher les machines du cluster où le service MariaDB s'exécute en essayant de se connecter à son port TCP 3306. | |||
Voici le script. Son contenu est similaire à celui présenté dans l'article sur le [[LINUX:Pacemaker - Détail sur le script de configuration LUA|Détail sur le script de configuration LUA]]. Nous avons nommé ce script "/produc/mysql.bat/mariadb.lua": | |||
---- | |||
#!/bin/lua | |||
| |||
socketbase = require("socket") | |||
sockettcp = socketbase.tcp() | |||
sockettcp:settimeout(1) | |||
port = 3306 | |||
| |||
nomfichierhost="./hosts.txt" | |||
fichierhost=io.open(nomfichierhost,"r") | |||
| |||
machines = {} | |||
i=0 | |||
| |||
for ligne in fichierhost:lines() | |||
do | |||
i=i+1 | |||
machines[i] = ligne | |||
end | |||
fichierhost:close() | |||
| |||
nomfichier="./mariadb.txt" | |||
fichier=io.open(nomfichier,"w") | |||
| |||
machinelocal = socketbase.dns.gethostname() | |||
| |||
for _, machine in ipairs( machines ) | |||
do | |||
if not (machine == machinelocal) then | |||
local SocketMariadb, errMariadb = sockettcp:connect(machine, port) | |||
if SocketMariadb then | |||
fichier:write("OK "..machine.."\n") | |||
sockettcp:close() | |||
end | |||
end | |||
end | |||
fichier:close() | |||
---- | |||
On y remarque le chargement du fichier "hosts.txt". Ce script sera appelé par le script écrit en "bash". | |||
Version du 12 avril 2023 à 14:45
→ retour au menu de Galera : Cluster de MariaDB
But
Pour contourner cette limitation d'automatisation de démarrage du cluster Galera, j'ai créé deux services Systemd de type Timer, l'un pour MariaDB et l'autre pour Garb. Au lieu d'utiliser Systemd, on peut utiliser le système de Cron.
MariaDB
Le programme est écrit script "bash" et en LUA.
=Principe
Le script passe par une série de vérifications pour aboutir, si c'est nécessaire, au lancement du service MariaDB.
- La procédure commence par vérifier si le service MariaDB est déjà lancé. Si c'est le cas, la situation est opérationnelle.
- Dans le cas contraire, on recherche sur parmi les autres machines du cluster MariaDB grâce à une procédure écrite en LUA, s'il y en a une où MariaDB s'exécute. Si c'est le cas, on lance le service MariaDB.
- Sinon on vérifie que le fichier d'état de Galera possède un "bootstrap" actif, si c'est le cas, on lance le service MariaDB en initialisant Galera.
- Si ce n'est pas le cas, on récupère grâce à Rsyncd, les états de Galera sur toutes les machines du cluster MariaDB car c'est sur celle qui a le n° de séquence le plus haut qui lancera le service MariaDB en initialisant Galera après activation du "bootstrap". Pour effectuer cette étape, il faut que toutes les machines du cluster MariaDB soient démarrées et accessibles. Si elles ne sont pas toutes actives, on attend.
Cette procédure tourne à intervalle régulier sur toutes les machines du cluster MariaDB.
Installation
Une partie de la procédure est écrite dans le langage de schript LUA. Il faut l'installer:
dnf install lua dnf install lua-socket
Localisation des scripts
Comme précédemment, nous avions placé la base de données dans le répertoire "/produc/mysql". Et nous plaçons les scripts dans le répertoire "/produc/mysql.bat".
Fichier "hosts.txt"
Nous créons pour commencer le fichier "/produc/mysql.bat/hosts.txt". Il contiendra les noms des machines du cluster MariaDB.
sv1.home.dom sv2.home.dom sv3.home.dom sv4.home.dom
Script LUA
Ce script sert à rechercher les machines du cluster où le service MariaDB s'exécute en essayant de se connecter à son port TCP 3306.
Voici le script. Son contenu est similaire à celui présenté dans l'article sur le Détail sur le script de configuration LUA. Nous avons nommé ce script "/produc/mysql.bat/mariadb.lua":
#!/bin/lua socketbase = require("socket") sockettcp = socketbase.tcp() sockettcp:settimeout(1) port = 3306 nomfichierhost="./hosts.txt" fichierhost=io.open(nomfichierhost,"r") machines = {} i=0 for ligne in fichierhost:lines() do i=i+1 machines[i] = ligne end fichierhost:close() nomfichier="./mariadb.txt" fichier=io.open(nomfichier,"w") machinelocal = socketbase.dns.gethostname() for _, machine in ipairs( machines ) do if not (machine == machinelocal) then local SocketMariadb, errMariadb = sockettcp:connect(machine, port) if SocketMariadb then fichier:write("OK "..machine.."\n") sockettcp:close() end end end fichier:close()
On y remarque le chargement du fichier "hosts.txt". Ce script sera appelé par le script écrit en "bash".
→ retour au menu de Galera : Cluster de MariaDB