Physikalische MSCS SQL Nodes in ESXi VMs migrieren

Um sich diesem, doch etwas umfangreichen Thema zu widmen, würde ich zum Einstieg ein paar Artikel als Lektüre empfehlen (Sammlung am Ende dieses Beitrags).
Speziell sollte man sich mit der von VMware und Microsoft unterstützen Konfiguration von virtuellen oder auch gemischten MSCS Konstrukten beschäftigen.
Diese ist unter anderem auch abhängig von den eingesetzten Versionen.

Zwei Beispiele:

ESXi 5.5 Update 3 unterstützt den PVSCSI Adapter in einem MSCS Node, ESXi 5.5 Update 2 aber nicht!

Keine Snapshots mehr von VMs möglich mit einem SCSI Adapter der Bus-Sharing aktiviert hat!

Die Umgebung

  • 2x 19″ Server
  • je lokales RAID für OS
  • je 2x 10 Gigabit Ethernet
  • je 2x 8 Gigabit Fiberchannel
  • Microsoft Windows 2012 R2
  • Microsoft SQL 2012 SP1 Standard (mehrere Instanzen)

Grober Ablauf meines Vorgehens

  1. Ersten physikalischen Cluster Node entfernen
  2. Ersten physikalischen Cluster Node als ESXi neu installieren
  3. Neuen virtuellen Cluster Node installieren
  4. Ressourcen schwenken
  5. Zweiten physikalischen Cluster Node entfernen
  6. Zweiten physikalischen Cluster Node als ESXi neu installieren
  7. Weiteren virtuellen Cluster Node installieren

