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


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.

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.

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é de 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).







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