Amazon FSX を使用して SQL Server Always On FCI 向けのマルチ AZ インフラストラクチャをセットアップする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon FSX を使用して SQL Server Always On FCI 向けのマルチ AZ インフラストラクチャをセットアップする

作成者: Manish Garg (AWS)、T.V.R.L.Phani Kumar Dadi (AWS)、Nishad Mankar (AWS)、RAJNEESH TYAGI (AWS)

コードリポジトリ: aws-windows-failover-cluster-automation

環境:PoC またはパイロット

ソース: オンプレミスの SQL Server データベース

ターゲット: EC2 上で実行する Microsoft SQL Server

R タイプ: リホスト

ワークロード:Microsoft

テクノロジー: 移行、インフラストラクチャ、 DevOps

AWS サービス: AWS Managed Microsoft AD、Amazon EC2、Amazon FSx、AWS Systems Manager

[概要]

多数の Microsoft SQL Server Always On フェイルオーバークラスターインスタンス (FCI) を迅速に移行する必要がある場合、このパターンを使用するとプロビジョニング時間を最小限に抑えることができます。自動化と Amazon FSx for Windows File Server を使用することで、手作業、人為的ミス、および多数のクラスターをデプロイするのに必要な時間を削減できます。

このパターンでは、Amazon Web Services (AWS) のマルチアベイラビリティーゾーン (マルチ AZ) 配置で SQL Server FCI のインフラストラクチャを設定します。このインフラストラクチャに必要な AWS サービスのプロビジョニングは、AWS CloudFormation テンプレートを使用して自動化されます。Amazon Elastic Compute Cloud (Amazon EC2) インスタンスでの SQL Server のインストールとクラスターノードの作成は、 PowerShell コマンドを使用して実行されます。

このソリューションでは、可用性の高いマルチ AZ Amazon FSx for Windows ファイルシステムが、SQL Server データベースファイルを保存するための共有モニタリングシステムとして使用されます。SQL Server をホストする Amazon FSx ファイルシステムと EC2 Windows インスタンスは、AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) ドメインに参加します。

前提条件と制限

前提条件

  • アクティブな AWS アカウント

  • AWS CloudFormation テンプレートを使用してリソースをプロビジョニングするための十分なアクセス許可を持つ AWS ユーザー

  • AWS Directory Service for Microsoft Active Directory

  • キーと値のペアで AWS Managed Microsoft AD を認証するための AWS Secrets Manager の認証情報:

    • ADDomainName: <Domain Name>

    • ADDomainJoinUserName: <Domain Username>

    • ADDomainJoinPassword:<Domain User Password>

    • TargetOU : <Target OU Value>

    注: AWS Managed Microsoft AD への参加アクティビティでは、AWS Systems Manager Automation でも同じキー名を使用します。

  • SQL Server のインストールおよび Windows サービスまたはドメインアカウントを作成するための SQL Server メディアファイル。これらはクラスター作成時に使用されます。

  • 別々のアベイラビリティーゾーンに 2 つのパブリックサブネット、アベイラビリティーゾーンに 2 つのプライベートサブネット、インターネットゲートウェイ、NAT ゲートウェイ、ルートテーブルの関連付け、ジャンプサーバーを備えた仮想プライベートクラウド (VPC)

製品バージョン

  • Windows Server 2012 R2 および Microsoft SQL Server 2016

アーキテクチャ

ソーステクノロジースタック

  • 共有ドライブを使用する FCI を備えたオンプレミスの SQL Server

ターゲットテクノロジースタック

  • AWS EC2 インスタンス

  • Amazon FSx for Windows File Server

  • AWS Systems Manager Automation ランブック

  • ネットワーク設定 (VPC、サブネット、インターネットゲートウェイ、NAT ゲートウェイ、ジャンプサーバー、セキュリティグループ)

  • AWS Secrets Manager

  • AWS Managed Microsoft AD

  • Amazon EventBridge

  • AWS Identity and Access Management (IAM)

