Nachdem ich im ersten Teil meiner Blogserie auf die Basisfunktionen der Clustershell eingegangen bin, möchte ich das Ganze in diesem Part noch um weitere extrem nützliche Werkzeuge erweitern. Konkret beleuchten wir Wildcards, if und either-or und wie uns diese Funktionen in Kombination mit den entsprechenden Kommandos auf der CLI das Leben deutlich vereinfachen.
Wildcards
Beginnen wir direkt mit Wildcards. Der Einsatz von Wildcards ist natürlich grundlegend kein bahnbrechend neues Konzept, war jedoch auf der Kommandozeile im 7-Mode de facto nicht möglich.
Hier macht Clustered Data ONTAP die Arbeit auf der CLI deutlich leichter. Haben wir zum Beispiel mehrere Volumes mit der Bezeichnung „luns“ im Namen, können wir uns diese Volumes mit
vol show -volume *luns
anzeigen lassen.
1 2 3 4 5 6 7 8 |
cluster::> vol show -volume *luns Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- svmluns linluns aggr1_cluster1_01 online RW 10.31GB 10.18GB 1% svmluns winluns aggr1_cluster1_01 online RW 10.31GB 10.28GB 0% 2 entries were displayed. |
Ein netter Nebeneffekt: Es lassen sich auch mehrere Wildcards miteinander kombinieren und damit ein Filter bestehend aus mehreren Kriterien anwenden.
Wollen wir uns beispielsweise ausschließlich Volumes anzeigen lassen, die das Wort „*luns“ enthalten, jedoch gleichzeitig das Volume „winluns“ explizit ausschließen, ist das mit folgendem Kommando möglich:
vol show -volume *luns,!winluns
1 2 3 4 5 |
cluster::> vol show -volume *luns,!winluns Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- ---------- ----- svmluns linluns aggr1_cluster1_01 online RW 10.31GB 10.18GB 1% |
Neben Wildcards gibt es eine weitere sehr hilfreiche Form der Filterung um die Ausgabe eines Kommandos auf das (persönlich) Notwendige zu reduzieren. An dieser Stelle können wir von Either-Or Gebrauch machen.
Either-Or
Verwenden wir als konkretes Beispiel die Ausgabe von Statistiken bez. des aktuell auftretenden NFSv3-Traffics (Hinweis: Dieses Kommando ist erst im Privilege-Level „Advanced“ verfügbar) :
statistics show-periodic -interval 2 -iterations 0 -summary true -object nfsv3 -instance svm1
1 2 3 4 5 6 7 |
cluster::*> statistics show-periodic -interval 2 -iterations 0 -summary true -object nfsv3 -instance NAS cluster: nfsv3.svm1: 5/1/2017 13:40:46 access commit create fsinfo fsstat getattr link lookup mkdir mknod nfsv3 nfsv3 nfsv3 nfsv3 nfsv3 null pathconf read read_symlink read read read read readdir readdir readdirplus readdirplus remove rename rmdir setattr symlink write avg access access access access avg commit commit commit commit avg create create create create avg fsinfo fsinfo fsinfo fsinfo avg fsstat fsstat fsstat fsstat avg getattr getattr getattr getattr instance instance avg link link link link avg lookup lookup lookup lookup avg mkdir mkdir mkdir mkdir avg mknod mknod mknod mknod dnfs nfsv3 read read nfsv3 write write avg null null null null avg pathconf pathconf pathconf pathconf raidprop avg read read read avg symlink symlink symlink symlink read avg readdir readdir postop readdir readdir avg readdirplus readdirplus postop readdirplus readdirplus avg remove remove remove remove avg rename rename rename rename avg rmdir rmdir rmdir rmdir avg setattr setattr setattr setattr avg symlink symlink symlink symlink avg write write write write Complete Number of latency error percent success total latency error percent success total cpu_id cpu_name latency error percent success total latency error percent success total latency error percent success total latency error percent success total name uuid latency error percent success total latency error percent success total latency error percent success total latency error percent success total ops ops ops throughput throughput ops throughput latency error percent success total latency error percent success total error latency error percent success latency error percent success total total latency error percent error success total latency error percent error success total latency error percent success total latency error percent success total latency error percent success total latency error percent success total latency error percent success total latency error percent success total Aggregation Constituents -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- -------- ---------- ---------- -------- ---------- -------- -------- ------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- ------- -------- ------------ -------- ------- -------- -------- -------- -------- -------- ------- -------- -------- -------- ----------- ----------- ----------- ----------- ----------- ----------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- -------- -------- ------- -------- -------- ----------- ------------ 0us 0 0% 0 0 0us 0 0% 0 0 Multiple_Values Multiple_Values 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 NAS 5 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0 0 0 0 0 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0 0us 0 0% 0 0us 0 0% 0 0 0 0us 0 0% 0 0 0 0us 0 0% 0 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 0us 0 0% 0 0 Yes 4 |
Die Informationsflut des Outputs ist hier vermutlich deutlich mächtiger als man es ursprünglich haben wollte. Genau hier hilft uns Either-Or das Ganze auf das notwendige bzw. gewünschte Minimum einzuschränken.
statistics show-periodic -interval 2 -iterations 0 -summary true -object nfsv3 -instance svm1 -counter nfsv3_read_ops|nfsv3_throughput|nfsv3_write_ops
Hiermit lassen wir uns ausschließlich die Werte der Counter nfsv3_read_ops, nfsv3_throughput und nfsv3_write_ops für die gesamte SVM „SVM1“ anzeigen.
Der Output kann sich definitiv „lesen“ lassen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
cluster::*> statistics show-periodic -interval 2 -iterations 0 -summary true -object nfsv3 -instance svm1 -counter nfsv3_read_ops|nfsv3_throughput|nfsv3_write_ops cluster: nfsv3.svm1: 5/1/2017 11:49:32 nfsv3 nfsv3 read nfsv3 write ops throughput ops -------- ---------- -------- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cluster1: nfsv3.svm1: 5/1/2017 11:49:43 nfsv3 nfsv3 read nfsv3 write ops throughput ops -------- ---------- -------- Minimums: 0 0 0 Averages for 5 samples: 0 0 0 Maximums: 0 0 0 |
If
Ebenfalls ein gern genommenes Werkzeug sind „If“-Statements. Die praktischen Anwendungsfälle sind hier zwar nicht so weitreichend wie bei den oben beschriebenen Filtern, aber ab einer gewissen Clustergröße oder einer zunehmender Anzahl an FlexVols wird man auch hier recht schnell die Vorzüge kennen und lieben lernen.
Als erster Einsatzzweck wäre z.B. die Durchführung eines ONTAP-Updates im Cluster denkbar. Jeder Node verfügt über 2 Images von Data ONTAP. Diese können über den Befehl
system image show
angezeigt werden.
1 2 3 4 5 6 7 8 9 10 11 12 |
cluster::> system image show Is Is Install Node Image Default Current Version Date -------- ------- ------- ------- ------------------------- ------------------- cluster1-01 image1 false false 9.0RC1 - image2 true true 9.0 10/10/2016 18:16:34 cluster1-02 image1 false false 9.0RC1 - image2 true true 9.0 10/10/2016 18:15:12 4 entries were displayed. |
Im Rahmen eines Updates wird das neu installierte ONTAP-Image auf die jeweiligen Nodes geladen, das alte Abbild verbleibt jedoch das standardmäßige Boot-Image, bis dieses explizit für jeden Node über die CLI als neues Default-Image deklariert wird.
Heißt konkret: Das Image das aktuell nicht als Current-Image markiert ist (iscurrent=false) muss zum neuen Standard (isdefault=true) gemacht werden. Genau hier lässt sich das Ganze z.B. durch den Einsatz eines if-Statements extrem vereinfachen. Mit dem CLI-Kommando
system image modify {-iscurrent false} -isdefault true
kann für sämtliche Nodes im Cluster das zuvor eingespielte ONTAP-Image direkt als Default gesetzt werden.
1 2 3 4 5 6 |
cluster::> system image modify {-iscurrent false} -isdefault true After a clean shutdown, image2 will be set as the default boot image on node node1. 1 entry was modified. |
Bei einem Cluster mit einer Vielzahl an Nodes ist das sicher eine gern gesehene Arbeitserleichterung.
Zusätzlich kann ein if-Statement beispielsweise auch beim Aktivieren oder Deaktivieren von Snapshot-Policies auf FlexVols nützlich sein. Wollen wir z.B. auf allen Volumes die aktuell verwendeten Snapshot-Policies temporär deaktivieren, reicht ein:
volume snasptshot policy modify {-enabled true} -enabled false
1 2 |
cluster::> volume snapshot policy modify {-enabled true} -enabled false 2 entries were modified. |
Tipp und weiterführende Infos
Zum Schluss noch ganz kurz ein Tipp aus der Praxis: Standardmäßig führt die Eingabe eines „?“ auf der Clustershell immer zum Aufruf eines Hilfe-Screens, der die möglichen Sub-Kommandos anzeigt.
Das ist an und für sich im täglichen Einsatz sehr praktisch, spätestens wenn es jedoch z.B. um die Eingabe von LUN-Seriennummern geht (die ebenfalls „?“ enthalten können), ist es gut zu wissen, dass man diese Funktion bei Bedarf auch deaktivieren kann.
Hier hilft ein: set -active-help false
Damit ist die automatische Hilfe-Funktion deaktiviert und ein „?“ auf der CLI wird als normales Zeichen interpretiert.
Ich hoffe ich konnte mit dieser 2-teiligen Blogserie einen guten ersten Überblick über die Werkzeuge und Möglichkeiten bieten, die uns die Clustershell in ONTAP an die Hand gibt.
Für alle, die sich aktuell im Umstieg von 7-Mode auf Clustered ONTAP befinden, kann ich als zusätzliche CLI-Referenz noch die offizielle „Command Map for 7-Mode Administrators“ von NetApp empfehlen. Hier lässt sich einfach und schnell ein bekanntes 7-Mode Kommando auf den zugehörigen Befehl in Clustered Data ONTAP nachschlagen.
Selbstverständlich stehen auch wir von teamix jederzeit gerne für Ihre Fragen rund um das Thema Clustered ONTAP zur Verfügung. Sprechen Sie uns einfach an!