LoginSignup
2
1

More than 1 year has passed since last update.

Azure共有ディスクを利用したWSFC(LBなし / 分散ネットワーク名)

Last updated at Posted at 2023-04-30

Windows Server Failover Cluster (WSFC) を作る

検証のために Azure 上で Windows Server Failover Cluster (WSFC) を構築したのですが、
 ・ロードバランサーがいるんだっけ…いらないんだっけ…
 ・クラスター作成のオプションってなんだったっけ…
等々を忘れていて手間取りましたので、備忘を兼ねて整理しておきます。

クラスタは以下のような形で、構築します。
 - 仮想マシン(b2ms) x2
 - OS は Windows Server 2019 以降
 - 分散ネットワーク名(VNN)で構築
 - 共有ディスクを利用する
 - スケールアウトファイルサーバーも構成する

構築時に使用した、ドメイン参加~スケールアウトファイルサーバーの設定を行う Powershell も残してみました。

Azure 上で WSFC を構成する際の LB 要否

Windows Server Failover Cluster (WSFC) の構成パターンとして、仮想ネットワーク名(VNN)を用いる構成と、分散ネットワーク名 (DNN)を用いる構成があります。

Azure 上での構成を前提に、少しまとめてみました。

従来
仮想ネットワーク名 (VNN) + Azure Load Balancer
Windows Server 2019 以降
分散ネットワーク名 (DNN)
構成イメージ image.png image.png
クラスタ構築時
既定のうごき
オンプレミス/他クラウド等で構築した場合はこちらが既定 Azure 上で構成した場合にはこちらが既定
LB要否を指定したい場合
New-Cluster の オプション
New-Cluster -ManagementPointNetworkType Singleton New-Cluster -ManagementPointNetworkType Distributed

従来、仮想ネットワーク名(VNN)と仮想 IP アクセスポイントを設定していました。
しかし、Azure 環境では仮想 IP を利用することはできないという制約があり、Azure 内部ロードバランサー を別途構成する形で、WSFC を実現をする必要がありました。

例えば、 wsfc というクラスター名を作成し IP 10.0.0.100 を設定したい場合、別途 10.0.0.100 の フロントIPアドレスを持たせた ロードバランサーを構成し、そのバックエンドにクラスターノードを配置する構成です。
クライアントからの wsfc 宛の通信は、10.0.0.100 にいったん名前解決されてロードバランサーへ到達し、ロードバランサーはバックエンドであるクラスターノードに対して通信を届ける形です。

しかし、Windows Server 2019 以降であれば、クラスターの作成中に、サーバーは自分自身が Azure 上 で稼働しているかどうかを判断し、自動的に 分散ネットワーク名 (DNN) リソースを使用する構成でクラスターが作成される動作となっています。
こちらは、ロード バランサーを使用しない構成となります。
分散ネットワーク名の場合、クライアントからの wsfc 宛の通信は、直接、クラスターノードのIPアドレスに名前解決され、直接クラスターノードに対して通信されます。

なお、Azure 上 で稼働しているかどうかは以下のように確認できます。

クラスターがAzure上にあるかを判定する方法
Get-Cluster | fl DetectedCloudPlatform

# 実行結果
# DetectedCloudPlatform            : Azure

ちなみに、Windows Server 2019 以降では、Azure 上にクラスターを構成しようとしていることが感知されると、DNN 以外にも有効になる機能があります。

 - クラスターノード間 の ハートビート (ネットワーク通信閾値)が自動調整される
 - クラスターノードが Azureホストのメンテナンスを検知した際のイベントが追加され、ログ記録やその他アクションを設定することができる

詳細は こちらのブログ(英語) に記載されています。

