Linux と macOS での高可用性とディザスター リカバリー
Linux および macOS 用 ODBC ドライバーでは、Always On 可用性グループがサポートされています。 Always On 可用性グループの詳細については、次を参照してください。
接続文字列で、特定の可用性グループの可用性グループ リスナーを指定できます。 Linux または macOS の ODBC アプリケーションが、フェールオーバーしている可用性グループ内のデータベースに接続している場合、元の接続は解除されます。 このアプリケーションでは、新しい接続を開いて、フェールオーバー後の作業を続行する必要があります。
Linux および macOS 上の ODBC ドライバーでは、可用性グループ リスナーに接続していない場合、DNS ホスト名に関連付けられているすべての IP アドレスが順次繰り返し処理されます。 DNS サーバーから最初に返された IP アドレスに接続できない場合、このような繰り返し処理には時間がかかる可能性があります。
可用性グループ リスナーに接続するとき、ドライバーではすべての IP アドレスに対して並列して接続の確立が試みられます。 接続試行が成功すると、ドライバーは保留状態の接続試行をすべて破棄します。
Note
可用性グループのフェールオーバーにより接続が失敗する可能性があるため、接続再試行のロジックを実装する必要があります。 失敗した接続が再接続されるまで再試行します。 接続タイムアウトを長くして、接続再試行のロジックを実装すると、可用性グループに接続できる可能性が高くなります。
MultiSubnetFailover を使用して接続する
SQL Server 2012 (11.x) 可用性グループ リスナーまたは SQL Server 2012 (11.x) フェールオーバー クラスター インスタンスに接続する場合は、MultiSubnetFailover=Yes
を必ず指定します。 MultiSubnetFailover
を使用すると、SQL Server 2012 (11.x) のすべての可用性グループとフェールオーバー クラスター インスタンスで高速にフェールオーバーできます。
また、この接続プロパティによって、単一およびマルチサブネットの AlwaysOn トポロジのフェールオーバー時間も大幅に短縮されます。 マルチサブネット フェールオーバーの場合、クライアントは複数の接続を並列で試行します。 サブネット フェールオーバーの場合、ドライバーは TCP 接続を積極的に再試行します。
MultiSubnetFailover
接続プロパティは、可用性グループまたはフェールオーバー クラスター インスタンスにアプリケーションが配置されていることを示します。 ドライバーでは、すべての IP アドレスに対する接続を試行することで、プライマリ SQL Server インスタンス上のデータベースへの接続が試みられます。
MultiSubnetFailover=Yes
を指定して接続した場合、オペレーティング システムの既定の TCP 再送信間隔より短い間隔で、クライアントによって TCP 接続が再試行されます。 MultiSubnetFailover=Yes
を指定すると、Always On 可用性グループまたは Always On フェールオーバー クラスター インスタンスのフェールオーバー後に、短時間で再接続できます。 MultiSubnetFailover=Yes
は、単一およびマルチサブネットの可用性グループとフェールオーバー クラスター インスタンスの両方に適用されます。
可用性グループ リスナーまたはフェールオーバー クラスター インスタンスに接続する場合は、MultiSubnetFailover=Yes
を指定します。 それ以外の場合、アプリケーションのパフォーマンスは低下する可能性があります。
推奨事項
可用性グループまたはフェールオーバー クラスター インスタンス内のサーバーに接続する場合:
単一サブネットまたは複数サブネットの可用性グループに接続するときのパフォーマンスを向上するには、
MultiSubnetFailover=Yes
を指定します。接続文字列でサーバーとして、可用性グループの可用性グループ リスナーを指定します。
IP アドレス数が 64 個を超える構成の SQL Server インスタンスには接続できません。
SQL Server 認証または Kerberos 認証のいずれも、アプリケーションの動作に影響を与えることなく
MultiSubnetFailover=Yes
と併用できます。loginTimeout
の値を増やすことで、フェールオーバー時間に対応し、アプリケーションの接続試行回数を減らすことができます。分散トランザクションはサポートされていません。
読み取り専用のルーティングが無効である場合、次の状況では可用性グループのセカンダリ レプリカの場所には接続できません。
セカンダリ レプリカの場所が、接続を許可するように構成されていない。
アプリケーションに
ApplicationIntent=ReadWrite
が使用されているが、セカンダリ レプリカの場所が読み取り専用アクセスとして構成されている。
プライマリ レプリカが読み取り専用ワークロードを拒否するように構成されているとき、接続文字列に ApplicationIntent=ReadOnly
が含まれていると、接続は失敗します。
アプリケーションの意図を指定する
接続文字列内にキーワード ApplicationIntent
を指定できます。 割り当て可能な値は ReadWrite
(既定値) または ReadOnly
です。
ApplicationIntent=ReadOnly
を設定すると、接続時にクライアントによって読み取りワークロードが要求されます。 サーバーでは、接続時と USE
データベース ステートメントの実行時にこの意図が適用されます。
ApplicationIntent
キーワードは、従来型の読み取り専用データベースに対しては動作しません。
ReadOnly のターゲット
接続で ReadOnly
が選択された場合、その接続は、データベースに存在する可能性のある次の特別な構成のいずれかに割り当てられます。
Always On。 データベースでは、対象の可用性グループ データベースのワークロードの読み取りを許可または禁止できます。 この選択は、
PRIMARY_ROLE
およびSECONDARY_ROLE
Transact-SQL ステートメントのALLOW_CONNECTIONS
句を使用して制御できます。
これらの特別なターゲットがいずれも使用できない場合は、通常のデータベースから読み取られます。
ApplicationIntent
キーワードを使用すると、"読み取り専用ルーティング" が有効になります。
読み取り専用ルーティング
読み取り専用ルーティングは、データベースの読み取り専用レプリカの可用性を実現する機能です。 読み取り専用ルーティングを有効にするには、次のすべてを適用します。
Always On 可用性グループ リスナーに接続する必要があります。
ApplicationIntent
接続文字列キーワードをReadOnly
に設定する必要があります。データベース管理者は、読み取り専用ルーティングを有効にするように可用性グループを構成する必要があります。
複数の接続でそれぞれに読み取り専用ルーティングが使用されている場合、すべてが同じ読み取り専用レプリカに接続されるとは限りません。 データベースの同期変更またはサーバーのルーティング構成の変更は、異なる読み取り専用のレプリカに対するクライアントの接続につながることがあります。
Server
接続文字列キーワードに可用性グループ リスナーを渡さ "ない" ことにより、すべての読み取り専用要求が同じ読み取り専用レプリカに接続されるようにすることができます。 代わりに、読み取り専用のインスタンスの名前を指定します。
読み取り専用ルーティングには、プライマリへの接続よりも時間がかかることがあります。 これは、読み取り専用ルーティングではまずプライマリに接続し、次に使用できる最善の読み取り可能なセカンダリを検索するためです。 このような複数のステップがあるため、login
タイムアウトを少なくとも 30 秒に増やす必要があります。
ODBC 構文
次の 2 つの ODBC 接続文字列キーワードで Always On 可用性グループがサポートされています。
ApplicationIntent
MultiSubnetFailover
ODBC 接続文字列キーワードの詳細については、「SQL Server Native Client での接続文字列キーワードの使用」を参照してください。
対応する接続属性は次のとおりです。
SQL_COPT_SS_APPLICATION_INTENT
SQL_COPT_SS_MULTISUBNET_FAILOVER
ODBC 接続プロパティの詳細については、「SQLSetConnectAttr」を参照してください。
Always On 可用性グループを使用する ODBC アプリケーションでは、次の 2 つの関数のいずれかを使用して接続できます。
関数 | 説明 |
---|---|
SQLConnect 関数 | SQLConnect では、データ ソース名 (DSN) または接続属性を介して、ApplicationIntent と MultiSubnetFailover の両方がサポートされます。 |
SQLDriverConnect 関数 | SQLDriverConnect では、DSN、接続文字列キーワード、または接続属性を介して、ApplicationIntent と MultiSubnetFailover がサポートされます。 |