How to do a NetApp FlexClone for a database and log LUN with NetApp Ontap PowerShell Toolkit

In diesem Blogpost: Einblick in die NetApp Powershell und was man damit so alles „anstellen“ kann.

01. Allgemein

Wer kennt das nicht…
Unsere Datenbankadministratoren wollen schnell und unkompliziert von Ihren produktiven Windows Datenbank- und Log-LUNs eine Kopie für Ihre Testsysteme haben… Nur wie das Ganze lösen?
NetApp bietet mit dem kostenfreien NetApp Ontap Powershell Toolkit eine einfache Möglichkeit, die Funktionalitäten des Storages von einem Windows-Server aus zu steuern.

02. Doch zuerst einmal zu den Basics – How to integrate NetApp Powershell

02.01. Für all diejenigen, die noch nie etwas mit der PowerShell zu tun hatten, 2 wichtige Tipps:

  • Powershell unter Windows 7 und Windows 2008 immer Als Administrator ausführen
  • Einmalig in der Powershell das Command Set-ExecutionPolicy Unrestricted ausführen, damit alle erstellten PS-Scripte ausgeführt werden dürfen

02.02. Ist die PowerShell ready to go, muss man in der NetApp Community in den Bereich „Data ONTAP PowerShell Toolkit Downloads“ wechseln
https://communities.netapp.com/community/products_and_solutions/microsoft/powershell/data_ontap_powershell_toolkit_downloads

02.03. Die Dateien ONTAP.zip (cmdlets und Hilfe, nicht entpacken!), Install.ps1 (für die Installation) und Uninstall.ps1 (für einen etwaigen Uninstall) downloaden

02.04. Die Powershell ausführen (als Admin), in den Ordner wechseln (Standard-cmd-Befehle) und mit .\Install.ps1 die Installation starten.

02.05. Bei der Frage nach der Install Destination am Besten das Windows Systemverzeichnis verwenden
(z.B. C:\Windows\system32\WindowsPowerShell\v1.0\Modules)

02.06. Eigtl. kann es jetzt schon losgehen… Wer wissen möchte, welche Befehle es alles gibt und wie man „startet“, kann nach der Installation aus der heruntergeladenen ONTAP.zip den Ordner webhelp in einen beliebigen Ordner speichern und dort die index.html aufrufen. Von der Startseite aus bekommt man einen Überblick über alle NetApp Powershell-Befehle und die entsprechende Syntax.

03. Let’s do some scripting – How to automatically create FlexClones of windows database- and log-LUNs and map them per SnapDrive to another server

Ok, wir kennen unsere Aufgabe und tüfteln ein kleines Script aus…

03.01. Was sind die Voraussetzungen, damit das folgende Script funktioneren kann:

  • ISCSI ist auf der NetApp konfiguriert (durch eine kleine Anpassung ist das Script auch für FCP lauffähig)
  • Igroup und Initiatornamen für das Zielsystem muss auf der Netapp angelegt sein
  • FlexClone Lizenz muss auf dem NetApp-System vorhanden sein
  • funktionsfähiges SnapDrive auf dem Zielserver mit der NetApp als Target
  • Anwendungskonsistenz innerhalb der LUNs (kann mit einem Pre-Script oder Applikationsmitteln erstellt werden)
  • FlexClone-Script muss vom Zielserver, an den der FlexClone gemappt werden soll, ausgeführt werden

03.02. Verschlüsseltes Kennwort für das FlexClone-Script generieren

Da in Scripts Passwörter nicht im Klartext hinterlegt werden sollten, muss vor dem Starten des FlexClone-Scripts eine Textdatei generiert werden,
welche das Logon-Kennwort für die Einwahl auf die Netapp verschlüsselt beinhaltet.
Dies kann man auf der PowerShell mit den folgenden Befehlen erreichen:

$password = ConvertTo-SecureString „DEINPASSWORT“ -AsPlainText -Force
$encrypted = convertfrom-securestring -securestring $password
$encrypted | set-content cryptpwd.txt

Diese Textdatei legen wir in den gleichen Ordner, in dem das FlexClone-Script gestartet wird.

03.03. Das FlexClone-Script

####################
# Start des Scripts
####################

