This is the old XigmaNAS forum in read only mode,
it will taken offline by the end of march 2021!



I like to aks Users and Admins to rewrite/take over important post from here into the new fresh main forum!
Its not possible for us to export from here and import it to the main forum!

[RESOLU] Piloter l'arrêt de plusieurs Nas4Free sur UPS

French community

Moderators: velivole18, ernie, mtiburs

Forum rules
Set-Up GuideFAQsForum Rules
Post Reply
User avatar
velivole18
Forum Moderator
Forum Moderator
Posts: 647
Joined: 14 Jul 2012 20:23
Location: France
Status: Offline

[RESOLU] Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by velivole18 »

Bonjour,

Voici le tuto que j'ai publié il y a quelques minutes, puis enlevé suite à la constatation qu'il ne marche pas à tous les coups !
Il semblerait que mes tests montrent que le résultat attendu, c'est à dire l'arrêt des serveurs "esclaves" avant l'arrêt du serveur "maître" ne soit pas reproductible plus d'une fois.
Je pense qu'il y a un problème de validité de la clé publique d'une fois sur l'autre pour la connexion ssh sans mot de passe.
Il me semble que mtiburs avait rencontré ce genre de problème.
Je vais faire des recherches sur le sujet et tenter de résoudre le problème.
Si mtiburs peut m'aiguiller à ce sujet, ce n'est pas de refus.
Veuillez m'excuser pour ma publication hâtive de ce tuto qui pour l'instant ne fonctionne pas toujours.
Le sujet reste ouvert et reste à l'état de post jusqu'à la résolution du problème.

Cordialement.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Voici la solution pour arrêter proprement un ensemble de serveurs Nas4Free tous connectés sur le même système de "batterie/onduleur" UPS.
On part du principe que cet UPS sait avertir un serveur de la fin iminnente de sa fourniture en énergie électrique suite à une coupure de courant et donc à la décharge de ses batteries au bout d'un certain temps, via un câble série ou USB.
Le service UPS est donc à activer sur le serveur Nas4Free relié à l'UPS, ce dernier étant appelé par la suite de ce tuto le serveur "maître".

Si vous avez besoin d'aide, merci de poster sur le [Topic unique] Piloter l'arrêt de plusieurs Nas4Free sur UPS


Testé dans les conditions suivantes :
serveur "maître" : NAS4Free 9.2.0.1 - Shigawire (revision 972) x64-embedded
111909 RSDT1411 AMD Athlon(tm) 64 Processor 4000+ 4096MiB RAM - HDD = 2 x 4 To in ZFS mirroring + 2 x (2 x 2To in ZFS mirroring).
serveur esclave : NAS4Free 9.2.0.1 - Shigawire (revision 972) x86-embedded sur Intel(R) Pentium(R) 4 CPU 2.40GHz - Hewlett-Packard 0840 - BIOS Phoenix Technologies Ltd. version: JP.W1.06US 06/30/04 - ZFS 4 x 80Go en Raid1 + 1 x 80 Go en spare.
Batterie/Onduleur : UPS EATON Ellipse MAX 1100


Tout d'abord voici ma configuration du service UPS :
  • Identifiant : ups
  • Pilote : usbhid-ups
  • Port : auto
  • Description : EATON Ellipse Max 1100 USBS FR
  • Mode d'arrêt : Batterie faible sur le système UPS
  • Destinataire de l'email : mon adresse email
  • Sujet : UPS notification from %h le %d !
Soit un serveur "maître" en 192.168.0.20 et un serveur "esclave" en 192.168.0.21
Ce qui sera fait sur le serveur "esclave" peut être fait de la même façon sur d'autres serveurs "esclaves" si on possède plus de 2 serveurs.
Le principe est qu'un serveur parmi l'ensemble des serveurs soit le "maître" et les autres les serveurs "esclaves".

Tous les serveurs ("maître" et "esclaves") sont électriquement branchés sur l'UPS.
Le serveur "maître" est en plus branché sur l'UPS via un câble USB ou série RS232, contrairement aux serveurs "esclaves".
Le serveur "maître" est configuré via le service UPS pour s'arrêter lorsque la batterie de l'UPS est presque déchargée et ne peut plus fournir l'énergie à l'ensemble des serveurs Nas4Free.

