SQLServer冗長化～AlwaysOnの構築編～

こんにちは！haruです。

前回まで [AD サーバー](https://qiita.com/haru4989/items/ccaf80a52eedae388b47)と [WSFC](https://qiita.com/haru4989/items/cebda288a073b9b42c73) のセットアップを行ってきました。
準備が整ったため、Always On の構築を行っていきます。

## SQLServer のインストール
SQLServer のインストールは以下の記事を参考にしていただければ幸いです。

- [行き当たりばったり学習 ～SQLServer構築編(Windows)～](https://qiita.com/haru4989/items/272f7d538933000b26db)
- [行き当たりばったり学習 ～SSMSインストール・セットアップ編(Windows)～](https://qiita.com/haru4989/items/f07dfa41a721c07fa821)

## Always On可溶性グループを有効にする ※NODE1,NODE2の両方で実施
**1.SQL Server 構成マネージャーを起動**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/7073cc48-2ab9-7b43-9abd-5531e926d74f.png)

**2.SQLServer を右クリックして「プロパティ」をクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/6d2a506c-3887-2878-97b4-6c7b5c5db99c.png)

**3.「Always On 可溶性グループ」タブをクリックして、「Always On 可溶性グループを有効にする」のチェックボックスにチェックマークを入れる**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9b2c297b-b75a-061e-e175-c3b42a7d9f1e.png)

**4.サービスを起動し、SQLServer サービスを再起動します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/7c4a099a-beb0-117b-ebf9-64daaa7cdab4.png)

## SQL Server 実行ユーザーの作成と設定
### ユーザー作成 ※AD側で実行
**1.「Active Directory ユーザーとコンピューターを起動」**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/c0a34245-329a-7b6f-6b52-76dfad4a5a39.png)

**2.「USERS」を右クリックし「新規作成」→「ユーザー」をクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9a80720e-5f4a-ef8e-9aef-e99db5effbaa.png)

**3.任意の名称を入力し次へ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/bb8b4392-cc58-5538-cf59-b9cb2b475032.png)

**4.任意のパスワードを入力し、「ユーザーは次回～」のチェックボックスを外して次へ**
※今回はめんどくさいのでチェックボックスを外しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/b14950d9-8f2d-cbb8-0b45-1951edeb3cbc.png)

**5.完了をクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/bf627efd-00df-1c6c-0202-bb2051ddb9f1.png)

### NODE1とNODE2のSQLServer 実行ユーザーを変更 ※NODE1とNODE2で実行します。
**1.SQL Server 構成マネージャーを起動**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/194fef56-081c-403e-62fa-ec7247c1397e.png)

**2.SQLServer を右クリックし、プロパティをクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/288fd620-5fbf-b826-4796-6015b0b77d34.png)

**3.「アカウント名」と「パスワード」を入力して適用をクリック**
※アカウント名の入力前に、参照ボタンを押しADサーバーのUsersディレクトリを選択します。
※適用することでサービスが再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/d774e1c2-b830-1460-0733-58ecc5ea1cf1.png)

## TCP/IPを有効にする
詳細は以下のQiitaをご参照ください。
- [行き当たりばったり学習 ～SSMSインストール・セットアップ編(Windows)～](https://qiita.com/haru4989/items/f07dfa41a721c07fa821)
→TCP/IP を有効にする

## ファイアウォールの無効化
**1. ファイアーウォールのドメインネットワーク設定を無効化する**
本来はこのような暴挙はしませんが、今回は一括で停止します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/4abf2f0e-70b7-b461-c85d-fa9a0f9cbcc7.png)

## 共有フォルダの作成 ※NODE1とNODE2で実行します。
**1.エクスプローラを開き。Cドライブ配下にディレクトリを作成する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/2ca02b2b-2fa2-afa6-3402-2aa6c4f88ce8.png)

**2.作成したディレクトリの「プロパティ」→「セキュリティ」タブを開き、作成したユーザーを追加する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/64db45a7-0fed-aa97-951f-da39663c5773.png)

**3.追加したユーザーに権限を付与する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/16ef3dcf-95dc-c962-12f0-17043d194782.png)

## バックアップ用ディレクトリ ※ADサーバーで実行します。
**1.バックアップ用のディレクトリを作成し、権限を付与します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/0b4d3658-7348-0173-df66-be4610679dc8.png)

## データの作成 ※NODE1でのみ実行
**1.DBを作成します**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/31d9c714-c2d5-97a6-43f3-9d8bd7af1b8e.png)