Deinstallation des physikalischen Microsoft Cluster Service SQL Node (pMSCS SQL Node)

  1. Alle Rollen incl. Disks von betroffenem pMSCS Node wegschieben
    1. Pause – Drain Roles
    2. Resume – Do not Fail Roles back
  2. Für jede SQL Instanz auf dem pMSCS Node
    1. SQL Setup startenmscs-01
    2. SQL Instanz für die Deinstallation auswählenmscs-02
    3. Shared LUNs (CSV`s) vom pMSCS Node trennen
    4. pMSCS Node aus Cluster entfernen mscs-03

Neuinstallation des virtuellen Cluster Service SQL Node (vMSCS SQL Node)

VMware ESXi Installation

  1. Firmware Update der Hardware
  2. BIOS Anpassungen für VMware ESXi
  3. ESXi Installation (5.5 Update 2)

ESXi Konfiguration

  1. SSL Zertifikat tauschen

Hierzu verwende ich Dereks (@vDerekS) Toolkit für vSphere 5.5 (Download)

  1. ESXi Basis Konfiguration

Hierzu verwende ich ein etwas überarbeitungsbedürftiges PowerCLI Script

$ESXiHostList = Get-VMHost
$syslog = udp://syslog.test.lan:514
$NTP1 = 192.168.2.1
$NTP2 = 192.168.2.2

foreach ($ESXiHost in $ESXiHostList)
{
#Enable SSH and disable SSH Warning
$SSHService = $ESXiHost | Get-VMHostService | where {$_.Key -eq TSM-SSH}
Start-VMHostService -HostService $SSHService -Confirm:$false
Set-VMHostService -HostService $SSHService -Policy Automatic
$ESXiHost | Set-VMHostAdvancedConfiguration -Name UserVars.SuppressShellWarning -Value 1
Write-Host $ESXiHost : SSH, configured.

#Config NTP
$ESXiHost | add-vmhostntpserver -ntpserver $NTP1 -confirm:$False
$ESXiHost | add-vmhostntpserver -ntpserver $NTP2 -confirm:$False
$ntpservice = $ESXiHost | get-vmhostservice | Where-Object {$_.key -eq ntpd}
Set-vmhostservice -HostService $ntpservice -Policy on -confirm:$False
$hosttimesystem = get-view $ESXiHost.ExtensionData.ConfigManager.DateTimeSystem
$hosttimesystem.UpdateDateTime([DateTime]::UtcNow)
start-vmhostservice -HostService $ntpservice -confirm:$False
Write-Host $ESXiHost : NTP, configured.

#Remove PG
$defaultPG = $ESXiHost | Get-VirtualSwitch -Name vSwitch0 | Get-VirtualPortGroup -Name VM Network
Remove-VirtualPortGroup -VirtualPortGroup $defaultPG -confirm:$False
Write-Host $ESXiHost : Default PG Removed.

#Configre Static HighPower
$view = ($ESXiHost | Get-View)
(
Get-View $view.ConfigManager.PowerSystem).ConfigurePowerPolicy(1)
Write-Host $ESXiHost : PowerPolicy Configured

#configure Syslog
$ESXiHost | Get-VMHostFirewallException |?{$_.Name -eq syslog} | Set-VMHostFirewallException -Enabled:$true
$ESXiHost | Set-VMHostAdvancedConfiguration -NameValue @{Syslog.global.logHost=$syslog}
Write-Host $ESXiHost : Firewall for Syslog Configured

#Configure HP 3PAR SATP/PSP Rule
$SATPesxcli = $ESXiHost | Get-EsxCli
$SATPesxcli.storage.nmp.satp.rule.add($null,tpgs_on,P 3PAR custom rule,$null,$null,$null,VV,$null,VMW_PSP_RR,iops=100,VMW_SATP_ALUA,$null,$null,3PARdata)
Write-Host $ESXiHost : HP 3PAR SATP/PSP Rule, configured.

#Disable ATS HB (http://kb.vmware.com/kb/2113956)
Get-AdvancedSetting -Entity $ESXiHost.name -Name VMFS3.UseATSForHBOnVMFS5 | Set-AdvancedSetting -Value 0 -Confirm:$false

}

GitHub Gist:

  1. Weitere manuelle  Konfigurationen
  2. Netzwerkkonfiguration fertigstellen (Helferlein)
  3. LUNs anbinden
    1. Für die Shared Disks den VMware KB 1016106 (Link) beachten
  4. HP iLO Log zurücksetzen und Agenten anpassen (ESXi Shell)

localcli hardware ipmi sel clear
chkconfig hp-ams.sh off
/etc/init.d/hp-ams.sh stop
/etc/init.d/sfcbd-watchdog stop
/etc/init.d/sfcbd-watchdog start
Exit

HP iLO Anpassung

  1. DNS Eintrag für HP iLO des Servers korrigieren
  2. DNS Namen neu setzen und SSL Zertifikat generieren

Für beides verwende ich ein etwas angepasstes Script von Ben Short (@practicalsa)

Original:
https://practicaladmin.wordpress.com/2014/11/26/hp-ilo-ssl-certificate-script-v3-now-available/

Meine Variante:
https://gist.github.com/mycloudrevolution/002a1ee6a8ca7ba493de

Virtuelle Windows Installation

  1. VM erstellen und anpassen
    1. RAM voll reserviert
    2. LSI Logic SAS SCSI Controller
    3. VMXNET3 Netzwerkkarten
  2. Basis Bereitstellung des Windows 2012 R2
    1. UAC deaktivieren
    2. Windows Updates

VMware Cluster Konfiguration für vMSCS Nodes

Dei beiden virtuellen MSCS Nodes sollen in der finalen Konstellation nicht auf einem ESXi Host zusammen laufen, daher sind ein paar DRS Regeln erforderlich.

mscs-04

DRS – Host Affinity Regeln

Wem das Ganze zu statisch ist, der kann auch mit VM -Anti Affinity Regeln arbeiten und das DRS für die VMs auf „Partially automated“ stellen.

mscs-08

DRS – VM Anti Affinity Regel

! Vorsicht ! DRS Option „ForceAffinePoweron = 1“ erforderlich (Details)

Windows Firewall Konfiguration für SQL

  1. SQL Ports (feste Ports für drei Instanzen und SQL Server Browser)

New-NetFirewallRule -DisplayName SQL Server (TCP-in) -Direction Inbound –Protocol TCP –LocalPort 14331435 -Action allow -description Allows inbound Microsoft SQL connections.
New-NetFirewallRule -DisplayName
SQL Server Browser (UDP-in) -Direction Inbound –Protocol UDP –LocalPort 1434 -Action allow -Description Allows inbound Microsoft SQL browser connections.

  1. DTC Ports

Wenn DTC eingesetzt wird, kann hier noch eine weitere Regel erforderlich sein. Per Default wird hier die „RPC Dynmaic Port Rage“ verwendet.

Failover Cluster Konfiguration

  1. Failover Clustering Feature hinzufügen
  2. Auf weitere Windows Updates prüfen
  3. Den neuen Node dem Cluster hinzufügen
    1. Die Cluster Verifizierung wird mindestens die fehlenden Disks und vermutlich auch fehlende SQL Updates bemängeln
  4. Node im Failover Cluster Manager pausieren

Shared Disks der ersten VM hinzufügen

Es empfiehlt sich die Raw-Devices auf unterschiedliche SCSI Controller aufzuteilen.
Ich ging wie folgt vor:

SCSI 0:x – Betriebssystem
SCSI 1:x – Quorum, Verify und DTC LUNs
SCSI 2:x – Datenbanken LUNs
SCSI 3:x – Log LUNs

Wenn dann am Ende beide Nodes virtuell sind, sollten die SCSI ID`s übereinstimmen.

mscs-VM01

VM Konfiguration – Beispiel

! Vorsicht ! Keine Shared Disks auf SCSI 0:x hängen

! Vorsicht ! Für alle anderen SCSI Controller muss SCSI Bus Sharing aktiviert werden

mscs-VM02

SCSI Bus Sharing – VM eingeschaltet

! Vorsicht ! Nur möglich beim Hinzufügen oder wenn VM ausgeschaltet ist

Tests

  1. Cluster Verification
    1. Wenn die Konstellation pMSCS und vMSCS Nodes vorhanden ist, kann es zu einem Fehler im Bereich Disks kommen.
      Grund hierfür ist, dass MPIO / nicht MPIO für Shared Disks nicht freigegeben ist. Typischerweise hat man aber auf einem physikalischen Server einen MPIO Treiber im Einsatz und innerhalb einer VM nicht…
  2. Ressourcen schwenken
    1. Move-ClusterGroup -Name „Cluster Group“
    2. Move-ClusterGroup -Name „Available Storage”

SQL Node hinzufügen

  1. Für jede SQL Instanz auf dem vMSCS Node
    1. SQL Setup startenmscs-06
      1. Bei dem MPIO Verify Fehler den Setup wie folgt aufrufen:
        Setup /SkipRules=Cluster_VerifyForErrors /Action=AddNode
    2. SQL Instanz für die Installation auswählenmscs-07.png
    3. Windows Update erneut starten

Weiterer MSCS Node

Das ganze Prozedere wiederholt sich dann mit dem zweiten Host, bis auf eine Ausnahme:

  • Die Shared Disks an der zweiten VM werden nicht als Raw Device hinzugefügt, sondern als „bereits existierende Festplatte“ von dem bestehenden vMSCS Node (Details).

! Vorsicht ! Hier auch wieder auf das SCSI Bus Sharing achten

 

Referenzen

Microsoft – Add or Remove Nodes in a SQL Server Failover Cluster

https://msdn.microsoft.com/en-us/library/ms191545(v=sql.110).aspx

Microsoft – Recommended hotfixes and updates for Windows Server 2012 R2-based failover clusters

https://support.microsoft.com/en-us/kb/2920151

VMware – Setup for Failover Clustering and Microsoft Cluster Service

https://pubs.vmware.com/vsphere-55/index.jsp#com.vmware.vsphere.mscs.doc/GUID-1A2476C0-CA66-4B80-B6F9-8421B6983808.html

VMware – ESXi/ESX hosts with visibility to RDM LUNs being used by MSCS nodes with RDMs may take a long time to start or during LUN rescan (1016106)

http://kb.vmware.com/kb/1016106

VMware – Microsoft Clustering on VMware vSphere: Guidelines for supported configurations (1037959)

http://kb.vmware.com/kb/1037959

VMware – Unable to use Snapshots or perform a backup on virtual machines configured with bus-sharing (1006392)

http://kb.vmware.com/kb/1006392

Blog – SQL 2012 Failover Cluster

http://www.derekseaman.com/2013/09/sql-2012-failover-cluster-pt-1-introduction.html

 

 

No Responses

Leave a Reply