Always On 可用性グループを配置したクラスタ構成のAWS EC2のOSを
Windows Server 2012R2から2019へインプレースアップグレードしたときのメモです。
これらのページを参考に作業しました。
作業する場合は各種バックアップなどを取得し、十分テストを行い各自の責任で注意して実行してください。
同じハードウェアでフェールオーバー クラスターをアップグレードする
https://docs.microsoft.com/ja-jp/windows-server/failover-clustering/upgrade-option-same-hardware
クラスター オペレーティング システムのローリング アップグレード
https://docs.microsoft.com/ja-jp/windows-server/failover-clustering/cluster-operating-system-rolling-upgrade
Windows Server 2012R2のクラスタ機から、直接、Windows Server 2019へインプレースアップグレードを行うと、クラスタが壊れます。
一旦、Windows Server 2016へアップグレードしてから、さらに2019へアップグレードしてください。
また、クラスターの機能レベルを適宜、アップグレードしながら作業する必要があります。
インプレースアップグレード
- EC2インスタンスのPVDriverを更新する
AWS EC2(Windows Server 2012R2)ドライバ更新 - 初期状態
1番機(アクティブ)
2番機(スタンバイ) - Windows Server 2012R2 → 2016
- Windows Server 2016 → 2019
- Windows Update実行
※テスト時にWindows Updateで「更新プログラムを構成できませんでした」となってしまう場合がありました。その時は、VBScriptによるWindows Updateを実行することで適用することができました。VBScriptによるWindowsUpdateでも失敗することがあったので、必ず成功するわけではありませんでした。
何度か適用と変更を元に戻すを繰り返すことで当てることができましたが、原因不明。
その他
- Windows Server 2019 ロック画面の画像変更
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization /v LockScreenImage /t "REG_SZ" /d "c:\windows\web\screen\img105.jpg" /f reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Personalization /v LockScreenOverlaysDisabled /t "REG_DWORD" /d 1 /f
- Windows Server 2016にアップグレード後、インスタンス内にインストールしていた、Management Studioが起動できませんでした。
→.Netをアップグレードしたところ解決しました。 -
イベントログに警告
コンポーネント {B31118B2-1F49-48E5-B6F5-BC21CAEC56FB} のイベント Load のプロファイル通知は失敗しました。エラー コードは See Tracelogging for error details です。
イベントID 1534
→レジストリを削除したところ解決しました。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileNotification\TDL HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\WindowsNT\CurrentVersion\ProfileNotification\TDL
-
タスクスケジューラの動き
定期的に繰り返し実行するタスクが意図したとおり動いているか確認する。
2012R2の時に毎日、継続期間 1日で定期実行しているタスクは、
1回、継続期間 無期限のように変更しないと、想定通り実行されない場合がある。 - SQLServerのwmiカウンタが取得できなくなるケース
cactiでWin32_PerfFormattedData_MSSQLSERVER_SQLServerMemoryManagerの値を取得していましたが、WindowsServer2019にアップグレード後、取得できないマシンが何台かありました。
こちらのサイトを参考に修正しました。
https://forest.watch.impress.co.jp/docs/news/1394018.html
# 1. カウンターを再構築 cd c:\windows\system32 lodctr /R cd c:\windows\sysWOW64 lodctr /R
- インスタンスストアの初期化
インスタンスストア付きのEC2をEC2Launch v2にアップグレードしたところ、起動時の自動マウントが動かなくなってしまった。
下記のPowerShellを用意し、タスクスケジューラからインスタンス起動時に実行します。
Z_DriveMount.ps1
# 未フォーマットのNVMeドライブをフォーマットして、Zドライブにマウント $path = Split-Path -Parent $MyInvocation.MyCommand.Path Set-Location $path $log_name = $myInvocation.MyCommand.name + ".log"; Write-Output $("START:" + (Get-Date).toString('yyyy-MM-dd HH:mm:ss.fff')) | Add-Content -Encoding Default $log_name $ret=Get-Disk | Where {$_.partitionstyle -eq "raw" -and $_.FriendlyName -eq "NVMe Amazon EC2 NVMe" } #null or empty の場合はfalse if ( ($ret) ){ Get-Disk | Out-File -FilePath $log_name -Append -Encoding Ascii $ret=Get-Disk | Where {$_.partitionstyle -eq "raw" -and $_.FriendlyName -eq "NVMe Amazon EC2 NVMe" } | ` Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize | ` Format-Volume -FileSystem NTFS -Force | Get-Partition | Add-PartitionAccessPath -AccessPath "Z:" $ret| Out-File -FilePath $log_name -Append -Encoding Ascii Get-Disk | Out-File -FilePath $log_name -Append -Encoding Ascii } else { Write-Output "SKIP" | Add-Content -Encoding Default $log_name } Write-Output $("END:" + (Get-Date).toString('yyyy-MM-dd HH:mm:ss.fff')) | Add-Content -Encoding Default $log_name
※インスタンスストアが一つ搭載されたインスタンスのみで利用可能。
■プログラム/スクリプト
未初期化の場合、初期化してZドライブとしてマウントする。
ps1の配置されたフォルダにlogファイルが出力される。
%Systemroot%\System32\WindowsPowerShell\v1.0\powershell.exe
■引数の追加
-ExecutionPolicy Bypass .\Z_DriveMount.ps1
■開始
Z_DriveMount.ps1を格納しているフォルダ