【SQL Server on EC2】インスタンス間でAlwaysOnを構成する [3.AlwaysOn設定編] – そして伝説へ –

AWS運用自動化サービス「Cloud Automator」

こんにちは。技術4課の伊藤Kです。
タイトルの末尾は「3」から連想したフレーズなので深い意味はありません。

今回は「2台のEC2インスタンス間でSQL Server AlwaysOnを構成する」の第3回、「AlwaysOn設定編」です。
いよいよ最終回、AlwaysOnの設定です。
前回から間があいてしまい、全国のSQL Server on EC2ファンには申し訳なく思います。

<全3回リンク>
1. OS準備編
2. WSFC設定編
3. AlwaysOn設定編 (この記事)

作業前の状態、前提

「2. WSFC設定編」の手順を完了した状態を前提とします。
作業は「AWS Delegated Administrators」グループに所属させたユーザーアカウントで実施します。

バージョンエディション、IPアドレス等の情報を再掲します。

OS Windows Server 2012 R2 Standard Edition
SQL Server SQL Server 2014 Enterprise Edition SP2 (12.0.5000.0)
内容 コンピューター名 /
リソース名 /
リスナー名
IPアドレス
AlwaysOn インスタンス #1
(文中「1号機」と記します)
sql01 172.20.10.4
AlwaysOn インスタンス #2
(文中「2号機」と記します)
sql02 172.20.11.4
クラスターコアリソース t-cluster 172.20.10.5 / 172.20.11.5
AlwaysOn リスナー t-aonlis01 172.20.10.6 / 172.20.11.6

サービスの設定変更

1号機でWindowsのスタートメニューより「SQL Server 2014 Configuration Manager」を開きます。

「SQL Server サービス」を開き、「SQL Server インスタンス名」のアイコンを右クリックし、「プロパティ」を選択します。

「ログオン」タブでサービスを起動するユーザーアカウント(以下「サービスユーザーアカウント」と記します)をドメインアカウントに変更します。(このアカウントは1号機、2号機で共通のものを使用します。)ここでは、現在ログオンしている「AWS Delegated Administrators」グループのユーザーアカウントを使用します。

「AlwaysOn High Availability」タブで「Enable AlwaysOn Availability Groups」にチェックを入れます。[OK]ボタンをクリックしてプロパティを閉じます。

確認のダイアログが表示されるので[OK]ボタンをクリックします。

確認のダイアログに従い、「SQL Server インスタンス名」のアイコンを右クリックして「再起動」(Restart)を選択することでサービスを再起動させます。

2号機でもWindowsのスタートメニューより「SQL Server 2014 Configuration Manager」を開き、同一の手順を実施します。

フォルダ準備

各サーバー(インスタンス)にデータベースファイルを格納するフォルダを作成します。1号機、2号機とも同じパスである必要があります。
ここでは「C:\SQL_DATA」とします。

作成したフォルダに対してサービスユーザーアカウントが「変更」の権限を持つ必要があります。ここでは「AWS Delegated Administrators」グループのユーザーを使っており、デフォルトで要件以上の権限があるので特に設定は行いません。

2号機でも「C:\SQL_DATA」を作成します。

さらに、1号機、2号機間で初回同期を実施するための一時的な共有フォルダを作成します。これは1号機、2号機からアクセスできる場所に1つあればOKです。
ここでは、1号機に「wkshare」というフォルダを作成し、以下の権限で共有設定をします。

共有名 wkshare
共有許可設定 Everyone – フルコントロール
NTFS権限設定 (デフォルトのまま)


 

 

 

ログイン追加

1号機で、一度OSをサインアウトした後に、ローカル管理者(Administrator)でログインしなおします。

スタートメニューからSQL Server Management Studioを起動します。

Windows認証で1号機へ接続します。

1号機の「セキュリティ」→「ログイン」を右クリックして、「新しいログイン」メニューを選択します。

[検索]ボタンをクリックします。

[場所]ボタンをクリックすると資格情報を求められるので、ドメインユーザーのアカウントとパスワードを入力します。ここではサービスユーザーアカウントを使用します。

 

ドメイン名を選択して[OK]ボタンをクリックします。

サービスユーザーアカウント名を入力して[名前の確認]をクリックすると下線が付帯されます。[OK]をクリックします。

サービスユーザーアカウントが「ログイン名」に追加されます。

「サーバーロール」タブをクリックして「sysadmin」にチェックを入れて[OK]をクリックします。

「ログイン」一覧にサービスユーザーアカウントが追加されます。

