はじめに
前回のエントリでは、App Service Resource Provider をインストールするための前提条件であるサーバ証明書とサービスプリンシパルを作成しました。
参考:App Service on Azure Stack(サーバ証明書編)
今回のエントリでは、もう1つの前提条件であるファイルサーバと SQL サーバを用意します
環境
Azure Stack Development Kit 1.1809.0.90 in 物理コンテナDC
ファイルサーバと SQL サーバを作る
App Service Resource Provider が動作するためにはファイルサーバと SQL サーバが必要です。これらのサーバを手作業で構築する方法もありますが、今回は公式の ARM テンプレート(appservice-fileserver-sqlserver-ha)を利用します。このテンプレートを使うと、次のインフラを簡単に構築できます。ありがたい。
- 仮想ネットワーク
- 次の Domain Controller が DNS として設定されているため、各 Virtual Machine はホスト名で名前を解決できます
- Domain Controller
- S2Dとフェイルオーバークラスタで冗長化されたファイルサーバ
- Always on Avaivalility Group で冗長化された SQL サーバ
- Always on Avaivalility Group に必要となる LoadBalancer も同時に作成されます
テンプレートを使う
ファイルサーバと SQL サーバは App Service Resource Provider の前提条件です。そのため、Azure Stack Operator が 管理者用のリソースとしてデプロイする必要があります。具体的にはAdmin portal上で各種作業を行います。
Azure Stack 上でテンプレートを使う場合は、Azure と同じように Template deployment を利用します。Azure Stack 上の Template deployment は、GitHub 上の AzureStack-QuickStart-Templates に保存されているテンプレートを参照しています。今回は、App Service 用のファイルサーバと SQL サーバを冗長構成で作るためのテンプレートである、appservice-fileserver-sqlserver-ha のテンプレートを利用します。
必要なパラメータを入力してデプロイします。初期状態で入力が必須なパラメータは Virtual Machine や SQL サーバなどのパスワードです。
今回の環境だと、約1時間ほどでデプロイが終わりました。Template deployment の Output には、App Service Resource Provider のインストールに利用するパラメータが表示されます。メモしておきましょう。
Domain Controller の構成
テンプレートを使うと、2台の Domain Controller が構築されます。OS は Windows Server 2016 Datacenter Server Core です。GUI は使えません。
Domain : appsvc.local
Forest : appsvc.local
HostName : aps-ad-0.appsvc.local
IPv4Address : 10.0.0.100
Name : APS-AD-0
Domain : appsvc.local
Forest : appsvc.local
HostName : aps-ad-1.appsvc.local
IPv4Address : 10.0.0.101
Name : APS-AD-1
この Domain Controller は、テンプレートでデプロイされる VNet の DNS サーバに設定されます。そのうえで、ファイルサーバ用の VM とSQL サーバ用の VM がこのドメインに参加します。
DNSHostName : aps-ad-0.appsvc.local
Name : APS-AD-0
ObjectClass : computer
DNSHostName : aps-ad-1.appsvc.local
Name : APS-AD-1
ObjectClass : computer
DNSHostName : aps-s2d-1.appsvc.local
Name : APS-S2D-1
ObjectClass : computer
DNSHostName : aps-s2d-0.appsvc.local
Name : APS-S2D-0
ObjectClass : computer
DNSHostName : aps-s2d-c.appsvc.local
Name : aps-s2d-c
ObjectClass : computer
DNSHostName : fs01.appsvc.local
Name : fs01
ObjectClass : computer
DNSHostName : aps-sql-0.appsvc.local
Name : APS-SQL-0
ObjectClass : computer
DNSHostName : aps-sql-1.appsvc.local
Name : APS-SQL-1
ObjectClass : computer
DNSHostName : aodns-fc.appsvc.local
Name : aodns-fc
ObjectClass : computer
DNSHostName : aon-listener-lensqlhademo.appsvc.local
Name : aon-listener-le
ObjectClass : computer
ファイルサーバ
テンプレートを使うと、aps-s2d-0 と aps-s2d-1 の2台が、Failover Cluster と S2D を使って冗長化されます。OS は、Windows Server 2016 Datacenter Server Core です。
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> Get-StorageNode
Name Manufacturer Model SerialNumber OperationalStatus
---- ------------ ----- ------------ -----------------
aps-s2d-0.appsvc.local Microsoft Corporation Virtual Machine 8412-1516-8385-7782-5356-3610-85 Up
aps-s2d-0.appsvc.local Microsoft Corporation Virtual Machine 8412-1516-8385-7782-5356-3610-85 Up
aps-s2d-1.appsvc.local Microsoft Corporation Virtual Machine 5132-3330-0161-5870-4199-9090-66 Up
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> Get-ClusterSharedVolume | fl *
Id : 7275ed00-70a7-46d4-a038-78383d63110a
Name : Cluster Virtual Disk (VDisk01)
OwnerNode : aps-s2d-1
SharedVolumeInfo : {C:\ClusterStorage\Volume1}
State : Online
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> get-volume
DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining Size
----------- --------------- ---------- --------- ------------ ----------------- ------------- ----
E CD-ROM Healthy Unknown 0 B 0 B
A Removable Healthy Unknown 0 B 0 B
D Temporary Storage NTFS Fixed Healthy OK 12.2 GB 14 GB
C NTFS Fixed Healthy OK 113.51 GB 127 GB
VDisk01 CSVFS Fixed Healthy OK 1.98 TB 1.99 TB
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> get-virtualdisk
FriendlyName ResiliencySettingName OperationalStatus HealthStatus IsManualAttach Size
------------ --------------------- ----------------- ------------ -------------- ----
VDisk01 Mirror OK Healthy True 1.99 TB
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> Get-StoragePool -FriendlyName "S2D on aps-s2d-c" | Get-PhysicalDisk
FriendlyName SerialNumber CanPool OperationalStatus HealthStatus Usage Size
------------ ------------ ------- ----------------- ------------ ----- ----
Msft Virtual Disk False OK Healthy Auto-Select 1023 GB
Msft Virtual Disk False OK Healthy Auto-Select 1023 GB
Msft Virtual Disk False OK Healthy Auto-Select 1023 GB
Msft Virtual Disk False OK Healthy Auto-Select 1023 GB
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> Get-Cluster
Name
----
aps-s2d-c
[APS-S2D-0]: PS C:\Users\appsvcadmin\Documents> Get-ClusterNode
Name ID State
---- -- -----
aps-s2d-0 1 Up
aps-s2d-1 2 Up
SQL サーバ
テンプレートを使うと、aps-sql-0 と aps-sql-1 の2台が、Always On Availability Groups を使って冗長化されます。
[APS-sql-1]: PS C:\Users\appsvcadmin\Documents> Get-ClusterNode
Name ID State
---- -- -----
aps-sql-0 2 Up
aps-sql-1 1 Up
[APS-sql-1]: PS C:\Users\appsvcadmin\Documents> Get-Cluster
Name
----
aodns-fc
[APS-sql-1]: PS C:\Users\appsvcadmin\Documents> Get-ClusterResource
Name State OwnerGroup ResourceType
---- ----- ---------- ------------
alwayson-ag Online alwayson-ag SQL Server Availability Group
aon-listener-lensqlhademo Online alwayson-ag Network Name
Cloud Witness Online Cluster Group Cloud Witness
Cluster IP Address Online Cluster Group IP Address
Cluster Name Online Cluster Group Network Name
IP Address 10.0.1.100 Online alwayson-ag IP Address
PS C:\Users\appsvcadmin> Get-ChildItem SQLSERVER:\SQL\APS-SQL-0\DEFAULT\AvailabilityGroups
Name PrimaryReplicaServerName
---- ------------------------
alwayson-ag APS-SQL-0
PS SQLSERVER:\SQL\APS-SQL-0\DEFAULT\> get-item . | select ishadrenabled
IsHadrEnabled
-------------
True
PS C:\Users\appsvcadmin> invoke-Sqlcmd -Query "select name, state_desc, port FROM sys.tcp_endpoints" -ServerInstance APS-sql-1
name state_desc port
---- ---------- ----
Dedicated Admin Connection STARTED 0
TSQL Default TCP STARTED 0
aodns-hadr STARTED 5022
PS C:\Users\appsvcadmin> invoke-Sqlcmd -Query "SELECT type_desc, port FROM sys.TCP_endpoints"
type_desc port
--------- ----
TSQL 0
TSQL 0
DATABASE_MIRRORING 5022
まとめ
本エントリーでは、App Service on Azure Stack の前提条件であるファイルサーバと SQL サーバを構築しました。Microsoft が ARM テンプレートを用意してくれているおかげで、ファイルサーバと SQL サーバのデプロイは簡単でした。ただし、Azure Stack Operator はこれらのサーバ群を運用管理しなければなりません。Azure Stack の IaaS は Windows Server 部分を高度に隠蔽しています。しかし、PaaS になったとたんに Windows Server が前面で登場します。運用管理が正直しんどいですね。
前回のエントリと本エントリで前提条件の準備が整いました。App Service on Azure Stack のキモである App Service Resourece Provider のインストールに進みます。