SQL Server Always On AG の運用 (Windows と Linux)
SQL Serverレベル: 上級所要時間: 15–90 分 (シナリオによる)インストール手順ではありません。構築済み の Always On 可用性グループ (AG) の日常運用と障害シナリオです: ヘルスチェック、遅延とログ増大の診断、計画的フェールオーバー、強制フェールオーバー (FORCE_FAILOVER_ALLOW_DATA_LOSS) とその後の作業、データ移動の中断/再開、同期/非同期モード、データベースの追加 (自動シード処理またはバックアップ/リストア)、レプリカの追加/削除、読み取り専用ルーティング、リスナーの変更。Windows では WSFC、Linux では Pacemaker (pcs) のコマンドを使います。
実施する作業はシナリオカードから選択してください。エラー番号 (例: 9002、35264、41142) をカタログ検索に入力して、該当するシナリオを直接開くこともできます。AG がまだない場合: AG (Windows) または AG (Linux)。
構成: レプリカ 2–9 台の AG (Windows WSFC または Linux Pacemaker)
シナリオ
- AG ヘルスチェック (ダッシュボードのクエリ) — すべて正常かを確認します。レプリカ / データベースの状態、フェールオーバーの準備状況、クラスター、直近のロール変更。何も変更しません。
- セカンダリが遅れる / ログファイルが増大する (遅延の診断) — send/redo キューが増えている、セカンダリのデータが古い、プライマリのログがいっぱいになりかけている (log_reuse_wait = AVAILABILITY_REPLICA)、またはコミットが遅い (HADR_SYNC_COMMIT) 場合。
- 計画的フェールオーバー (switchover、データ損失なし) — メンテナンス、パッチ適用、テストのために、プライマリを同期コミットかつ SYNCHRONIZED のセカンダリに移します。数秒のダウンタイムがあり、データ損失はありません。
- プライマリ喪失: 強制フェールオーバー (FORCE_FAILOVER_ALLOW_DATA_LOSS) — プライマリ (またはサイト全体 / クラスターのクォーラム) が失われ、復旧を待てない場合です。データ損失を受け入れてセカンダリをプライマリにし、その後データを比較して他のレプリカを再開します。
- データ移動を中断 / 再開する (SUSPEND / RESUME) — セカンダリへのデータ送信を一時的に止める (ネットワークメンテナンス、一括処理)、または中断状態 (SUSPENDED) のまま止まっているデータベースを再開します。
- 同期 / 非同期モードを変更する — レプリカを SYNCHRONOUS_COMMIT ↔ ASYNCHRONOUS_COMMIT に切り替え (リモートサイト、低速ネットワーク、DR 訓練)、コミット保護 (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT) を設定します。
- AG にデータベースを追加する (自動シード処理またはバックアップ/リストア) — 新規または既存のデータベースを AG に追加します。小〜中規模のデータベースは自動シード処理、大規模なデータベースや低速ネットワークではバックアップから行います。
- レプリカ (ノード) を追加する — AG に新しいセカンダリを追加します。ノードをクラスターに参加させ、エンドポイントを準備し、ADD REPLICA + JOIN を行い、データベースはシード処理で取り込みます。
- レプリカ (ノード) を削除する — 恒久的に廃止する、または再構築するセカンダリを AG とクラスターから削除します。
- 読み取り専用ルーティング (read-only routing) — ApplicationIntent=ReadOnly の接続を、リスナー経由で読み取り可能セカンダリにルーティングします (レポート負荷をプライマリから外す)。
- リスナーを作成または変更する (IP、ポート) — リスナーがなければ作成し、ポートを変更し、または (Windows) 2 つ目のサブネット用に IP を追加します。
開始前の確認
- 各ノードに sqlcmd (/opt/mssql-tools18/bin/sqlcmd) があり、… が sysadmin であること。root 権限 (pcs)。パスワード: read -rsp 'パスワード: ' SQLCMDPASSWORD; export SQLCMDPASSWORD と sudo --preserve-env=SQLCMDPASSWORD bash <script>.sh。
- SQL Server の sysadmin かつ WSFC の管理者であるドメイン アカウントで、PowerShell を管理者として開いていること。sqlcmd と FailoverClusters モジュールが利用できること。
- フォームのレプリカ一覧の 1 行目が現在のプライマリ であること (ヘルスチェックの最初のクエリで確認してください)。ステップはこの順序に従って正しいノードに割り当てられます。
- 変更ウィンドウが承認され、アプリケーションチームに連絡済みであること…: リスナーは数秒間中断し、オープン トランザクションはロールバックされます……: ポート/IP の変更は接続文字列に影響します…。
- 強制フェールオーバーの判断が権限を持つ担当者によって下され、データ損失が受け入れられている こと: プライマリに到達できず、妥当な時間内に復旧しない状況です。プライマリが復旧できるなら、待つか計画的フェールオーバーを行うほうが常に適切です。
ガイドのフェーズ
- AG ヘルスチェック — AG ダッシュボード: レプリカ、データベース、フェールオーバーの準備状況 · クラスターの状態 (WSFC) · クラスターの状態 (Pacemaker) · 直近のロール変更 (AlwaysOn_health)
- 遅延とログ増大の診断 — 診断: キュー、速度、追いつくまでの推定時間 (プライマリ) · 診断: コミット待機 (プライマリ) · 診断: redo はブロックされているか (セカンダリ) · 対処の選択肢とログの確認
- 計画的フェールオーバー — 診断: ターゲットはフェールオーバー可能か (…) · セーフティネット: 長時間のトランザクションや実行中のジョブはないか (プライマリ) · フェールオーバー: … をプライマリにする (T-SQL) · フェールオーバー: … をプライマリにする (pcs) · 検証: 新しいプライマリとリスナー
- 強制フェールオーバー (データ損失の可能性あり) — 診断: ターゲットの状態と想定されるデータ損失 (…) · WSFC のクォーラムを強制起動する (…) · Pacemaker による AG リソースの管理を停止する (…) · 強制フェールオーバー: … をプライマリにする · 検証: 新しいプライマリがオープンし、他は SUSPENDED · 失われたデータを回収するため旧プライマリでスナップショットを作成する (…、復旧時) …
- データ移動を中断 / 再開する — 診断: 中断しているデータベースとその理由 · …データ移動を中断する (SUSPEND)…データ移動を再開する (RESUME)… · 検証と監視
- 可用性モードの変更 — 診断: 現在のモードとコミット保護 · … → … · コミット保護を設定する (Windows) · コミット保護を設定する (Pacemaker) · 検証する
- AG にデータベースを追加する — 診断: データベースは AG に追加できるか (プライマリ) · 準備: FULL 復旧モデルとバックアップ (プライマリ) · レプリカを手動シード処理にする (プライマリ) · データベースを AG に追加する (プライマリ) · シード処理を監視する (プライマリ) · セカンダリでバックアップから準備する (NORECOVERY): … …
- レプリカを追加 — 新しいノードを WSFC に追加する (プライマリ) · Always On を有効にする (新しいノード) · エンドポイントを作成して権限を付与する (新しいノード) · 新しいノードを準備する: HA エージェント、Always On、クラスター ソフトウェア · エンドポイント証明書を新しいノードにコピーする (プライマリ) · 証明書、エンドポイント、Pacemaker 用ログイン (新しいノード) …
- レプリカの削除 — 診断: 削除するレプリカと残る構成 · ノードを Pacemaker クラスターから削除する (プライマリ) · レプリカを AG から削除する (プライマリ) · ノードを WSFC から削除する (任意) · 削除したノード上の RESTORING データベースを片付ける (…)
- 読み取り専用ルーティング — 診断: 読み取り許可と現在のルーティング · ルーティング URL とリストを定義する (プライマリ) · 検証: ルーティング リスト · テスト: ReadOnly 接続はどこに送られるか · テスト: ReadOnly 接続はどこに送られるか
- リスナー — 診断: 現在のリスナー · 仮想 IP リソースと制約を作成する (Pacemaker) · …リスナーを作成する…リスナー ポートを変更する…リスナーに IP を追加する… (プライマリ) · ファイアウォールと DNS の設定 · ファイアウォールの設定 · 検証: リスナー経由の接続