Oktober 5

Open-E iSCSI VMWare vSphere recommended settings

Für VMware gibt es folgende empfohlene iSCSI Einstellungen:

maxRecvDataSegmentLen=262144
MaxBurstLength= 1048576
Maxxmitdatasegment=262144
FirstBurstLength=65536
DataDigest=None
maxoutstandingr2t=8
InitialR2T=No
ImmediateData=Yes
headerDigest=None
Wthreads=8


Laut Open-E Support wird das auch so ab DSS V7up56 so eingestellt. Ältere Systeme sollten von Hand angepasst werden, generell ist hier eine Kontrolle nach der Installation sicher kein Fehler.

Die iSCSI Tuning Optionen findet man in der Console mit CTRL+ALT+W –> 0. Tuning Options –> 4. iSCSI daemon options –> 1. Target options

open-e_iscsi1

Der iSCSI Cluster muss für diese Änderung deaktiviert sein.

 

Was effektiv von VMware beim Verbinden der iSCSI Laufwerke ausgehandelt wird, kann im kernel-sys.log nachvollzogen werden (WebGUI –> Status –> Hardware –> Logs).

April 7

VDI Maintenance Mode Switcher Powershell Script

Problem: VDI Maschinen in unserer Farm werden bei Inaktivität heruntergefahren und nur bei Bedarf gestartet. Dadurch kann es vereinzelt Maschinen geben, die nur sehr selten Online sind. Daher fehlen hier aktuelle Polices, Patches und Softwarepakete.

Lösung: Ich habe ein PowerShell Script geschrieben, welches über den Aufgabenplaner am Wochenende ausgeführt werden kann. Das Script aktiviert/deaktiviert den Maintenance Mode und (neu-)stratet die entsprechenden Maschinen.

Mal sehen ob sich das bewährt… :-)
Dies ist so nebenbei auch mein erstes handgeklöppeltes Powershell Script, für Fehler übernehme ich keine Haftung.

 

-> get the script <-

 

VDI_MM_Switcher_v1.4.ps1

<#
.SYNOPSIS
    This script enable or disable Maintenance Mode for Citrix VDI machines.
.DESCRIPTION
    The script read a static text file with hostnames and enable or disable maintance mode for each machine.
    The script will wait 60 seconds after each machine.
    If a target VDI is powered off it will be started automatically, if a target VDI is powered on it will be restarted if not in use.
.PARAMETER MaintenanceMode
    Specifies if the Maintenance Mode should be switched on or off. Options: Enable, Disable.
.PARAMETER HostListFile
    List of target Host names without Domain.
.EXAMPLE
    powershell.exe '.\VDI_MM_Switcher_v1.4.ps1' -MaintenanceMode "Enable" -HostListFile "C:\VDI_MM_Switcher\hosts.txt"
.EXAMPLE
    powershell.exe '.\VDI_MM_Switcher_v1.4.ps1' -MaintenanceMode "Disable" -HostListFile "C:\VDI_MM_Switcher\hosts.txt"
.NOTES
    Change Log
    V1.0 - 05.04.2016 - Manuel Kuss - frist release
    V1.1 - 05.04.2016 - Manuel Kuss - added logging
    V1.3 - 06.04.2016 - Manuel Kuss - added param()
    V1.4 - 07.04.2016 - Manuel Kuss - added SummaryState check
.LINK 
    http://www.nova17.de
#>

param(
    [string]$MaintenanceMode,
    [string]$HostListFile
)

Clear

## Load Addins
Add-PSSnapin Citrix.*

## Syntax Checker
If (($MaintenanceMode -eq "") -or ($HostListFile -eq "")) {
    Write-Host "ERROR MISSING PARAMETER`nSyntax: .\VDI_MM_Switcher_v1.4.ps1 -MaintenanceMode `"Enable/Disable`" -HostListFile `"C:\Path\hosts.txt`"" -ForegroundColor Red
    Exit
} 

## Variables (customize)
$AdminServer = 'hostname.domain.tld'
$ADDomain = 'YOUR-AD-DOMAIN'
## Variables
$HostList = Get-Content $HostListFile
$Logfile = "$HostListFile" + "_$MaintenanceMode" + ".log"

## Output
Write-Host "Executing..." -ForegroundColor Yellow
$starttime = Get-Date -Format G
write "--------------------------------------------------------" | Out-File $Logfile
Write "Script Start Time: $starttime" | Out-File $Logfile -Append
write "--------------------------------------------------------" | Out-File $Logfile -Append