ターゲット アーキテクチャ

次の図は、1 つの AWS リージョン内の AWS アカウントを示しています。その VPC には 2 つのアベイラビリティーゾーン、2 つのパブリックサブネット (NAT ゲートウェイ付き)、1 つ目のパブリックサブネットに 1 つのジャンプサーバー、2 つのプライベートサブネット (それぞれにノードセキュリティグループ内の SQL Server ノードの EC2 インスタンスがあります)、および 各 SQL Server ノードに接続する Amazon FSx ファイルシステムが含まれます。AWS Directory Service 、Amazon EventBridge、AWS Secrets Manager 、および AWS Systems Manager も含まれています。

パブリックサブネットとプライベートサブネットのリソースとノードセキュリティグループを備えたマルチ AZ アーキテクチャ。

自動化とスケール

  • AWS Systems Manager を使用して AWS Managed Microsoft AD に参加し、SQL Server のインストールを実行します。

ツール

AWS サービス

  • AWS CloudFormation は、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

  • AWS Directory Service は、Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Relational Database Service (Amazon RDS) for SQL Server、Amazon FSx for Windows File Server などの他の AWS サービスで Microsoft Active Directory (AD) を使用するための複数の方法を提供します。

  • Amazon Elastic Compute Cloud (Amazon EC2)」は、AWS クラウドでスケーラブルなコンピューティング容量を提供します。必要な数の仮想サーバーを起動することができ、迅速にスケールアップまたはスケールダウンができます。

  • Amazon EventBridge は、アプリケーションをさまざまなソースからのリアルタイムデータに接続するのに役立つサーバーレスイベントバスサービスです。たとえば、AWS Lambda 関数、API 宛先を使用する HTTP 呼び出しエンドポイント、または他の AWS アカウントのイベントバスなどです。

  • AWS Identity and Access Management (IAM)」は、AWS リソースへのアクセスを安全に管理し、誰が認証され、使用する権限があるかを制御するのに役立ちます。

  • AWS Secrets Manager は、コード内のハードコードされた認証情報 (パスワードを含む) を Secrets Manager への API コールに置き換えて、シークレットをプログラムで取得する上で役立ちます。

  • AWS Systems Manager」は、AWS クラウドで実行されるアプリケーションとインフラストラクチャの管理に役立ちます。アプリケーションとリソースの管理が簡略化され、オペレーション上の問題の検出と解決時間が短縮され、AWS リソースを大規模かつセキュアに管理できるようになります。

その他のツール

  • PowerShell は、Windows、Linux、macOS で実行される Microsoft の自動化および設定管理プログラムです。このパターンでは PowerShell スクリプトを使用します。

コードリポジトリ

このパターンのコードは、 GitHub aws-windows-failover-cluster-automation リポジトリにあります。

ベストプラクティス

エピック

タスク説明必要なスキル

Systems Manager CloudFormation スタックをデプロイします。

  1. AWS アカウントにサインインして、AWS マネジメントコンソール を開きます。

  2. CloudFormation コンソールに移動し、ssm.yamlテンプレートをアップロードして Systems Manager CloudFormation スタックを作成します。次のパラメータの値を指定します。

    • StateUnJoinAssociationLoggingBucketName – テンプレートがログ記録用に作成する S3 バケットの名前を指定します。

    • SSMAssociationADUnjoinNameAWS::SSM::Associationリソースの名前を指定します。

    • SSMAutomationDocumentName – Systems Manager Automation ランブックの名前を指定します。

    • EventBridgeName – EventBridge イベントバスの名前を指定します。

  3. ssm.yaml CloudFormation テンプレートを起動して Systems Manager CloudFormationスタックをデプロイします。このテンプレートは Systems Manager Automation ランブックを作成します。このランブックは、ADJoined: FSXADD タグの付いた新しい EC2 インスタンスが起動するときに開始されます。Automation ランブックは、AWS Managed Microsoft AD ディレクトリにインスタンスを追加します。 

