SQL Server FCIをFSx for Windowsを使って構築する(Windows内部編)
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