DSH simplifie la gestion de systèmes Unix multiples, en permettant aux utilisateurs d'exécuter une seule commande sur plusieurs systèmes.

Si vous avez toujours voulu utiliser une commande sur plusieurs systèmes AIX, ou vérifier ces systèmes pour voir si un service spécifique est actif, ne cherchez pas plus loin. La commande  "Distributed Shell" (dsh) peut être utilisée pour exécuter des commandes sur plusieurs systèmes en parallèle. Par exemple, si vous avez besoin de vérifier la date et l'heure de votre environnement, vous pouvez utiliser DSH pour exécuter la commande date sur l'ensemble de vos systèmes AIX en une seule fois.

Installation

Sous AIX DSH est livré avec le fileset suivant csm.dsh. Les filesets du "Cluster Management System" sont nécessaires pour pouvoir faire du "Dynamic Logical Partitioning". Le binaire du DSH se trouve sous /opt/csm/bin/dsh et un lien symbolique est créé sous /usr/bin

Garder en tête que l'utilisation du DSH se fera en règle générale sur un serveur d'administration central, très souvent votre serveur NIM (Network Installation Manager).

Pour utiliser le DSH, il vous faut au préalable configurer l'environnement SSH sur l'ensemble des serveurs que vous voudrez administrer. Cela suppose que la clé publique du serveur central soit ajoutée dans le fichier authorized_keys de chacun des serveurs.

A l'instant où vous pouvez exécuter une  commande sur l'ensemble de vos systèmes sans avoir à taper le mot de passe, vous êtes prêt à utiliser le "Distributed Shell"

Configuration

Un certain nombre de variables d'environnement sont nécessaires au bon fonctionnement du DSH. Pour cela il vous faudra mettre à jour votre fichier .profile (si vous utilisez KSH) ou votre .cshrc (si vous utilisez CSH).

Exemple du KSH

export DSH_NODE_RSH=/usr/bin/ssh
export WCOLL=/home/ggrymon/wcolls/prod_aix
export DSH_NODE_OPTS="-q"

La variable DSN_NODE_RSH indique quelle est la commande distante qui sera utilisée par le DSH. Dans notre cas nous utiliserons la commande SSH pour nous connecter aux systèmes distants.

La variable WCOLL (aussi appelée "working collective) pointe sur un fichier texte contenant la liste des systèmes distants.

$ cat $WCOLL

host01
host02
host03
host04

La variable DSH_NODE_OPTS est optionnelle, elle permet de spécifier les options passées à la commande distante. Dans notre cas, on passe donc l'option -q à la commande /usr/bin/ssh. L'option -q sur la commande ssh supprime le message banner lors de la connexion.

Souvent, nous préparons plusieurs fichiers de working collective pour séparer par exemple les serveurs de production des serveurs de développement ou pour séparer les serveurs haute disponibilité.

Pour une question de facilité, vous pouvez aussi créer des alias qui permettront de modifier la variable WCOLL :
alias ha_aix='export WCOLL=/home/ggrymon/wcolls/ha_aix'
alias prod_aix='export WCOLL=/home/ggrymon/wcolls/prod_aix'

 

Utilisation du dsh et de ses outils

De temps en temps, vous avez besoin de lancer une commande sur une sélection de systèmes et non pas sur une working collective, vous pouvez le faire en passant l'option "-w" à la commande dsh :

$ dsh -w host01, host12 date

host01:  Thu Dec  4 10:24:55 NFT 2008
host12:  Thu Dec  4 10:24:55 NFT 2008

D'autres outils sont inclus avec DSH. Parmi les plus utilisés, dcp, dping et dshbak.

La commande dcp permet de copier un ou plusieurs fichier(s) sur un ensemble de systèmes. Pour que cela fonctionne, il faut au préalable avoir positionné les variables d'environnement suivantes dans votre fichier .profile ou autre en fonction du SHELL.

export DCP_NODE_RCP=/usr/bin/scp
export DCP_NODE_OPTS="-q"

La commande dping permet de faire un ping sur un ensemble de systèmes de façon parallèle. Cela permet donc une vérification rapide de l'état de santé d'un ensemble de systèmes.

$ dping -n host01,host03,host24
host01: ping (alive)
host03: ping (alive)
host24: ping (alive)

La commande dshbak  permet de formater la sortie des commandes dsh en indiquant le nom du système et la sortie de la commande passée sur ce système.

$ dsh -whost01, host03
HOST: host01

-----------------------

Thu Dec  4 10:24:55 NFT 2008

HOST: host03

-----------------------

Thu Dec  4 10:24:55 NFT 2008

 

Pour vérifier l'état actuel du paramétrage de votre environnement DSH, exécuter la commande dsh avec l'option "-q"

$ dsh -q

DSH:DCP_DEVICE_OPTS=
DSH:DCP_DEVICE_RCP=
DSH:DCP_NODE_OPTS=-q
DSH:DCP_NODE_RCP=/usr/bin/scp
DSH:DSH_CONTEXT=
DSH:DSH_DEVICE_LIST=
DSH:DSH_DEVICE_OPTS=
DSH:DSH_DEVICE_RCP=
DSH:DSH_DEVICE_RSH=
DSH:DSH_ENVIRONMENT=
DSH:DSH_FANOUT=
DSH:DSH_LOG=
DSH:DSH_NODEGROUP_PATH=
DSH:DSH_NODE_LIST=/home/ggrymon/wcolls/ha_aix
DSH:DSH_NODE_OPTS=-q
DSH:DSH_NODE_RCP=
DSH:DSH_NODE_RSH=/usr/bin/ssh
DSH:DSH_OUTPUT=
DSH:DSH_PATH=
DSH:DSH_REPORT=
DSH:DSH_SYNTAX=
DSH:DSH_TIMEOUT=
DSH:RSYNC_RSH=

Un outil utile !

DSH n'est pas nouveau mais ses avantages sont souvent oubliés.
J'espère que cette brève introduction vous sera utile. Qui sait, vous gagnerez peut être du temps en utilisant cette commande.

 

Références