AWS DevOps、 DevOps エンジニア

インフラストラクチャをデプロイします。

Systems Manager スタックのデプロイが正常に完了したら、EC2 インスタンスノード、セキュリティグループ、Amazon FSx for Windows File Server ファイルシステム、および IAM ロールを含む infra スタックを作成します。

  1. CloudFormation コンソールに移動し、infra-cf.yamlテンプレートを起動します。このスタックのデプロイには、以下のパラメータが必要です。

    • ActiveDirectoryId – AWS Managed Microsoft AD の ID

    • ADDnsIpAddresses1 — AWS Managed Microsoft AD のプライマリ DNS IP アドレス

    • ADDnsIpAddresses2 — AWS Managed Microsoft AD のセカンダリ DNS IP アドレス

    • FSxSecurityGroupName — Amazon FSx セキュリティグループの名前

    • FSxWindowsFileSystemName — Amazon FSx ドライブの名前

    • ImageID — SQL Server インスタンスノードの作成に使用されたベース Windows 2012 R2 のイメージまたは Amazon マシンイメージ (AMI) の ID

    • KeyPairName — EC2 インスタンスノードにアクセスするためにアタッチするキーと値のペア

    • Node1SecurityGroupName — 最初のノードのセキュリティグループの名前。

    • Node2SecurityGroupName — 2 番目のノードのセキュリティグループの名前。

    • OUSecretName — AWS Managed Microsoft AD 情報を含むシークレットの名前

    • PrivateSubnet1 — 最初のプライベートサブネットの ID

    • PrivateSubnet2 — 2 番目のプライベートサブネットの ID

    • SqlFSxFCIName — プライマリノード、セカンダリノード、および Amazon FSx に適用されるタグの名前。

    • SqlFSxServerNetBIOSName1 — プライマリ EC2 インスタンスノードの名前 (最大 15 文字)

    • SqlFSxServerNetBIOSName2 — セカンダリ EC2 インスタンスノードの名前 (最大 15 文字)

    • VPC – VPC ID

    • WorkloadInstanceType — EC2 インスタンスのタイプ

    infra スタックをデプロイします。このスタックは、Windows SQL Server FCI の設定に必要なすべてのインフラストラクチャコンポーネントを作成します。

  2. EC2 インスタンスノードが起動すると、Systems Manager Automation ドキュメントが呼び出され、インスタンスが AWS Managed Microsoft AD に結合されます。Systems Manager コンソールの [オートメーション] ページで進行状況を追跡できます。

AWS DevOps、 DevOps エンジニア
タスク説明必要なスキル

Windows ツールのインストール 

  1. プライマリ EC2 インスタンス (ノード 1) にログインします。Windows 機能 (Active Directory および FCI ツール) をインストールするには、次の PowerShell スクリプトを実行します。

    Install-WindowsFeature -Name RSAT-AD-Powershell,Failover-Clustering -IncludeManagementTools Install-WindowsFeature -Name RSAT-Clustering,RSAT-ADDS-Tools,RSAT-AD-Powershell,RSAT-DHCP,RSAT-DNS-Server
  2. ノード 2 のセカンダリ EC2 インスタンスにログインし、同じスクリプトを実行してノード 2 の機能を有効にします。

AWS DevOps、 DevOps エンジニア、DBA

Active Directory ドメインサービスでクラスター化されたコンピュータオブジェクトをプレステージします。

Active Directory ドメインサービス (AD DS) のクラスター名オブジェクト (CNO) をプレステージし、クラスター化されたロールの仮想コンピューターオブジェクト (VCO) をプレステージするには、Windows Server ドキュメントの指示に従ってください。

AWS DevOps、DBA、 DevOps エンジニア

WSFC を作成します。

