こんにちは!haruです。
前回まで AD サーバーと WSFC のセットアップを行ってきました。
準備が整ったため、Always On の構築を行っていきます。
SQLServer のインストール
SQLServer のインストールは以下の記事を参考にしていただければ幸いです。
Always On可溶性グループを有効にする ※NODE1,NODE2の両方で実施
2.SQLServer を右クリックして「プロパティ」をクリック
3.「Always On 可溶性グループ」タブをクリックして、「Always On 可溶性グループを有効にする」のチェックボックスにチェックマークを入れる
4.サービスを起動し、SQLServer サービスを再起動します。
SQL Server 実行ユーザーの作成と設定
ユーザー作成 ※AD側で実行
1.「Active Directory ユーザーとコンピューターを起動」
2.「USERS」を右クリックし「新規作成」→「ユーザー」をクリック
4.任意のパスワードを入力し、「ユーザーは次回~」のチェックボックスを外して次へ
※今回はめんどくさいのでチェックボックスを外しています。
NODE1とNODE2のSQLServer 実行ユーザーを変更 ※NODE1とNODE2で実行します。
2.SQLServer を右クリックし、プロパティをクリック
3.「アカウント名」と「パスワード」を入力して適用をクリック
※アカウント名の入力前に、参照ボタンを押しADサーバーのUsersディレクトリを選択します。
※適用することでサービスが再起動します。
TCP/IPを有効にする
詳細は以下のQiitaをご参照ください。
-
行き当たりばったり学習 ~SSMSインストール・セットアップ編(Windows)~
→TCP/IP を有効にする
ファイアウォールの無効化
1. ファイアーウォールのドメインネットワーク設定を無効化する
本来はこのような暴挙はしませんが、今回は一括で停止します。
共有フォルダの作成 ※NODE1とNODE2で実行します。
1.エクスプローラを開き。Cドライブ配下にディレクトリを作成する
2.作成したディレクトリの「プロパティ」→「セキュリティ」タブを開き、作成したユーザーを追加する
バックアップ用ディレクトリ ※ADサーバーで実行します。
1.バックアップ用のディレクトリを作成し、権限を付与します。
データの作成 ※NODE1でのみ実行
DBバックアップ ※NODE1でのみ実行
1.作成したDBを右クリックし、「タスク」→「バックアップ」をクリックします
2.すでに作成してあるバックアップ用のディレクトリを指定します
可用性グループ作成 ※NODE1でのみ実行します。
1.「Always On 可用性グループ」→「可用性グループ」を右クリックして、「新しい可溶性グループウィザード」をクリック
5.「レプリカの追加」でNODE2を指定して次へ
※今回は自動フェールオーバーのチェックボックスにはチェックを入れています。
6.「完全なデータベースとログバックアップ」を選択し、NODE1及びNODE2から接続可能なディレクトリを指定し次へ
このディレクトリはADサーバーに作成し、共有ディレクトリの設定をしています。
リスナーの作成
1.作成した可用性グループを右クリックし、「リスナーの追加」をクリック
2.各項目を入力して、OKをクリック
IPアドレスはこれまでの構成に使用していないものを使用します。
データ連携確認
NODE1で入れたデータをNODE2で確認
ちゃんとデータが連携されていますね!
包含データベースを有効にしてフェイルオーバー時の動作を確認する
1.サーバーの「プロパティ」の「詳細設定」欄で「包含データベースの有効化」を「True」に変更※NODE1とNODE2で実行します。
2.可用性グループに指定したDBを右クリックし、「プロパティ」の「オプション」欄で「包含の種類」を「部分」に設定する※NODE1で実行します。
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 行処理されました)
また、プライマリ側をOSレベルでシャットダウンしても、テーブルを参照することが可能です。
1> select * from dbo.Table_1
2> go
id name
----------- --------------------------------------------------
1 tanaka
2 tanabe
無事フェイルオーバーしたことが確認できました。
以上です!