**2.テーブルにデータを挿入します**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/02ab2c7c-7054-0450-c2a4-0e9b3fd31d1e.png)

## DBバックアップ ※NODE1でのみ実行
**1.作成したDBを右クリックし、「タスク」→「バックアップ」をクリックします**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/c84074dc-f61c-f1ac-01dc-b5bd6b48d24b.png)

**2.すでに作成してあるバックアップ用のディレクトリを指定します**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/c572a6e3-f912-a817-67f1-27e4b37fbb2e.png)

**3.OKをクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/d1204d4a-c03d-1976-9e12-efec576bc983.png)

## 可用性グループ作成 ※NODE1でのみ実行します。
**1.「Always On 可用性グループ」→「可用性グループ」を右クリックして、「新しい可溶性グループウィザード」をクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/d1e246dd-8d23-9c4c-84a4-9ce46b0ab4ae.png)

**2.次へ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9fc8e943-7329-5bac-06e2-bd822c37ceb9.png)

**3.「可用性グループ名」を入力して次へ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9b31f6d6-7bdf-6b4a-bdba-8a31d3f51fcd.png)

**4.チェックボックスにチェックを入れて次へ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/e12a1b50-b6d9-3653-4faa-32bd82171d12.png)

**5.「レプリカの追加」でNODE2を指定して次へ**
※今回は自動フェールオーバーのチェックボックスにはチェックを入れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9f8fca05-6bae-37b5-5c34-c4279ea339a0.png)

**6.「完全なデータベースとログバックアップ」を選択し、NODE1及びNODE2から接続可能なディレクトリを指定し次へ**
このディレクトリはADサーバーに作成し、共有ディレクトリの設定をしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/be870e86-0a1f-c84d-145d-2f48f62fd9af.png)

**7.次へ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/2f12c6d0-9c24-6e2f-c35e-d09837e55638.png)

**8.完了**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/a7fb020c-5578-f9df-a4c7-b5058644f6ac.png)
完了しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/f9b7d14c-c406-fe38-391a-2f9fa9d19e8b.png)

## リスナーの作成
**1.作成した可用性グループを右クリックし、「リスナーの追加」をクリック**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/9eba60c8-6025-bfa3-f150-2581a8a77d1f.png)

**2.各項目を入力して、OKをクリック**
IPアドレスはこれまでの構成に使用していないものを使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/0eef92c0-6100-518a-331f-200a70ba25ac.png)

## データ連携確認
**NODE1で入れたデータをNODE2で確認**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/0db19893-569b-34f9-c174-4f9d2f53bc12.png)
ちゃんとデータが連携されていますね！

## 包含データベースを有効にしてフェイルオーバー時の動作を確認する
**1.サーバーの「プロパティ」の「詳細設定」欄で「包含データベースの有効化」を「True」に変更※NODE1とNODE2で実行します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/f1146b3f-668e-0511-0f76-9ed976e8cffa.png)

**2.可用性グループに指定したDBを右クリックし、「プロパティ」の「オプション」欄で「包含の種類」を「部分」に設定する※NODE1で実行します。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/d3c98c70-54a1-8db9-07e6-6b76c27e24d6.png)

**3.「セキュリティ」を右クリックし、新規ユーザーを作成する**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/2ef743f1-04bc-054a-e43c-82d19901a001.png)

**4.SQLServer がインストールされている別サーバーで「Windows PowerShell」を起動し、クライアント接続を行う**
接続先のIPアドレスはリスナーのIPアドレスを指定します。
```
PS *****> sqlcmd -S ***.**.**.*** -U usertest1 -d DB1 -P **********
1> use DB1
2> go
データベース コンテキストが 'DB1' に変更されました。
1> select * from dbo.Table_1
2> go
id          name
----------- --------------------------------------------------
          1 tanaka
          2 tanabe

(2 行処理されました)
```
**5.プライマリ側をOSレベルでシャットダウン**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/331dcbc5-5b74-3514-79a0-6654d81f2936.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/1c954dea-59f8-0693-4eb4-b5f783000fea.png)

**6.NODE1側がプライマリになっていることを確認**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2920045/437ab5b4-1ac0-d4c9-286b-5a6abaa42978.png)

また、プライマリ側をOSレベルでシャットダウンしても、テーブルを参照することが可能です。
```
1> select * from dbo.Table_1
2> go
id          name
----------- --------------------------------------------------
          1 tanaka
          2 tanabe
```

無事フェイルオーバーしたことが確認できました。

以上です！