LINUX:Pacemaker - Paramétrage des services en Failover

De WIKI sur Linux (ADB)
Aller à la navigation Aller à la recherche

retour à Pacemaker - Serveurs en Failover


But

Maintenant que le nécessaire est en place, nous allons y placer quelques éléments pratiques: quelques services classiques. Mais avant d'aborder la suite de la configuration de Pacemaker, il nous faut les paramétrer un minimum afin de tester cet ensemble. Pour ne pas alourdir cet article, nous les avons détaillés à part.


Services

Nous allons paramétrer quelques éléments:

  • les certificats qui seront utilisés par Apache, Postfix et Dovecot
  • PHP, langage de script, utilisé par Apache
  • le service Web, Apache
  • le service de base de données, Mariadb souvent utilisé dans les applications Web tel WordPress
  • le service de messagerie, Postfix
  • le service de relevé de courrier, Dovecot

Toutes ces services seront actifs sur la machine qui aura la main, celle où Drbd est à l'état actif ou Primary. Ces paramétrages seront identiques sur les deux machines du cluster afin que l'une ou l'autre puissent prendre la main à tout moment.

Les données de ces services seront placés sur l'espace partagé.


Du côté de la machine en attente, il faut qu'un service minimum de messagerie soit actif pour pouvoir relayer les messages du système. Une configuration minimale de Postfix sera prévue à cet effet.


Certificats

Pour les services Apache, Postfix et Dovecot, il nous faut des certificats, ce seront les mêmes pour ces trois services. Nous nous utiliserons les procédures présentées dans les articles concernant la Création d'une CA privée (V1) et l'Extension de la CA privée (V3).

Dans notre cas, le nom du serveur est "cluster.home.dom" et son adresse IP est "192.168.1.73". Nous allons passer en revue l'ensemble des commandes qui vont générer les fichiers nécessaires.

  • Création de la clé de l’autorité de certification (CA): ca.key
openssl genrsa -out ca.key -passout pass:MOTDEPASSESECRET 2048 
  • Création du certificat de l’autorité de certification (CA): ca.home.crt
openssl req -new -days 3650 -x509 -out ca.home.crt -passin pass:MOTDEPASSESECRET -key ca.key -subj '/CN=CA.home.dom/emailAddress=pdupont@gmail.com/OU=Dupont/O=Home/L=Namur/ST=Belgique/C=BE'
  • Création du n° de série des certificats générés
echo "01" > ca.home.srl
  • Création de la clé du serveur "cluster.home.dom": cluster.key
openssl genrsa -out cluster.key 2048
  • Création du fichier pour la création de certificats de version 3: reqv3.cnf

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS = cluster.home.dom
IP = 192.168.1.73

  • Création de la requête de certificats pour le serveur "cluster.home.dom": cluster.home.csr
openssl req -new -key cluster.key -out cluster.home.csr -subj '/CN=cluster.home.dom/emailAddress=pdupont@gmail.com/OU=Dupont/O=Home/L=Namur/ST=Belgique/C=BE'
  • Création du certificat du serveur "cluster.home.dom": cluster.home.crt
openssl x509 -req -days 3650 -extensions v3_req -extfile reqv3.cnf -in cluster.home.csr -out cluster.home.crt -passin pass:MOTDEPASSESECRET -CA ca.home.crt -CAkey ca.key -CAserial ca.home.srl
  • Création de la chaîne de certificats (CA et serveur): cluster.home.pem
cat cluster.home.crt ca.home.crt > cluster.home.pem


Au final, nous aurons besoins de deux fichiers:

  • la clé du serveur: cluster.key
  • la chaîne des deux certificats (CA et serveur): cluster.home.pem

Sur les deux serveurs du cluster, nous créons le répertoire "/etc/pki/WEB" et en dessous les répertoires "private", où on copie la clé, et "certs", où on copie la chaîne des certificats.


PHP

On installe le langage de script PHP


Service Web - Apache

Configuration centrale

Le fichier de configuration principal est "/etc/httpd/conf/httpd.conf". Nous n'y changerons que peu d'options.

En premier, nous désactivons toutes les sections et options qui font référence au répertoire par défaut: "/var/www".