Le principe est d'installer sur le serveur "maître" un script shell qui va arrêter dans sa phase d'arrêt les serveurs "esclaves" via la commande "shutdown" activée sur chaque serveur "esclave" en ssh.
Pour cela, il faut le script shell suivant à un emplacement du serveur "maître".

Code: Select all

#!/bin/sh

# Ajouter 1 ligne supplémentaire par serveur Nas4Free "esclave" avec leur adresse correctement renseignée
# ssh root@192.168.xx.xx "/sbin/shutdown -h now" >> /mnt/pool1/shutdown.log
ssh root@192.168.0.21 "/sbin/shutdown -h now" >> /mnt/pool1/shutdown.log
echo -e "shutdown du serveur le `date`\n----------\n" >> /mnt/pool1/shutdown.log
Ce script peut être créé avec l'éditeur de texte vi en étant connecté en ssh sur le serveur "maître" ou directemment en mode console sur le serveur "maître".
Il sera rendu exécutable, après création, par la commande "chmod".

Pour l'exemple, je propose simplement l'emplacement "/mnt/pool1" pour y installer le script et les traces d'exécution.

Lorsque le serveur "maître" va s'arrêter, il exécutera avant arrêt le script "/mnt/pool1/shutdown.sh" en tracant dans le log "/mnt/pool1/shutdown.log" les actions réalisées.
Dans ce script "/mnt/pool1/shutdown.sh" nous activons l'arrêt de chaque serveur "esclave" via ssh avec la commande "shutdown".

Pour que le serveur puisse accéder aux serveurs esclaves en ssh, il faut l'autoriser à y accéder sans que le mot de passe "root" n'ai besoin d'être saisi.
Pour cela il faut configurer sur chaque serveur "esclave" une clé publique préalablement créée.
Voici donc la manip a réaliser, ici pour l'exemple, 1 serveur Nas4Free "esclave" en 192.168.0.21 et 1 serveur mare en 192.168.0.20 :

1 - Se connecter en ssh sur le serveur "maître" à partir d'un poste client (ssh root@192.168.0.20), ou se positionner directement en mode console sur le serveur "maître" :
On est donc en root dans le répertoire "/root"

2 - créer le script "/mnt/pool1/shutdown.sh" :
vi /mnt/pool1/shutdown.sh
... saisir les lignes du script indiqué ci-dessus avec les adresses correctes de chaque serveur "esclave" ...
sauvegarder et fermer "/mnt/pool1/shutdown.sh" sous vi.

3 - rendre le script "/mnt/pool1/shutdown.sh" exécutable :
chmod +x "/mnt/pool1/shutdown.sh"

4 - Générer les clés d'accès entre serveur maître et serveur esclave :
ssh-keygen -t rsa
puis 3 fois Entrée