現在ローカルのAdministratorでログオンしているので、一度OSをサインアウトした後に、サービスユーザーアカウントでログオンします。

2号機も同じ手順でログインを追加します。

追加後は、同じく一度OSをサインアウトした後に、サービスユーザーアカウントでログオンします。

可用性グループの作成、データベース登録

1号機でOSのスタートメニューからSQL Server Management Studioを起動します。

Windows認証で1号機へ接続します。

オブジェクトエクスプローラーの「接続」→「データベースエンジン」メニューから2号機へも接続します。

対象となるデータベースを一度「完全復旧モデル」の設定でバックアップする必要があります。
1号機のツリーから対象のデータベースを右クリックし、「プロパティ」を選択します。ここではテスト用に作成した「test_db」を対象とします。

「オプション」ページをクリックして、復旧モデルを「完全」に変更します。[OK]をクリックします。

再度対象のデータベースを右クリックし、[タスク] – [バックアップ] を選択します。

バックアップ先のパスは任意で構いません。ここではデフォルトで進めます。[OK]をクリックします。

バックアップが完了しました。

「AlwaysOn 高可用性」を展開して「可用性グループ」を右クリックします。[新しい可用性グループ ウィザード] を選択します。

[次へ]をクリックして進めます。

任意のグループ名を入力して[次へ]をクリックします。ここでは予定のリスナー名と同一にします。

先ほどバックアップを取った対象のデータベース名であることを確認し、チェックを入れて[次へ]をクリックします。

「レプリカ」タブで[レプリカの追加] をクリックして、2号機のホスト名を指定してWindows認証で接続することで、2号機が一覧に追加されます。

「自動フェールオーバー」「可用性モード」等の項目は要件に沿って設定します。ここでは下図の通りとします。他のタブもデフォルトのまま[次へ]をクリックします。

[完全なデータベースとログバックアップ] を選択し、先ほど初回同期用に作成した共有フォルダの共有パスを入力します。エクスプローラーでパスを入力してフォルダを開けることを確認し、そのパスをコピー貼り付けすると、ミスを防げます。[次へ]をクリックします。

要件の検証が行われます。「警告」が発生していますが、リンクをクリックして内容を確認し、「可用性グループリスナーをまだ作成していない」内容であれば後の手順で作成するので問題ないため、そのまま[次へ]をクリックします。

 

サマリーが表示されるので、一通り確認して[完了]ボタンをクリックします。

ウィザードが実行され、可用性グループが作成されます。

「可用性グループ」のツリーを展開すると、「可用性レプリカ」や「可用性データベース」が追加されています。

可用性グループリスナーの構成

いよいよ、可用性グループリスナーの追加です。「可用性グループリスナー」を右クリックして「リスナーの追加」を選択します。

「リスナーのDNS名」に予定のリスナー名を入力し、ポートは標準の1433を使用します。「ネットワークモード」の項目は「静的 IP」を選択します。IPアドレスを追加するために[追加]ボタンをクリックします。

1号機の属するサブネットを選択し、対応するIPアドレス(リスナーに割り振る予定のIPアドレス)を入力して[OK]をクリックします。

一覧にIPアドレスが追加されるので、再度[追加]をクリックして同じ手順で2号機の属するサブネット、IPアドレスを追加します。

[OK]をクリックするとリスナーが追加されます。

 

接続確認

1号機、2号機以外(DBの接続元サーバー等)から接続確認ができればベストですが、今回はその環境を用意していないため、各サーバーを1台ずつセカンダリの状態とし、それぞれセカンダリから接続確認を実施します。
まずは1号機がプライマリの状態で接続確認を行います。ここではsqlcmdを用いて接続確認を行います。

現在のセカンダリである、2号機からコマンドを使って確認します。データベースに接続され、テーブル名一覧が表示されました。

レコードの追加もできます。

次に手動フェールオーバー(※)を行い、2号機がプライマリ、1号機がセカンダリの状態で同じ手順で接続確認を行います。

※ 手動フェールオーバーの手順について、スクリーンショットを紛失した上、検証環境を削除してしまったので案内ができません。申し訳ありません・・・
確か、下図の可用性グループ名のアイコンを右クリックして「フェールオーバー」を選択して、ウィザードに沿って操作すればできたと思います。

以上で、接続確認が完了しました。

おわりに

長かった構築手順が終わり、AlwaysOn伝説が始まります。お疲れさまでした。

AWS運用自動化サービス「Cloud Automator」