Par défaut, tous les fichiers complémentaires pour les sites et applications se retrouvent dans le répertoire "/etc/httpd/conf.d". Nous avons l'habitude de créer un répertoire latéral où on met ce qui nous est nécessaire, adaptés à nos besoins et en évitant ainsi les configurations inutiles. Nous nommons ce répertoire "/etc/httpd/conf.d.web" avec les droits adaptés.

Dans le fichier "/etc/httpd/conf/httpd.conf", il faut adapter cette inclusion en conséquence. En fin de fichier, la ligne:


IncludeOptional conf.d/*.conf

devient:


IncludeOptional conf.d.web/*.conf

Ne pas oublier d'installer le module qui permet l'utilisation d'HTTPS:

dnf install mod_ssl


Configurations latérales

Ces fichiers de configuration sont mis dans le répertoire "/etc/httpd/conf.d.web".

  • On y place le fichier concernant PHP sans modification "php.conf" qui se trouve à l'origine dans le répertoire "/etc/httpd/conf.d".
  • Le service Http pourra être crypté; à cet effet, on y place le fichier concerné "ssl.conf" avec peu de modifications. Il se trouve à l'origine dans le répertoire "/etc/httpd/conf.d". Les seules modifications concernent la clé et les certificats créés au début.

Ces lignes deviennent:


SSLCertificateFile /etc/pki/WEB/certs/cluster.home.pem
SSLCertificateKeyFile /etc/pki/WEB/private/cluster.key

  • On va définir la base de notre site Web dans l'espace partage. On crée le répertoire "/data/web" avec les droits nécessaires.
chown -R apache:apache /data/web

ATTENTION: Faire cette opération seulement sur la machine active quand l'espace partagé est monté sur "/data".

  • On crée ensuite le fichier de configuration du point d'entrée du site.

Voici le contenu de ce fichier que nous avons nomme "root.conf" placé dans le répertoire "/etc/httpd/conf.d.web".


DocumentRoot "/data/web"
<Directory "/data/web">
 <IfModule mod_authz_core.c>
  Require all granted
 </IfModule>
</Directory>

  • Enfin on crée un script qui sera interprété et affiché dans notre explorateur Web. Il fait référence à PHP pour afficher le nom de la machine hôte active. Ce fichier se nomme "index.php" et est placé dans le répertoire "/data/web".

<!DOCTYPE HTML >
<html>
 <body>
  <?php
   $host=gethostname();
   printf("Nom du serveur: %s", $host);
  ?>
  <br>
 </body>
</html>


Service de base de données - Mariadb

On installe le service de base de données Mariadb Server.

Les fichiers de base de données seront placés dans l'espace partagé. On y crée le répertoire "/data/mysql". On n'oublie pas de lui attribuer les droits:

chown -R mysql:mysql /data/mysql

ATTENTION: Faire cette opération seulement sur la machine active quand l'espace partagé est monté sur "/data".

Dans le fichier de configuration de ce service "/etc/my.conf.d/mariadb-server.cnf", on change la ligne:


datadir=/var/lib/mysql

par:


datadir=/data/mysql

On peut lancer une première fois ce service et le sécuriser et ensuite l'arrêter. La base de données sera initialisée.


Service de messagerie étendu - Postfix

Nous paramétrons ensuite le service de messagerie qui présente tous les services à l'écoute comme expliqué dans l'article Services à l'écoute. Certains services ont un transfert crypté en utilisant les certificats créés au début.

Ne pas oublier d'installer le support du cryptage SSL:

dnf install cyrus-sasl cyrus-sasl-plain

Toute adresse mail de ce serveur seront du domaine "failover.dom" (exemple: pour l'utilisateur "pdupont", "pdupont@failover.dom"). Les utilisateurs correspondront à des comptes Linux et leurs Postoffice se situera dans leur espace.


Voici le fichier de paramètres "/etc/postfix/main.cf":


# paramètres personnalisés
relayhost = [192.168.1.100]
inet_protocols = ipv4
inet_interfaces = all
home_mailbox = Maildir/
myorigin=failover.dom
mydestination = failover.dom
smtpd_tls_cert_file = /etc/pki/WEB/certs/cluster.home.pem
smtpd_tls_key_file = /etc/pki/WEB/private/cluster.key
# paramètres d'origine
compatibility_level = 3.7
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
        PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
        ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix


Et voici le fichier des processus, "/etc/postfix/master.cf":


# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
# processus d'origine
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd
# processus personnalisés à l'écoute
smtp      inet  n       -       n       -       -       smtpd
 -o smtpd_tls_security_level=none
 -o smtpd_relay_restrictions=permit_auth_destination,defer_unauth_destination
submission inet  n       -       n       -       -       smtpd
# authentification
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_sasl_security_options=noanonymous
 -o smtpd_sasl_type=dovecot
 -o smtpd_sasl_path=private/auth
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
 -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# cryptage
 -o smtpd_tls_security_level=may
 -o smtpd_tls_auth_only=no
smtps      inet  n       -       n       -       -       smtpd
 -o smtpd_tls_security_level=encrypt
 -o smtpd_tls_wrappermode=yes
 -o smtpd_relay_restrictions=permit_auth_destination,defer_unauth_destination

L'authentification fait appel à Dovecot pour cette vérification.


Concernant le fichier "/etc/aliases", nous avons ajouté à la fin la ligne:


root: adebast@home.dom

Pour un transfert des messages systèmes au serveur de messagerie de gestion.


Service de relevé des messages - Dovecot

Nous nous basons sur la configuration de base présentée dans l'article sur la Dovecot-Configuration du serveur d'accès aux messages. On va y ajouter le support SSL/TLS en utilisant les certificats créés au début et l'authentification demandée par Postfix (ci-dessus).


Nous allons passer en revue des fichiers de configuration.

Contenu du fichier principal "/etc/dovecot/dovecot.conf":


protocols = imap pop3
listen = *
!include conf.d.mail/*.conf

Au contraire de la configuration par défaut, nous plaçons les fichiers complémentaires dans un répertoire latéral "/etc/dovecot/conf.d.mail".

Contenu du fichier "/etc/dovecot/conf.d.mail/10-master.conf":


service imap-login {
 inet_listener imap {
   port = 143
   ssl = no
 }
 inet_listener imaps {
   port = 993
   ssl = yes
 }
}
 
service pop3-login {
 inet_listener pop3 {
   port = 110
   ssl = no
 }
 inet_listener pop3s {
   port = 995
   ssl = yes
 }
}
 
service auth {
 # Postfix smtp-auth
 unix_listener /var/spool/postfix/private/auth {
   mode = 0666
   user = postfix
   group = postfix
 }
}

pour la définition des protocols et de la demande d'authentification de la part de Postoffice.

Contenu du fichier "/etc/dovecot/conf.d.mail/10-ssl.conf":


ssl = yes
ssl_cert = </etc/pki/WEB/certs/cluster.home.pem
ssl_key = </etc/pki/WEB/private/cluster.key
ssl_cipher_list = PROFILE=SYSTEM

pour utiliser les certificats créés au début.

Contenu du fichier "/etc/dovecot/conf.d.mail/10-mail.conf":


mail_location = maildir:~/Maildir
namespace inbox {
 inbox = yes
}

pour l'emplacement du Postoffice dans l'espace de l'utilisateur Linux.

Contenu du fichier "/etc/dovecot/conf.d.mail/15-mailboxes.conf":


namespace inbox {
 mailbox Drafts {
   special_use = \Drafts
 }
 mailbox Junk {
   special_use = \Junk
 }
 mailbox Trash {
   special_use = \Trash
 }
 mailbox Sent {
   special_use = \Sent
 }
 mailbox "Sent Messages" {
   special_use = \Sent
 }
}

Contenu du fichier "/etc/dovecot/conf.d.mail/10-auth.conf":


disable_plaintext_auth = no
auth_mechanisms = plain login
!include auth-system.conf.ext

Contenu du fichier "/etc/dovecot/conf.d.mail/auth-system.conf.ext":


passdb {
 driver = pam
}
 
userdb {
 driver = passwd
}

pour l'utilisation des utilisateurs Linux en tant que comptes.


Comptes de messagerie

Les comptes de messagerie correspondent aux utilisateurs Linux.

Or le Postoffice de ces comptes se trouvent dans l'espace de ces utilisateurs donc ces utilisateurs doivent se retrouver dans l'espace partagé "/data".

Nous créons donc un répertoire spécifique pour les accueillir "/data/home".

Voici un exemple de création de compte en ligne de commande:

adduser -b /data/home -u 1002 -g users -s /sbin/nologin -c "Dupont Pierre" pdupont

Ici pour l'utilisateur pdupont.

Il faut incrémenter le n° d'utilisateur pour chaque utilisateur (ici "-u 1002").

Et ensuite pour lui attribuer un mot de passe:

passwd pdupont

ATTENTION: Faire ces opérations seulement sur la machine active quand l'espace partagé est monté sur "/data".

Ces comptes doivent être présents sur les deux machines et identiques surtout le n° d'utilisateur et le mot de passe. Comme cette commande "adduser" doit créer l'espace utilisateur dans le répertoire "/data/home", il faut que l'espace partagé soit monté. Autre solution, recopiez les concernées des fichiers "/etc/passwd" et /etc/shadow" d'une machine à l'autre avec un éditeur de texte.


Service de messagerie restreint à l'envoi - Postfix

Sur la machine qui n'a pas la main, on garde un service de messagerie restreint à l'envoi des mails. On utilise la même configuration présentée dan l'article sur la Configuration de base de Pacemaker. Mais il faut la placer autre part. Nous allons la placer dans un nouveau répertoire "/etc/postfix.base". On y place les deux fichiers, "main.cf" et "master.cf".

Pour rappel voici le contenu du fichier "/etc/postfix.base/main.cf":


# nouveaux paramètres
relayhost = [192.168.1.110]
inet_protocols = ipv4
# paramètres par défaut
compatibility_level = 3.7
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
inet_interfaces = localhost
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
    ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
meta_directory = /etc/postfix
shlib_directory = /usr/lib64/postfix


Et voici le contenu du fichier "/etc/postfix.base/main.cf":


# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
pickup    unix  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
rewrite   unix  -       -       n       -       -       trivial-rewrite
bounce    unix  -       -       n       -       0       bounce
defer     unix  -       -       n       -       0       bounce
trace     unix  -       -       n       -       0       bounce
verify    unix  -       -       n       -       1       verify
flush     unix  n       -       n       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       n       -       -       smtp
showq     unix  n       -       n       -       -       showq
error     unix  -       -       n       -       -       error
retry     unix  -       -       n       -       -       error
discard   unix  -       -       n       -       -       discard
local     unix  -       n       n       -       -       local
lmtp      unix  -       -       n       -       -       lmtp
anvil     unix  -       -       n       -       1       anvil
scache    unix  -       -       n       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd


Il faut maintenant créer un service Postfix spécial pour cette configuration restreinte. Dans le répertoire "/usr/lib/systemd/system", on copie le fichier de configuration du service Postfix "postfix.service" dans le fichier "postfix-base.service". On va le modifier en spécifiant cet autre répertoire de configuration (en gras).


[Unit]
Description=Postfix Mail Transport Agent
After=syslog.target network.target
Conflicts=sendmail.service exim.service
 
[Service]
Type=forking
PIDFile=/var/spool/postfix/pid/master.pid
EnvironmentFile=-/etc/sysconfig/network
PrivateTmp=true
CapabilityBoundingSet=~ CAP_NET_ADMIN CAP_SYS_ADMIN CAP_SYS_BOOT CAP_SYS_MODULE
ProtectSystem=true
PrivateDevices=true
ExecStartPre=-/usr/sbin/restorecon -R /var/spool/postfix/pid/master.pid
ExecStartPre=-/usr/libexec/postfix/aliasesdb
ExecStartPre=-/usr/libexec/postfix/chroot-update
ExecStart=/usr/sbin/postfix -c /etc/postfix.base start
ExecReload=/usr/sbin/postfix -c /etc/postfix.base reload
ExecStop=/usr/sbin/postfix -c /etc/postfix.base stop
 
[Install]
WantedBy=multi-user.target

Il faut recharger la configuration de Systemd:

systemctl daemon-reload




retour à Pacemaker - Serveurs en Failover