Cette commande génère une clé publique et une clé privée (dans l'ordre, id_rsa.pub et id_rsa) dans le dossier "/root/.ssh" du serveur "maître".

5 - A partir de la session présente sur la machine "maître", se connecter en ssh sur la machine "esclave"
ssh root@192.168.0.21 (avec saisie du mot de passe root de la machine esclave, pour la dernière fois ...)

6 - Sur la machine "esclave" :
Créer le répertoire "/root/.ssh"
mkdir /root/.ssh

puis, se déconnecter de la machine "esclave"
exit

7 - de nouveau sur la machine "maître" :
il faut copier la clé publique (id_rsa.pub) dans un fichier "authorized_keys" dans le dossier "/root/.ssh" de la machine "esclave".
scp /root/.ssh/id_rsa.pub 192.168.0.21:/root/.ssh/authorized_keys

8 - se re-connecter sur le serveur "esclave" et dans le même temps vérifier que la connexion ne demande plus de mot de passe :
ssh root@192.168.0.21

9 - sur le serveur esclave :
sauvegarder le répertoire /root/.ssh sous "/mnt/pool1" par exemple
cp -R /root/.ssh /mnt/pool1/.ssh

10 - se déconnecter du serveur esclave.
exit

11 - Sur le webgui du serveur "maître" :
Dans "Système|Avancé|Scripts" de commande" positionner l'exécution du script "/mnt/pool1/shutdown.sh" dans la phase d'arrêt du serveur maître.

12 - Sur le webgui du serveur "esclave" :
Dans "Système|Avancé|Scripts" de commande" positionner l'exécution de la commande suivante dans la phase de "Postinit" du serveur "esclave" :
cp -R /mnt/pool1/.ssh /root/.ssh

Dans "Système|Avancé|Scripts" de commande" positionner l'exécution de la commande suivante dans la phase de "Arrêt" du serveur "esclave" :
echo "shutdown du serveur le `date`" >> /mnt/pool1/shutdown.log

Cette dernière commande ne fait que tracer l'arrêt du serveur "esclave" dans le fichier "/mnt/pool1/shutdown.log" du serveur "escalve".

Le test peut se faire en arrêtant le serveur "maître" via le webgui par exemple, normalement le(s) serveur(s) "esclave(s)" doivent s'arrêter avant le serveur "maître".

Merci à Benjamin SECLIER pour son blog et son aide sur la connexion ssh sans mot de passe.
11.2.0.4 - Omnius (revision 6026) x64-embedded
111909 RSDT1411 AMD Athlon(tm) 64 Processor 4000+ 4096MiB RAM - HDD 2 x 6 To in ZFS mirroring + 2 x (2 x 4To in ZFS mirroring) - SSD 32Go - UPS EATON Ellipse MAX 1100.

User avatar
velivole18
Forum Moderator
Forum Moderator
Posts: 647
Joined: 14 Jul 2012 20:23
Location: France
Status: Offline

Re: Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by velivole18 »

Bonjour,

Après de multiples tests, il semble que cela ne fonctionne qu'une seule fois après avoir recopié la clé publique sur le serveur "esclave".
Après redémarrage des serveurs "maître" et "esclave", il faut de nouveau refaire la manip de génération des clés et copie de la clé publique nouvellement générée sur le serveur "esclave" pour que cela re-fonctionne de nouveau.
La recopie du répertoire /mnt/pool1/.ssh en /root/.ssh au lancement du serveur "esclave" ne donne pas satisfaction ...
Bon, je vais dormir un peu et me re-pencherai sur le problème demain soir.

Cordialement.
11.2.0.4 - Omnius (revision 6026) x64-embedded
111909 RSDT1411 AMD Athlon(tm) 64 Processor 4000+ 4096MiB RAM - HDD 2 x 6 To in ZFS mirroring + 2 x (2 x 4To in ZFS mirroring) - SSD 32Go - UPS EATON Ellipse MAX 1100.

laster13
PowerUser
PowerUser
Posts: 995
Joined: 01 Jun 2013 19:15
Location: France-Marseille
Status: Offline

Re: Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by laster13 »

Bonjour velivole,

Si cela peut t aider ;)

viewtopic.php?f=35&t=7554
laster13 wrote:Bonjour,

Effectivement après reboot le dossier .ssh disparait. Je ne suis pas sur qu'en full cela fonctionne non plus.

De mon coté j'ai exploité la très bonne idée de ernie, de passer par un script et cela fonctionne même après redémarrage de Nas4free.

J'ai procédé de la même façon que mon post au dessus. Par contre je me suis aperçu que pour fonctionner il fallait que le dossier .ssh soit en 700. Par ailleurs j'ai crée un dossier root sur mon pool ainsi qu un dossier .ssh

Code: Select all

mkdir /mnt/pool1/root

Code: Select all

mkdir /mnt/pool1/root/.ssh

Code: Select all

chmod -R 700 /mnt/pool1/root/.ssh
Et dans le dossier "/mnt/pool1/root/.ssh" j'ai collé le fichier "authorized_keys" crée dans le post précédent. chez moi il est en droit 644.

Ensuite pour le script, j'ai crée sur le pool un fichier nommé "essai"

Code: Select all

touch /mnt/pool1/essai

Code: Select all

nano /mnt/pool1/essai
Et dedans j'ai collé le script suivant:

Code: Select all

#!/bin/sh
mkdir /root/.ssh
chmod -R 700 /root/.ssh 
cp /mnt/pool1/root/.ssh/authorized_keys /root/.ssh/authorized_keys
Ensuite on rend le script executable

Code: Select all

chmod +x /mnt/pool1/essai
voila plus qu'à créer un postinit dans Système|Avancé|Scripts de commande