次の手順に従って、Windows Server Failover Clustering (WSFC) クラスターを作成できます。

  1. プライマリ EC2 インスタンス (ノード 1) にログインします。Amazon FSx ファイル共有を作成し、一覧表示された AD サービスアカウントへのフルアクセスを許可するには、次のコードを実行します。

    Invoke-Command -ComputerName "<FSx Windows Remote PowerShell Endpoint>" -ConfigurationName FSxRemoteAdmin -scriptblock { New-FSxSmbShare -Name "SQLDB" -Path "D:\share" -Description "SQL Databases Share" -ContinuouslyAvailable $true -FolderEnumerationMode AccessBased -EncryptData $true grant-fsxsmbshareaccess -name SQLDB -AccountName "<domain\user>" -accessRight Full }

    このコマンドは、Microsoft SQL Server での使用に最適化され、継続的に使用可能な (CA) ファイル共有も作成します。

  2. プライマリインスタンス (ノード 1) にフェイルオーバークラスターを作成するには、次のコマンドを実行します。

    New-Cluster -Name <CNO Name> -Node  <Node1 Name>, <Node2 Name> -StaticAddress <Node1 Secondary Private IP>, <Node2 Secondary Private IP>

    このコマンドには、以下のパラメータが必要となります。

    • Name - クラスターの名前 (CNO)

    • Node — プライマリノードとセカンダリノードの名前

    • StaticAddress — プライマリノードとセカンダリノードのセカンダリ IP アドレス

    重要: Windows Server Failover Clustering (WSFC) クラスターを作成するには、ドメイン管理者または一般ユーザーが両方のノードの管理者権限を持っている必要があります。それ以外の場合、前回のコマンドは失敗し、メッセージ You do not have administrator privilege on servers が返されます。

  3. クラスターを作成したら、次のコマンドを実行してファイル共有モニタリングを追加します。

    Set-ClusterQuorum -FileShareWitness \\<FSx Windows Remote PowerShell Endpoint>\share\witness
AWS DevOps、DBA、 DevOps エンジニア

SQL Server フェイルオーバークラスターをインストールします。

WSFC クラスターを設定したら、SQL Server クラスターをプライマリインスタンス (ノード 1) にインストールします。

  1. 両方のノードの T ドライブに、tempdb フォルダとlog フォルダを作成します。フォルダは PowerShell コマンドで使用されます。

  2. 両方のノードに SQL Server をインストールするための SQL Server メディアファイルをコピーしたら、ノード 1 で次の PowerShell コマンドを実行して、ノード 1 に SQL Server をインストールします。

D:\setup.exe /Q ` /ACTION=InstallFailoverCluster ` /IACCEPTSQLSERVERLICENSETERMS ` /FEATURES="SQL,IS,BC,Conn" ` /INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server” ` /INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server" ` /RSINSTALLMODE="FilesOnlyMode" ` /INSTANCEID="MSSQLSERVER" ` /INSTANCENAME="MSSQLSERVER" ` /FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" ` /FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node1>;Cluster Network 1;<subnet mask>" ` /FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" ` /INSTANCEDIR="C:\Program Files\Microsoft SQL Server" ` /ENU="True" ` /ERRORREPORTING=0 ` /SQMREPORTING=0 ` /SAPWD=“<Domain User password>” ` /SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS" ` /SQLSYSADMINACCOUNTS="<domain\username>" ` /SQLSVCACCOUNT="<domain\username>" /SQLSVCPASSWORD="<Domain User password>" ` /AGTSVCACCOUNT="<domain\username>" /AGTSVCPASSWORD="<Domain User password>" ` /ISSVCACCOUNT="<domain\username>" /ISSVCPASSWORD="<Domain User password>" ` /FTSVCACCOUNT="NT Service\MSSQLFDLauncher" ` /INSTALLSQLDATADIR="\\<FSX DNS name>\share\Program Files\Microsoft SQL Server" ` /SQLUSERDBDIR="\\<FSX DNS name>\share\data" ` /SQLUSERDBLOGDIR="\\<FSX DNS name>\share\log" ` /SQLTEMPDBDIR="T:\tempdb" ` /SQLTEMPDBLOGDIR="T:\log" ` /SQLBACKUPDIR="\\<FSX DNS name>\share\SQLBackup" ` /SkipRules=Cluster_VerifyForErrors ` /INDICATEPROGRESS
AWS DevOps、DBA、 DevOps エンジニア