## Enable Maintenance Mode Loop ##
if ($MaintenanceMode -eq 'Enable') 
    {
    foreach ($item in $HostList)
        {
            ## Write DOMAIN\HOSTNAME to $TargetVDI
            $TargetVDI = "$ADDomain" + "\" + "$item"
            
            ## Enable Maintenance Mode
            Write "Enable MaintenanceMode for $TargetVDI" | Out-File $Logfile -Append
            Set-BrokerMachineMaintenanceMode -InputObject $TargetVDI $true -adminaddress $AdminServer

            ## Restart if TargetVDI is not in use
            foreach ($item in Get-BrokerDesktop | Where-Object{($_.MachineName -eq "$TargetVDI") -and ($_.PowerState -eq "On") -and ($_.SummaryState -ne "InUse")} | Select-Object -Property MachineName)
                { New-BrokerHostingPowerAction -MachineName $TargetVDI -Action Restart -adminaddress $AdminServer | Out-File $Logfile -Append }

            ## If TargetVDI is powered off
            foreach ($item in Get-BrokerDesktop | Where-Object{($_.MachineName -eq "$TargetVDI") -and ($_.PowerState -eq "Off")} | Select-Object -Property MachineName)
                { New-BrokerHostingPowerAction -MachineName $TargetVDI -Action TurnOn -adminaddress $AdminServer | Out-File $Logfile -Append }
            
            ## Pause
            Write "--------------------------------------------------------" | Out-File $Logfile -Append
            Start-Sleep 60
        }
    }

## Disable Maintenance Mode Loop ##
if ($MaintenanceMode -eq 'Disable') 
    {
    foreach ($item in $HostList)
        {
            ## Write DOMAIN\HOSTNAME to $TargetVDI
            $TargetVDI = "$ADDomain" + "\" + "$item"
          
            ## Disable MaintenanceMode
            Write "Disable MaintenanceMode for $TargetVDI" | Out-File $Logfile -Append
            Set-BrokerMachineMaintenanceMode -InputObject $TargetVDI $false -adminaddress $AdminServer
            
            ## Restart if TargetVDI is not in use
            foreach ($item in Get-BrokerDesktop | Where-Object{($_.MachineName -eq "$TargetVDI") -and ($_.PowerState -eq "On") -and ($_.SummaryState -ne "InUse")} | Select-Object -Property MachineName)
                { New-BrokerHostingPowerAction -MachineName $TargetVDI -Action Restart -adminaddress $AdminServer | Out-File $Logfile -Append }
                           
            ## Pause
            Write "--------------------------------------------------------" | Out-File $Logfile -Append
            Start-Sleep 60
        }
    }

## Output
$endtime = Get-Date -Format G
Write "Script End Time: $endtime" | Out-File $Logfile -Append
write "--------------------------------------------------------" | Out-File $Logfile -Append
Write-Host "Script Execuded." -ForegroundColor Yellow
September 29

iSCSI mit Open-E DSS – IP Madness

Mit dem Wechsel auf Open-E DSS V7 habe ich mir nun eine neue Vorgehensweise für die IP Addressen überlegt. Generell verwende ich für iSCSI das komplette 172.16.0.0/16 Netzwerk und tobe mich im kompletten Adressraum aus.

Los geht es mit den Interface IP’s der DSS Nodes.
Hier verwende ich das Schema 172.16.[eth+10].[node]
node1 – eth0 = 172.16.11.1 /24 ; node2 – eht0 = 172.16.11.2 /24
node1 – eth4 = 172.16.14.1 /24 ; node2 – eth4 = 172.16.14.2 /24

Für den iSCSI Failover lege ich dann auf jede NIC welche für MPIO ist eine virtuelle IP nach dem Schema 172.16.[(eth+10)*100].[target+100] also
iSCSI target0 – eth0 = 172.16.100.100 /24
iSCSI target1 – eth4 = 172.16.140.101 /24

Am iSCSI Target selbst verbiete ich den Zugriff über 0.0.0.0/0 und erlaube das iSCSI Netz 172.16.0.0/16.

 

Auf dem  ESX gibt es dann pro MPIO Verbindung ein eigenes Netzwerk mit jeweils einer NIC und einem VMkernel in diesem Netz nach dem Schema 172.16.[virtualip].[node]
ESX Host 1 – DSS NIC eth0 = 172.16.100.1
ESX Host 2 – DSS NIC eth4 = 172.16.140.1

 

Verwirrt? Ich auch… Deswegen noch ein paar Screenshots. :-)

Für die Storage Replikation verwende ich einen balance-rr bond mit einer ausreichenden Anzahl an NICs. Im ESX konfiguriere ich das MPIO mit Round Robin.

 Die IP des bond ist natürlich auch im 172.16.0.0 Netzwerk… Die Grafik ist hier falsch.