Code: Select all

/mnt/pool1/essai
Et à chaque redémarrage le dossier .ssh avec le fichier "authorized_keys" seront recrées à la racine

User avatar
velivole18
Forum Moderator
Forum Moderator
Posts: 647
Joined: 14 Jul 2012 20:23
Location: France
Status: Offline

Re: Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by velivole18 »

Bonjour,

Merci laster13.
Effectivement, la seule différence est que mon répertoire .ssh n'est pas en 700.
Je teste cela dès que je suis rentré chez moi ce soir.

Cordialement.
11.2.0.4 - Omnius (revision 6026) x64-embedded
111909 RSDT1411 AMD Athlon(tm) 64 Processor 4000+ 4096MiB RAM - HDD 2 x 6 To in ZFS mirroring + 2 x (2 x 4To in ZFS mirroring) - SSD 32Go - UPS EATON Ellipse MAX 1100.

User avatar
velivole18
Forum Moderator
Forum Moderator
Posts: 647
Joined: 14 Jul 2012 20:23
Location: France
Status: Offline

Re: Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by velivole18 »

Bonsoir,

J'ai fait exactement comme expliqué dans ton post.
Je n'en étais pas très loin.
J'ai créé le répertoire /mnt/pool1/root/.ssh pour la sauvegarde.
J'ai repris le script que tu indiques.
Lors de la 1ère session, cela fonctionne.
Après une extinction des 2 serveurs, la connexion ssh entre le serveur "maître" et le serveur "esclave" n'est plus automatique et elle me demande ceci :

Code: Select all

The authenticity of host '192.168.0.21 (192.168.0.21)' can't be established.
DSA key fingerprint is b2:d0:99:cb:6e:b2:53:95:4d:f6:b3:02:1d:bc:36:db.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)?
Les clés privées et publiques ne sont-elles plus en accord après un redémarrage des serveurs, même avec la recopie de la sauvegarde en /root/.ssh ?

Cordialement.
11.2.0.4 - Omnius (revision 6026) x64-embedded
111909 RSDT1411 AMD Athlon(tm) 64 Processor 4000+ 4096MiB RAM - HDD 2 x 6 To in ZFS mirroring + 2 x (2 x 4To in ZFS mirroring) - SSD 32Go - UPS EATON Ellipse MAX 1100.

User avatar
velivole18
Forum Moderator
Forum Moderator
Posts: 647
Joined: 14 Jul 2012 20:23
Location: France
Status: Offline

Re: Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by velivole18 »

Bonsoir,

J'ai trouvé la solution.
Il faut aussi sauvegarder le .ssh du serveur "maître" et le restaurer au démarrage.
Je corrige mon tuto et le publie.
Merci laster13.

Cordialement.
11.2.0.4 - Omnius (revision 6026) x64-embedded
111909 RSDT1411 AMD Athlon(tm) 64 Processor 4000+ 4096MiB RAM - HDD 2 x 6 To in ZFS mirroring + 2 x (2 x 4To in ZFS mirroring) - SSD 32Go - UPS EATON Ellipse MAX 1100.

User avatar
ernie
Forum Moderator
Forum Moderator
Posts: 1458
Joined: 26 Aug 2012 19:09
Location: France - Val d'Oise
Status: Offline

Re: [RESOLU] Piloter l'arrêt de plusieurs Nas4Free sur UPS

Post by ernie »

Cool cela va m'aider aussi :)
NAS 1&2:
System: GA-6LXGH(BIOS: R01 04/30/2014) / 16 Go ECC
XigmaNAS 12.1.0.4 - Ingva (revision 7743) embedded
NAS1: Xeon E3 1241@3.5GHz, 2HDD@8To/mirror, 1SSD cache, Zlog on mirror, 1 UFS 300 Go
NAS2: G3220@3GHz, 2x3HDD@2To/strip+raidz1, 1SSD cache, Zlog on mirror
UPS: APC Back-UPS RS 900G
Case : Fractal Design XL R2

Extensions & services:
NAS1: OBI (Plex, BTSync, zrep, rclone, themes), nfs, smb, UPS,
NAS2: OBI (zrep (backup mode), themes)

Post Reply

Return to “Français”