また、Azure 上でも、これまでのオンプレミス同様構成をしたい場合には、表でも整理した通り、New-Cluster コマンドのオプション -ManagementPointNetworkType `Singleton を指定して構築する形です。
詳しくは サポートチームのブログ で手順が案内がされています。

早速、分散ネットワーク(DNN) で構築してみる

今回構成する環境はこんな感じです。

image.png

クラスターの作成自体は DNN で作成できますので、ロードバランサーは不要です。

加えて、クラスター化された役割として スケールアウトファイルサーバー を持たせます。
スケールアウトファイルサーバー は DNN 同様、DNS ラウンドロビンを利用した負荷分散が可能なファイルサーバーであるため、こちらもロードバランサーなしで構成できます。

では早速作っていきます。
なお、仮想ネットワーク と Active Directory の作成は既に済んでいる前提です。

1.仮想マシンを作る

仮想マシンは 2台 用意します。
作成が完了した後は、DNS が AD サーバー宛になるようにしておきます。

Azure Portal から 仮想マシン を作成する

まずは仮想マシンを用意していきます。
image.png

共有ディスクをここで作成しても良いのですが、今回はまだ設定していません。
image.png

このまま次々とデフォルトのまま進み、作成を完了させます。
仮想マシンは 2台 用意しますので、もう一度繰り返します。

作成が完了した後は、DNS を AD サーバー宛にしておきます。
仮想マシンの [設定] - [ネットワーク] を開き、ネットワークインターフェース のリンク から、仮想マシンに紐づいた NIC を開きます。
image.png

DNS サーバー の設定を変更し、ADサーバー のプライベートIPアドレスを入力します。
image.png

仮想マシン が起動済みの場合には、いったん再起動させ、設定した DNSサーバー へ名前解決するようにしておきます。
image.png

2.マネージドディスクを作成してアタッチする

つづけて、マネージドディスク を 共有ディスク として作成していきます。
作成時に、[共有ディスクを有効にする] にチェックをいれて作成するだけです。

Azure Portal から 共有ディスク を作成してアタッチする

Azure Portal から [ディスク] と検索し、新規作成に進みます。

image.png

選んだマネージドディスク SKU により、何台の仮想マシンで共有できるかの最大数が変動します。
以下公開ドキュメントも参考にして、調整します。

https://learn.microsoft.com/ja-jp/azure/virtual-machines/disks-shared#disk-sizes

今回は一旦、既定値のまま進めてみます。

image.png

既定では OFF になっていますが、 [共有ディスクを有効にする] にチェックをいれることで共有ディスクになります。
最大共有数もここで選択します。 他は既定値のまま、作成を完了させます。

image.png

共有ディスクの作成が完了したら、仮想マシンのディスクとして追加しておきます。
作成した 仮想マシン 2台 とも、追加しておく必要があります。

作成した仮想マシンを開き、[設定] - [ディスク] - [既存のディスクをアタッチ] と進むと、作成した共有ディスクがプルダウンの選択肢に現れるはずです。
共有ディスクを選択して、設定を保存します。

image.png

3.ストレージアカウントを作成して、アクセスキーを確認する

WSFC の クォーラム となる ストレージアカウント も作成しておきます。
作成が完了したら、[セキュリティとネットワーク] - [アクセスキー] の箇所から、ストレージアカウント名 と キー が確認できます。
後ほど WSFC のクォーラムとして構成する際に、こちらの ストレージアカウント名 と キー を利用します。

ストレージアカウントの作成と、ストレージアカウント名 と キー の確認

image.png

image.png

4.仮想マシンをドメイン参加させる

クラスターノードとなる仮想マシン 2台 とも、Active Directory ドメインに参加させます。
作成した 仮想マシン にログインして GUI から操作を行ってもOKですし、Powershell で行う場合には下記で参加できると思います。
ドメイン名、管理者名、パスワードは、環境にあわせて変更する必要があります。

作成した 仮想マシン 2台 とも、ドメイン参加をさせる必要があります。

# 手順1 ドメイン参加する
# ドメイン名、ユーザー名、パスワードを指定
$domainName = "contoso.local"
$userName = "domainadmin"
$password = ConvertTo-SecureString "password" -AsPlainText -Force
 
# クレデンシャルオブジェクトを作成
$credential = New-Object System.Management.Automation.PSCredential($userName, $password)
 
# ドメイン参加を実行
Add-Computer -DomainName $domainName -Credential $credential -Verbose
 
# コンピュータを再起動(ドメイン参加後に必要)
Restart-Computer

ドメイン参加の操作は、Azure Portal 上から、実行コマンドで行うこともできます。
この場合には、ユーザー名の最後にドメイン名を指定する必要があります。
ご注意ください。

Azure Portal 上での実行例

image.png

image.png

5.クラスターを構成する

クラスターを構成していきます。
ここからの手順は、仮想マシンどちらか1台で OK です。

以下 Powershell スクリプトを変数など調整して流せば、構成できると思います。
指定した仮想マシンに、フェールオーバー クラスタ リング機能 と スケールアウトファイルサーバー機能をインストールし、クラスター作成、クオーラムの設定、共有ディスクのフォーマットとファイル共有の作成を行うスクリプトです。
こちらの公開ドキュメント を参考に作成しました。

途中、手順6-7 で、共有ディスクをフォーマットをする箇所があります。
ディスク番号を指定してフォーマットしていますので、誤ったディスク番号を指定しないように注意です。

### 各種パラメーターの調整
# クラスターノード名を指定する。 クラスター名を指定する。 SoFS ロール名を指定する。
$nodes = ("wsfc01", "wsfc02")
$clustername = "wsfc"
$sofsrole = "sofsrole"

# ストレージアカウントのアカウント名とアクセスキーを指定する
$parameters = @{
    CloudWitness = $true
    AccountName  = 'アカウント名'
    AccessKey    = 'アクセスキー'
}

# ディスク番号は手順 6 で確認した番号を指定する。ドライブレターは任意の文字、ディスクラベルは任意の名前を指定する。
$DiskNumber = 2
$DriveLetter = "S"
$DiskLabel = "FileShereDisk"

### 各種パラメーターの調整 - 終わり

### SoFS 構築用スクリプト。手順6-7 のディスクフォーマットを行う箇所注意。
# 手順 2: WSFC Role をインストール
icm $nodes {Install-WindowsFeature Failover-Clustering -IncludeAllSubFeature -IncludeManagementTools}
icm $nodes {Install-WindowsFeature FS-FileServer}

# 手順 3: クラスター構成を検証する
Test-Cluster -Node $nodes

# 手順 4: クラスターを作成する
New-Cluster -Name $clustername -Node $nodes

# 手順 5: クラスターのクオーラムを構成する(クラウド監視)
Set-ClusterQuorum @parameters

# 手順 6: ディスク一覧のうち、ファイルシステム未作成のディスクのみ、テーブル形式で表示する。ディスク番号を確認する。
get-disk | where partitionstyle -eq "RAW" | format-table -AutoSize

# 手順 7: クラスターの共有ボリュームを追加する。
# ディスク番号は手順 6 で確認した番号を指定する。ドライブレターは任意の文字、ディスクラベルは任意の名前を指定する。
# ファイルシステム未作成のディスクを初期化し、GPT パーティションを作成し、ドライブレターを割り当て、ReFS ファイルシステムを作成する。
Get-Disk -Number $DiskNumber | Where-Object PartitionStyle -Eq "RAW" | Initialize-Disk -PartitionStyle GPT -PassThru |  New-Partition -DriveLetter $DriveLetter -UseMaximumSize | Format-Volume  -FileSystem ReFS -NewFileSystemLabel $DiskLabel -Force -Verbose

# 手順 8: クラスター全ノードで利用可能なディスクをクラスターディスクとして追加する。その後、共有ボリュームを追加する。
Get-ClusterAvailableDisk -All | Add-ClusterDisk
Add-ClusterSharedVolume -Name "Cluster Disk 1"

# 手順 9: SoFS ロールを追加する。新しい共有フォルダを作成する。
Add-ClusterScaleOutFileServerRole -Name $sofsrole -Cluster $clustername
New-Item -Path C:\ClusterStorage\Volume1\Share001 -ItemType Directory
New-SmbShare -Name Share001 -Path C:\ClusterStorage\Volume1\Share001

各手順ごとに実行した例や、ポイントなど記載しておきます。

手順 2: WSFC Role をインストール - 実行例

まずは 仮想マシン2台共に、フェールオーバー クラスタ リング機能をインストールします。
また、スケールアウトファイルサーバー(SoFS)機能のため、ファイル サーバーの機能もインストールします。
今回 wsfc01 、wsfc02 という仮想マシンで構成していますが、必要に応じて $node の箇所を変更してください。

# 手順 2: WSFC Role をインストール
$nodes = ("wsfc01", "wsfc02")
icm $nodes {Install-WindowsFeature Failover-Clustering -IncludeAllSubFeature -IncludeManagementTools}
icm $nodes {Install-WindowsFeature FS-FileServer}

image.png

手順 3: クラスター構成を検証する,手順 4: クラスターを作成する - 実行例

クラスター構成の検証と、クラスターの作成を行います。
クラスターの名前などは適宜変更してください。

# 手順 3: クラスター構成を検証する
Test-Cluster -Node $nodes

# 手順 4: クラスターを作成する
New-Cluster -Name "wsfc" -Node $nodes

image.png

image.png

手順 5: クラスターのクオーラムを構成する(クラウド監視)- 実行例

作成したクラスターのクォーラムを設定します。
クォーラムは、スプリット ブレイン(デュアルマスター)を防ぐための仕組みです。
今回はストレージアカウントを利用したでクラウド監視のパターンで構成しますが、その他のパターン等は こちらに紹介があります。

先ほど確認した ストレージアカウント の アカウント名 と アクセスキー を使用します

# 手順 5: クラスターのクオーラムを構成する(クラウド監視)
$parameters = @{
    CloudWitness = $true
    AccountName  = 'アカウント名'
    AccessKey    = 'アクセスキー'
}
Set-ClusterQuorum @parameters

image.png

手順 6: ディスク一覧確認、手順 7: フォーマットとクラスターの共有ボリューム追加 - 実行例

追加した共有ディスクをフォーマットします。
まずは手順6 で、対象ディスクの番号を確認しておきます。
確認したディスク番号で、手順7 のスクリプトを修正します。
今回の例では、ディスク番号が2 ( $DiskNumber = 2 ) を指定して、フォーマットを行っています。
なお ディスク番号以外にも、必要に応じて、ドライブレター や ディスクラベル を変更します。

# 手順 6: ディスク一覧のうち、ファイルシステム未作成のディスクのみ、テーブル形式で表示する。ディスク番号を確認する。
get-disk | where partitionstyle -eq "RAW" | format-table -AutoSize

# 手順 7: クラスターの共有ボリュームを追加する。
# ディスク番号は手順 6 で確認した番号を指定する。ドライブレターは任意の文字、ディスクラベルは任意の名前を指定する。
# ファイルシステム未作成のディスクを初期化し、GPT パーティションを作成し、ドライブレターを割り当て、ReFS ファイルシステムを作成する。
$DiskNumber = 2
$DriveLetter = "S"
$DiskLabel = "FileShereDisk"
Get-Disk -Number $DiskNumber | Where-Object PartitionStyle -Eq "RAW" | Initialize-Disk -PartitionStyle GPT -PassThru |  New-Partition -DriveLetter $DriveLetter -UseMaximumSize | Format-Volume  -FileSystem ReFS -NewFileSystemLabel $DiskLabel -Force -Verbose

手順6 確認結果: ディスク番号 2
image.png

手順7 フォーマット
image.png

手順 8: クラスターディスク追加と共有ボリューム作成。手順 9: SoFS ロールを追加と共有フォルダ作成 - 実行例

フォーマットしたディスクをクラスターディスクとして追加し、共有ボリュームにします。
その後、SoFS のロールを作成し、共有フォルダを作成します。
今回だと SoFS のロールを "sofsrole" という名前で作成しています。
また、作成する共有フォルダは "Share001" です。
\ "SoFS のロール名" \ "共有名" \ でアクセスできますので、\sofsrole\share001\ でアクセスできます。

# 手順 8: クラスター全ノードで利用可能なディスクをクラスターディスクとして追加する。その後、共有ボリュームを追加する。
Get-ClusterAvailableDisk -All | Add-ClusterDisk
Add-ClusterSharedVolume -Name "Cluster Disk 1"

# 手順 9: SoFS ロールを追加する。新しい共有フォルダを作成する。
Add-ClusterScaleOutFileServerRole -Name sofsrole -Cluster "wsfc"
New-Item -Path C:\ClusterStorage\Volume1\Share001 -ItemType Directory
New-SmbShare -Name Share001 -Path C:\ClusterStorage\Volume1\Share001

手順8 実行結果
image.png

image.png

手順9 実行結果
image.png

image.png
これで構成が完了しました。

6.動作確認

手順4 の クラスターの構築が、エラー無く完了しました。
手順5以降、クラスターに対しての操作も、特に問題なく成功しています。

また、スケールアウトファイルサーバーとしても、別の仮想マシンから確認してみると、 \sofsrole\share001\ でアクセスできています。
必要に応じて NTFSアクセス権などは調整する必要がありますが、こちらも問題ないようです。

image.png

なお、登録した クラスター名(wsfc) や SoFSロール名(sofs) は、たしかに DNSラウンドロビン で、クラスターノード(wsfc01 と wsfc02)のIPを返す形であることも確認できました。

image.png

Tips1 :ファイルサーバー と スケールアウトファイルサーバー(SoFS) の使いわけ

今回作成した WSFC に持たせた役割は、スケールアウトファイルサーバーでしたが、通常のファイルサーバーの役割を追加する場合もあります。

以下公開ドキュメントに、比較表があります。

ファイルを開く、ファイルを閉じる、新しいファイルを作成する、既存のファイル名を変更するなどのメタデータ操作がワークロードにより大量に生成される場合には、スケールアウト ファイル サーバーを使用しないでください。

例えば、ユーザープロファイルを配置するファイルサーバーとして利用する場合を考えてみると、ユーザープロファイルを移動ユーザープロファイルで実現する場合には、メタデータの操作が多くなりますので、この場合には、通常のファイルサーバーの構成の方が推奨となります。一方、FSLogix や UPD のように VHD をマウントする方式で、メタデータ操作頻度がすくない場合においては、スケールアウトファイルサーバーの方が適している形になります。

Tips2 : 汎用ファイルサーバー の場合の例

汎用ファイルサーバーの場合には、アクティブ/スタンバイ での構成となります。
共有ディスクはどちらのクラスターノードが占有し、DNSによる負荷分散も行わない形になります。
ロードバランサーを配置して構成してみます。

image.png

実行例

ファイルサーバーの役割を追加。

image.png

クラスターノードの自身のIPアドレスがいったん設定されるが、使用済みの為、起動できない。

image.png

静的IPアドレスとして、ロードバランサーのフロントエンドIPアドレスを指定して起動する。

image.png

構成できました。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1