セカンダリノードをクラスターに追加します。

SQL Server をセカンダリノード (ノード 2) に追加するには、次のPowerShell コマンドを実行します。

D:\setup.exe /Q ` /ACTION=AddNode ` /IACCEPTSQLSERVERLICENSETERMS ` /INSTANCENAME="MSSQLSERVER" ` /FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" ` /FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node2>;Cluster Network 2;<subnet mask>" ` /FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" ` /CONFIRMIPDEPENDENCYCHANGE=1 ` /SQLSVCACCOUNT="<domain\username>" /SQLSVCPASSWORD="<Domain User password>" ` /AGTSVCACCOUNT="domain\username>" /AGTSVCPASSWORD="<Domain User password>" ` /FTSVCACCOUNT="NT Service\MSSQLFDLauncher" ` /SkipRules=Cluster_VerifyForErrors ` /INDICATEPROGRESS
AWS DevOps、DBA、 DevOps エンジニア

SQL Server FCI をテストします。

  1. いずれかのノードの Windows インスタンスの管理ツールで、Failover Cluster Manager を起動します。

  2. [ノード] に移動し、ノードのステータスが実行中になっていることを確認します。

  3. [ロール] を選択し、SQL Server (MSSQLSERVER) のコンテキスト (右クリック) メニューを開き、[移動してノードを選択] を選択します。

  4. ノードを選択したら、SQL Server を別のノードで実行する必要があります。

DBA、 DevOps エンジニア
タスク説明必要なスキル

リソースをクリーンアップします。

リソースをクリーンアップするには、AWS CloudFormation スタックの削除プロセスを使用します。

  1. AWS CloudFormation コンソール を開きます。

  2. [スタック] ページで、infra スタックを選択します。スタックは現在実行中である必要があります。

  3. [スタックの詳細] ペインで、[削除] を選択します。

  4. プロンプトが表示されたら、[スタックの削除] を選択します。

  5. ssm スタックについては、ステップ 2 ~ 4 を繰り返します。

スタックの削除が完了すると、スタックの状態が DELETE_COMPLETE になります。DELETE_COMPLETE 状態のスタックは、デフォルトでは CloudFormation コンソールに表示されません。削除されたスタックを表示するには、「AWS CloudFormation コンソールで削除されたスタックを表示する」の説明に従ってスタックビューフィルターを変更する必要があります。

削除が失敗した場合、スタックは DELETE_FAILED 状態になります。解決策については、 CloudFormation ドキュメントの「スタックの削除が失敗する」を参照してください。

AWS DevOps、DBA、 DevOps エンジニア

トラブルシューティング

問題ソリューション

AWS CloudFormation テンプレートの障害

デプロイ中に CloudFormation テンプレートに障害が発生した場合は、次の操作を行います。

  1. AWS CloudFormation コンソール を開きます。

  2. CloudFormation コンソールの スタック ページで、スタックを選択します。

  3. [イベント] を選択し、スタックのステータスを確認します。

AWS Managed Microsoft AD への参加に失敗

参加に関する問題のトラブルシューティングには、以下の手順を実行します。

  1. Systems Manager コンソールを開きます。

  2. デプロイのリージョンを選択します。

  3. 左側のペインで [オートメーション] を選択し、失敗したオートメーションランブックを探します。

  4. オートメーションランブックを開き、実行ステータスと実行ステップを確認します。

  5. 失敗したステップの詳細を調べて、正確なエラーまたは失敗を確認します。

関連リソース