7. 想定環境
AlwaysOn 可用性グループ
拠点 A (主拠点) 拠点 B (DR 拠点)
(172.16.x.x/16) (192.168.110.x/24)
同期コミット
非同期コミット
FCI
7 db tech showcase 2012 2012/10/19
8. 可用性グループの設定
今回の環境は、以下のエディションで構築 (OS は WSFC が使用可能なエディションが必要)
Windows Server 2012 Datacenter Edition
SQL Server 2012 Enterprise Edition
- Windows Server 2012 は Standard Edition でも可
8 db tech showcase 2012 2012/10/19
17. 可用性グループの接続の基本
AlwaysOn 可用性グループ
リスナーに対して通常の方法で接続
拠点 A
または
ApplicationIntent=ReadWrite FCI
アプリケーション リスナー
可用性グループの
プライマリ レプリカに接続
拠点 B
17 db tech showcase 2012 2012/10/19
18. リスナーの設定内容 (WSFC)
WSFC の停止が可用性
グループにも影響を与える
可用性グループリスナーは拠点間ごとの
IP アドレスを持つマルチサブネット環境
SQL Server Availability Group
のクラスターリソース
(このリソースが可用性 DB をオンラインにする)
18 db tech showcase 2012 2012/10/19
19. マルチサブネット環境の DNS のレコード
マルチサブネット環境ではリスナーの A レコードが 2 種類登録されるため
アプリケーションからどちらの IP アドレスにアクセスされるかわからない
(拠点 A 用 / 拠点 B 用)
19 db tech showcase 2012 2012/10/19
20. そのまま接続しようとすると
リスナー
アプリケーション (172.16.100.100) AlwaysOn 可用性グループ
②
③ 拠点 A
(172.16.x.x/16)
192.168.110.110
172.16.100.100
どちらか に接続
① 接続要求の 50% が
タイムアウトする可能性がある
拠点 B
(191.168.110.x/24)
リスナーの IP アドレス
192.168.110.110 プライマリレプリカ
172.16.100.100
DNS セカンダリレプリカ
20 db tech showcase 2012 2012/10/19
21. 2 種類の解決方法
高速フェールオーバーを可能にするための接続文字列を使用
1 [MultiSubnetFailover=true]
- .NET Framework 4.02 以降
- SQL Server Native Client 11.0
- Microsoft SQL Server JDBC Driver 4.0 以降
クラスターリソースの設定を変更しオンラインのアドレスのみを登録
2 [RegisterAllProvidersIP 0]
[HostRecordTTL 60]
- 高速フェールオーバー用の接続文字列を使用できない場合に使用
21 db tech showcase 2012 2012/10/19
22. MultiSubnetFailover
リスナー
アプリケーション (172.16.100.100) AlwaysOn 可用性グループ
②
③ 拠点 A
(172.16.x.x/16)
192.168.110.110
172.16.100.100
両方 に接続
① 両方の IP アドレスに接続を
試行し応答があったほうに接続
拠点 B
(191.168.110.x/24)
リスナーの IP アドレス
192.168.110.110 プライマリレプリカ
172.16.100.100
DNS セカンダリレプリカ
22 db tech showcase 2012 2012/10/19
23. RegisterAllProvidersIP
リスナー
アプリケーション (172.16.100.100) AlwaysOn 可用性グループ
②
③ 拠点 A
(172.16.x.x/16)
172.16.100.100 に接続
① DNS にはオンラインの
IP アドレスのみが登録される
拠点 B
(191.168.110.x/24)
リスナーの IP アドレス プライマリレプリカ
172.16.100.100
DNS セカンダリレプリカ
23 db tech showcase 2012 2012/10/19
46. プライマリレプリカの場合処理を実行
USE <データベース名>
SET NOCOUNT ON
GO
DECLARE @primary_server_name sysname
SET @primary_server_name = (
SELECT
primary_replica
FROM
sys.dm_hadr_availability_group_states
LEFT JOIN
sys.availability_groups
ON
sys.availability_groups.group_id = sys.dm_hadr_availability_group_states.group_id
WHERE
sys.availability_groups.name = ‘<可用性グループ名>')
IF (@primary_server_name = @@SERVERNAME)
BEGIN
PRINT 'Index Maintenance Start'
ALTER INDEX <インデックス名> ON <テーブル名> REBUILD
PRINT 'Index Maintenance End'
END
46 db tech showcase 2012 2012/10/19