### Vorbereitungen ###

# Ontap Powershell CMDlets laden, damit die Befehle ausgeführt werden können
Import-Module DataONTAP

# Das generierte Passwort aus der Textdatei einlesen
$password = get-content cryptpwd.txt | convertto-securestring

### Variablen für das Script setzen ###

# Username und generiertes Kennwort als Logon Credentials festlegen
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList „root“,$password

# NetApp Controller festlegen, auf dem die LUNs liegen
$controller = „0.0.0.0“

# Datenbank- und Logvolume des zu clonenden Volumes festlegen
$origvolnamedb = „server01_db“
$origvolnamelog = „server01_log“

# Namen für die Snapshots festlegen, die als Basis für den FlexClone verwendet werden
$snapnamedb = „flexclone_to_server02_db“
$snapnamelog = „flexclone_to_server02_log“

# Namen für die FlexClone Volumes festlegen
$clonevolnamedb = „clone_to_server02_db“
$clonevolnamelog = „clone_to_server02_log“

# Pfade, die nach dem Erstellen des FlexClones bis zur LUN innerhalb des FlexClone-Volumes zeigen
$clonelunpathdb = „/vol/clone_to_server02_db/server01_db.lun“
$clonelunpathlog = „/vol/clone_to_server02_log/server01_log.lun“

# Laufwerksbuchstaben festlegen, an die die LUNs gemapped werden sollen
$laufwerkdb = „H“
$laufwerklog = „I“

# Servername festlegen, an den die LUNs gemappt werden sollen
$servername = „server02“

# Igroup festlegen, mit der SnapDrive die LUN an den Server mapped
$igroupname = „viaRPC.iqn.1991-05.com.microsoft:server02.demo.local“

### The NetApp Part ###

# Auf Storage verbinden
Connect-NaController -Name $controller  -Credential $cred

# Snapshots erstellen
New-NaSnapshot -TargetName $origvolnamedb -SnapName $snapnamedb -TargetType volume
New-NaSnapshot -TargetName $origvolnamelog -SnapName $snapnamelog -TargetType volume

# ThinProvisioned VolClone erstellen (Achtung Zeilenumbruch: je 1 New-NaVolClone-Befehl!)
New-NaVolClone -ParentVolume $origvolnamedb -CloneVolume $clonevolnamedb -SpaceReserve none -ParentSnapshot $snapnamedb
New-NaVolClone -ParentVolume $origvolnamelog -CloneVolume $clonevolnamelog -SpaceReserve none -ParentSnapshot $snapnamelog

# Dedup anschalten
Enable-NaSis -Path /vol/$clonevolnamedb
Enable-NaSis -Path /vol/$clonevolnamelog

# Dedup Schedule festlegen
Set-NaSis -Path /vol/$clonevolnamedb -Schedule „sun-sat@23“
Set-NaSis -Path /vol/$clonevolnamelog -Schedule „sun-sat@23“

# LUN online nehmen
Set-NaLun -Path $clonelunpathdb -Online
Set-NaLun -Path $clonelunpathlog -Online

# per SnapDrive die LUNs verbinden (Achtung Zeilenumbruch: je 1 sdcli-Befehl!)
sdcli disk connect -p $controller“:“$clonelunpathdb -d $laufwerkdb -dtype dedicated -IG $servername $igroupname
sdcli disk connect -p $controller“:“$clonelunpathlog -d $laufwerklog -dtype dedicated -IG $servername $igroupname

####################
# Ende des Scripts
####################

04. Letzte Worte

Ist der Einstieg mit diesem Script geschafft, muss der FlexClone wieder aufgelöst werden… Auch das kann man scripten… Die Werkzeuge und Hilfen dazu sind ja jetzt bekannt ;)

And that’s it.. Einfach? So einfach nicht, ich hoffe aber mit diesen Tipps einen guten Einstieg geschaffen zu haben. Scripting ist immer ein kleines bisschen „try and error“, deshalb mein Tipp: Nicht direkt auf die hochproduktiven Volumes losgehen und für den Anfang Zeile für Zeile einzeln testen!

– I wish I could be a Virtual Machine –

Benjamin Ulsamer

Advertisements