この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
AWSでSQL Serverを利用する場合、マネージドなRDS for SQL Serverを利用することをオススメします。
しかし、さまざまな理由によってRDS for SQL Serverを採用できず、EC2上でSQL Serverを利用することもあります。
今回はそんなケースで、RDS for SQL Serverは利用できないが、SQL Server on EC2をマルチAZで動かしたい場合の選択肢となる、 SQL Server Always OnのFCI(フェールオーバークラスタインスタンス)を構築する機会があったので構築手順を紹介します。
先日、SQL Server FCIをFSx for Windowsを使って構築するブログのAWSリソース編を書きました。
本ブログはこのブログの続編です。 AWSリソースはこのブログのとおり構築されていることを前提に、Windows内部の構築をやっていきます。
参考サイト
このAWSブログを参考にSQL Server FCI環境を作ります。
本ブログではWindows Serverにリモートデスクトップへログインして、Windows内部の環境構築をスクリーンショット付きで紹介していきます。
構成図
AWSの構成は次のような感じです。
それではさっそく構築していきます。
Windowsファイアウォールの無効化
まず最初に外部からSQL Serverへアクセスしたときにブロックされないよう、Windowsファイアウォールを無効化しておきます。
コントロールパネルからWindowsファイアウォールを開いて、「Windowsファイアウォールの有効化または無効化」をクリックします。
すべてWindowsファイアウォールを無効にしてOKします。
この作業をSQL Server Node用の2つのEC2に対して行います。
Windowsのネットワーク設定
このドキュメントを参考にWindowsのネットワークを設定します。
次のように、Windowsインスタンスで静的IPアドレスが 10.22.10.11
(もう一つのEC2は 10.22.11.11
)で指定して設定できていればOKです。
この作業をSQL Server Node用の2つのEC2に対して行います。
Windowsクラスターの構築
次に、Windowsクラスターを構築するためフェールオーバークラスタリングのインストールをします。
SQL Server Node用のEC2へリモートデスクトップでログインして、サーバーマネージャーを開きます。 「管理>役割と機能の追加」をクリックします。
役割と機能追加ウィザードが始まるので、次へ進みます。
次へ進みます。
次へ進みます。
次へ進みます。
「フェールオーバークラスタリング」にチェックを入れます。
機能の追加をクリックします。
次へ進みます。
「必要に応じて対象サーバーを自動的に再起動する」にチェックを入れます。 インストールをクリックします。
インストールにしばらく時間がかかるので待ちます。 インストールが終わると、Windowsが再起動されます。
同様に、別AZのSQL Server Node用EC2にも「フェールオーバークラスタリング」をインストール します。
両方のEC2にフェールオーバークラスタリングのインストールが終わったら、 再度SQL Server Node用のEC2にリモートデスクトップでログインしてサーバーマネージャーを開きます。
「ツール>フェールオーバークラスターマネージャー」をクリックします。
フェールオーバークラスターマネージャーが起動するので、「構成の検証」をクリックします。
次へ進みます。
「参照」ボタンをクリックします。
「ec2」と入力して、「名前の確認」をクリックします。
SQL Server Node用のEC2のホスト名を選択して、OKボタンをクリックします。
もう一度「ec2」と入力して、「名前の確認」をクリックします。
別AZのSQL Server Node用のEC2のホスト名を選択して、OKボタンをクリックします。
OKボタンをクリックします。
次へ進みます。
次へ進みます。
次へ進みます。
「検証されたノードを使用してクラスターを今すぐ作成する」にチェックを入れて、完了ボタンをクリックします。
そうすると、今度はクラスターの作成ウィザードが始まるのでそれを進めます。
次へ進みます。
クラスター名を適当に入力します。今回は TEST-CLUSTER という名前にします。
住所(IPアドレス)はクラスター用IPとして使用予定の 10.22.10.12
と 10.22.11.12
を入力して、次へ進みます。
次へ進みます。
クラスターの作成ができたら、完了ボタンをクリックして終了します。
次にクラスタークォーラムの設定をします。 フェールオーバークラスターマネージャーで、TESUT-CLUSTERを選択して、 「他のアクション>クラスタークォーラム設定の構成」をクリックします。
次へ進みます。
「クォーラム監視を選択する」を選択して、次へ進みます。
「ファイル共有監視を構成する」を選択して、次へ進みます。
ファイル共有パスに、クォーラム用に作成したFSx for Windowsのドメイン名と共有フォルダ名を入力して、次へ進みます。
次へ進みます。
クラスターのクォーラム設定が正常に構成できたら完了します。
最後にTEST-CLUSTERがSQL Server FCIのもろもろのコンポーネントを作成できるようにフルコントロールの権限を付与します。 私はこの権限付与を忘れていて、SQL Serverインストール時にエラーが出てハマりました。
ADツールが必要なので、まずはサーバーマネージャーの役割と機能の追加から、「AD DSおよびAD LDSツール」にチェックを入れてインストールします。
インストールができたらサーバーマネージャを開き、 「ツール>Active Dirctoryユーザーとコンピューター」を開きます。
「表示>拡張機能」にチェックを入れます。
「example.local>example>Computers」を右クリックして、プロパティをクリックします。
セキュリティタブをクリックして、追加ボタンをクリックします。
オブジェクトの種類をクリックします。
「コンピューター」にチェックを入れて、OKボタンをクリックします。
オブジェクト名に「TEST-CLUSTER(クラスター名)」を入力して、OKボタンを押します。
詳細設定ボタンをクリックします。
「TEST-CLUSTER」を選択して、編集ボタンをクリックします。
「フルコントロール」にチェックを入れて、OKボタンをクリックします。
OKボタンをクリックします。これでWindowsクラスターの構築は完了です。
SQL Server FCIのインストール
次にSQL Serverのインストールをします。今回は検証目的ですので、評価版をこちらからダウンロードしてインストールします。 SQL Serverのライセンスの取り扱いについては、Microsoftの規約にしたがってください。
ダウンロードしたexeを起動するとこんな画面が表示されるので、「カスタム」を選択します。
インストールボタンをクリックします。
インストールのパッケージダウンロードに時間がかかるのでしばらく待ちます。
ダウンロードが終わるとSQL Serverインストールセンターが起動するので、 「インストール>SQL Serverフェールオーバークラスターの新規インストール」をクリックします。
次へ進みます。
ライセンス条項をよく読んでください。 ライセンス条項に同意できたらチェックを入れて次へ進みます。
次へ進みます。
次へ進みます。
「データベースエンジンサービス」にチェックを入れて、次へ進みます。
SQL Serverのネットワーク名を適当に入力します。今回は TEST-SQLSERVER という名前にしています。 名前付きインスタンスを「MSSQLSERVER」と入力して、次へ進みます。
次へ進みます。
次へ進みます。
アドレスにSQL Serverリスナー用IPとして使用予定の 10.22.10.13
を入力して、次へ進みます。
SQL ServerエージェントとSQL Serverデータベースエンジンに、example.localドメインのAdminユーザーとパスワードを設定します。 今回は検証用なのでAdminユーザーを使用していますが、必要に応じてSQL Server用のユーザーを作成してください。
「現在のユーザーの追加」ボタンをクリックして、example.localドメインのAdminユーザーでログインできるようにしておきます。 今回は検証用なのでAdminユーザーを使用していますが、必要に応じてSQL Serverログイン用のユーザーを作成してください。 クリックしたら、データディレクトリタブに移動します。
「データルートディレクトリ」にデータ用に作成したFSx for Windowsのドメイン名と共有フォルダ名を入力して、次へ進みます。
設定に問題がなければ、インストールボタンをクリックしてインストールを開始します。
インストールにしばらく時間がかかるので待ちます。
インストールが問題なく完了したら閉じます。
SQL Serverのインストールは各ノードに必要です。別AZのSQL Server Node用のEC2にもインストールします。
同様にSQL Server評価版をダウンロードして、SQL Serverインストールセンターを立ち上げて、 「インストール>SQL Serverフェールオーバークラスターにノードを追加」をクリックします。
次へ進みます。
アドレスにSQL Serverリスナー用IPとして使用予定の 10.22.11.13
を入力して、次へ進みます。
SQL ServerエージェントとSQL Serverデータベースエンジンにパスワードを入力して、次へ進みます。
設定に問題がなければ、インストールボタンをクリックしてインストールを開始します。
インストールにしばらく時間がかかるので待ちます。
インストールが問題なく完了したら閉じます。
インストールが終わったあと、フェールオーバークラスターマネージャの「役割>リソース」をクリックして確認すると、
SQL Serverの役割で2つのEC2のSQL Serverリスナー用IP( 10.22.10.13
, 10.22.10.13
)がFCI(フェールオーバークラスターインスタンス)として設定されているのがわかります。
これでSQL Server FCIのインストールは完了です。
SQL Server FCIへ接続してみる
SQL Server FCIが構築できたので、SSMS(SQL Server Management Studio)を使ってSQL Serverへ接続してみます。
あらかじめBastionサーバーにSSMSをダウンロードしてインストールしておきます。
SSMSを起動すると接続ダイアログが表示されるので、Server nameに TEST-SQLSERVER(SQL Serverのネットワーク名) を入力します。 インストール時にexample.localドメインのAdminユーザーでログインできるように設定しておいたので、AuthenticationはWindows Authenticationをそのまま使います。
接続できたら、新しいデータベースを作ってみます。 「Database」を右クリックして、「New Database」をクリックします。
適当なデータベース名を入力して、OKします。今回は TESTDB という名前にしています。
次のSQLを実行して、 TESTS テーブルを作成します。
CREATE TABLE TESTS (
ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
NAME NVARCHAR(20) NOT NULL
);
INSERT文を実行して、TESTSテーブルにデータを追加します。
INSERT INTO TESTS (name)
values ('TEST');
次のSELECT文を実行して、TESTSテーブルに追加したデータを確認できます。
SELECT * FROM TESTS;
結果、SQL Serverは問題なく使用できていそうです。
SQL Server FCIをフェールオーバーさせてみる
最後に、実際にサーバーをダウンさせてSQL Serverがフェールオーバーするか動作確認してみます。
フェールオーバークラスターマネージャーを確認すると、現在SQL Serverは 10.22.10.13
(ap-northeast-1a)の方で動いていそうです。
ですので、ap-northeast-1aの方のSQL Server Node用EC2をシャットダウンしてみます。
その後、フェールオーバークラスターマネージャーを確認すると、10.22.10.13
(ap-northeast-1a)はオフラインになり、SQL Serverが 10.22.11.13
(ap-northeast-1c)の方に切り替わっていることがわかります。
再度SSMSでSQL Serverに接続してみて、さきほど作成したテーブルとデータが存在するか確認してみます。 SSMSを起動して、 TEST-SQLSERVER を入力して接続します。
同じ様にSELECT文を実行してみると、先程のTESTSテーブルに追加されたデータが確認でき、無事フェールオーバーできていることが確認できました。
終わりに
これでFSx for Windowsを利用したSQL Server FCIの構築ができました。
Windowsにあまり詳しくないので、Windowsでエラーが発生したときの原因調査に絶賛苦労中です。
このブログがどなたかの役に立てば幸いです。
参考
- Always On フェールオーバー クラスター インスタンス - SQL Server Always On | Microsoft Docs
- Windows Server 2019 MSFC 構築手順 - Qiita
- SQL Server AlwaysOn 構築メモ(その1) - Qiita
- 【Azure】MS SQL Serverでクラスタ構成を作る(1)SEブログ
- The cluster resource ‘SQL Server’ could not be brought online due to an error bringing the dependency resource ‘SQL Network Name’ online : Access is denied | Ashwani.Ashwin