• Pour suppléer aux faiblesses des cartes SD liées au rapport cout / fiabilité-capacité-vitesse.
• Il peut être plus facile aux nœuds d’échanger des données via un espace disque commun plutôt que via des sessions TCP (même si NFS repose sur du réseau).
• Pour simplifier le management/configuration/backup du cluster il peut être pratique d’avoir un espace disque partagé par tous les nœuds.
• Pour booter via NFS et non via la carte SD. Cette dernière restera nécessaire mais son contenu sera minimaliste et plus facile à maintenir.
Tout ce qui suit s’effectue avec l’utilisateur root.
1 NFS coté serveur
Le serveur que nous utilisons ici est une machine utilisant centos 7, donc pas un Raspberry . Dédier un Raspberry à cette tâche est possible à condition d’utiliser un disque externe, sinon on perd sur tous les tableaux.Installation serveur NFS (centos)
yum install nfs-utils nfs-utils-lib(depuis Centos 7.2 nfs-utils-lib n'existe plus car inclu dans nfs-utils)
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
Si les services nfs-lock et nfs-idmap sont requis voir la fin de ce post.
Vérifier l’installation
ps -e | grep rpc
2152 ? 00:00:00 rpcbind
2323 ? 00:00:00 rpciod
2337 ? 00:00:00 rpc.statd
2338 ? 00:00:00 rpc.mountd
2339 ? 00:00:00 rpc.idmapd
ps -e | grep nfs
1254 ? 00:00:00 nfsd4_callbacks
1260 ? 00:00:00 nfsd
1261 ? 00:00:00 nfsd
...
2001 ? 00:00:00 nfsiod
cat /proc/filesystems | grep nfs
nodev nfsd
nodev nfs
nodev nfs4
rpcinfo -p | sort | grep nfs
program vers proto port service
100003 3 tcp 2049 nfs
100003 3 udp 2049 nfs
100003 4 tcp 2049 nfs
100003 4 udp 2049 nfs
100227 3 tcp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
Notez que pour chaque version de nfs (3 ou 4) les deux protocoles (udp et tcp) sont supportés sur le même numéro de port (2049).
Créer les répertoires à exporter
On va créer un répertoires par nœud et deux répertoires d'usage commun.
Le répertoire rpi-fs servira pour le network-boot (DHCP/BOOTP + TFTP)
mkdir -pv /var/nfs/node{01..15} /var/nfs/common /var/nfs/rpi-fs
chown nfsnobody.nfsnobody /var/nfs/*
chmod a=rx,ug+w /var/nfs/*
ls –l /var/nfs
drwxrwxr-x 2 nfsnobody nfsnobody common
drwxrwxr-x 2 nfsnobody nfsnobody node01
...
drwxrwxr-x 2 nfsnobody nfsnobody node15
drwxrwxr-x 2 nfsnobody nfsnobody rpi-fs
Créer la liste des exports
vi /etc/exports
/var/nfs/common 192.168.0.0/24(rw,sync,root_squash,all_squash,no_subtree_check)
/var/nfs/node01
192.168.0.101(rw,sync,root_squash,all_squash,no_subtree_check)
...
/var/nfs/node15
192.168.0.115(rw,sync,root_squash,all_squash,no_subtree_check)
/var/nfs/rpi-fs 192.168.0.0/24(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
Attention : Pas d’espace entre l’IP et la parenthèse ouvrante. Adapter les noms des nœuds (ici nodexx) et les IP (ici 192.168.0.1xx) à la configuration de votre cluster.
192.168.0.0/24 désigne n’importe quelle machine du réseau 192.168.0.0
L'option no_root_squash pour le partage /var/nfs/rpi-fs utilisé plus tard pour le network boot est importante.
Exporter
exportfs –rav
Vérifier
exportfs -v
NFS v2
Activer la version 2 de NFS est obligatoire si on veut booter via le réseau. Si ce n'est pas votre but vous pouvez ignorer cette partie.
Normalement la commande
cat /proc/fs/nfsd/versions
indique avec un '+' les versions acceptées par le serveur nfsd. Par exemple:
-2 +3 +4 +4.1 +4.2
signifie que la versions 2 n'est pas acceptées par nfsd.
On peut aussi vérifier avec la commande ci-dessous quelles versions sont acceptées :
rpcinfo -p
rpcinfo -p
/etc/sysconfig/nfs
et remplacer la ligne
RPCNFSDARGS=""
par
RPCNFSDARGS="-V 2"
RPCNFSDARGS="-V 2"
et redémarrer nfs avec:
systemctl restart nfs
systemctl restart nfs-config
systemctl restart nfs
systemctl restart nfs-config
Mais avec nfs il y a tellement de services en jeux que rebooter est plus sûr...
Vous devriez alors obtenir:
cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
et rpcinfo doit montrer
portmapper en version 2, 3, 4
mountd en version 1, 2, 3 (c'est bien 1, 2, 3)
nfs en version 2, 3, 4
Vous devriez alors obtenir:
cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
et rpcinfo doit montrer
portmapper en version 2, 3, 4
mountd en version 1, 2, 3 (c'est bien 1, 2, 3)
nfs en version 2, 3, 4
2 NFS coté client
Ici on est bien sur un Raspberry (sur celui qui servira à faire la carte SD master).Installation client NFS (rasperian)
apt-get install nfs-common rpcbindupdate-rc.d rpcbind enable
service rpcbind start
Installation client NFS (CentOS 7.x)
yum install nfs-utils rcbindsystemctl enable rpcbind
systemctl start rpcbind
Vérifier l’installation (toute versions)
cat /proc/filesystems | grep nfs
rpcinfo -p | grep portmap
Tester
Depuis le noeud #10 (qui a l'ip 192.168.0.110) taper
mkdir -pv /mnt/nfs_home /mnt/nfs_common
mount 192.168.0.100:/var/nfs/node10 /mnt/nfs_home
mount 192.168.0.100:/var/nfs/common /mnt/nfs_common
192.168.0.100 est l’ip du serveur NFS (le serveur centos dans notre exemple)
Plus tard ce serveur fera aussi TFTP et éventuellement DHCP.
Si vous essayez de monter un export qui n'existe pas ou qui ne correspond pas votre ip vous obtiendrez ce message d'erreur:
mount.nfs: access denied by server while mounting 192.168.0.100:/var/nfs/node11
Notez que, pendant le temps du montage, le propriétaire des répertoires utilisé pour monter les exports est nobody.nogroup
ls -l /mnt
drwxrwxr-x 2 nobody nogroup nfs_common
drwxrwxr-x 2 nobody nogroup nfs_home
A moins que vos programmes s’exécutent en tant que root ou nobody, il faudra certainement faire un chmod o+w pour écrire dans ces répertoires.
3 Debug NFS
Par défaut NFS n'est pas trés bavard dans les log. Pour avoir plus d'info il faut les demander avec rpcdebug.rpcdebug -m nfsd -s all <-- debuger le serveur
rpcdebug -m nfs -s all <-- debuger le client
rpcdebug -m rpc -c all <-- debug utilisable des deux cotés
nfsstat --all --list <-- statistiques du serveur nfs
Aucun commentaire:
Enregistrer un commentaire