« LINUX:MariaDB/Galera - Solution d'automatisation de démarrage » : différence entre les versions

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche
(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 à 15: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