現在Youtubeに注力してますので是非チャンネル登録お願いします!

胡田昌彦のコンピューター系チャンネル

WindowsクラスタとMSDTCについて

MSDTC
この記事は約6分で読めます。

今回はWindowsのクラスタ(MSFC(2008以降)、MSCS(2003より前))とMSDTCの関係について調べてみました。

MSDTCとは

MSDTCは複数サーバーにまたがった処理を行う際に、不整合が起きないように複数サーバーの調整役を行ってくれるものです。特にデータベースが複数存在するときに全体の処理がきちんと終わったことを確認してから実際にデータ更新を反映させるような際に使われます。以下@ITの記事がイメージがわきやすいと思います。

サーバー管理屋さん的には動作するアプリケーションでMSDTCを利用するのであればきちんとMSDTCを動作させておいてあげる…という感じになります。特にSQL Serverをクラスタ化するような際にはきちんと考慮が必要ですね。(もちろんMSDTCを使わない処理しか行わないのであれば必要ないです。)

 

Windows Server 2003(MSCS)

The MSDTC is a cluster-aware application. You can configure the MSDTC as a clustered resource on clustered nodes. Microsoft only supports running the MSDTC on cluster nodes as a clustered resource. Microsoft does not support the MSDTC in a stand-alone configuration on cluster nodes.

上記では「MSDTCはクラスタ化可能な(cluster-aware)アプリケーションであり、クラスタノード上で構成されたクラスタ化されていないMSDTCはサポートしない」と書かれています。

Microsoft only supports running MSDTC on cluster nodes as a clustered resource. Microsoft does not support or recommend running MSDTC in stand-alone mode on a cluster. Additionally, if you use MSDTC as a non-clustered resource on an MSCS cluster, transactions may be orphaned and your data may be corrupted if you experience cluster failover.

上記KBではもう少し踏み込んだ言及がなされていて、クラスタ化しておかないと、トランザクションが孤立しデータが破損する可能性が指摘されています。

ここまで見てきたところで以下の事がわかります。

  • MSCSを構成しているノード上でMSDTCが必要な場合にはMSDTCをクラスタ化して使用しなければならない

また、より詳細な情報が以下の技術文章で解説されています。

 

Windows Server 2008(MSFC)

では、Windows Server 2008(以降)ではどうなっているでしょうか。

You do not have to use the same transaction coordinator if the original instance becomes unavailable. This makes it possible for you to use the local DTC on each node in a cluster for applications that do not require that clustering to meet availability needs.

上記技術文章では、MSFCではActive-Active構成が可能となり、MSDTCのグループを複数作って各ノード上で実行する構成や、そもそもクラスタ化せずにローカルのMSDTCを利用することも可能であることが書かれています。2008になってずいぶんと条件が緩和されるようになったのですね。

 

Exchange ServerとMSDTC

ちょっと懐かしい話になるのですが、Exchange 2000、2003の時にはExchangeクラスタ内にMSDTCリソースを作成すべき!とかいらない!とか結構情報が錯乱していた時期がありました。そのあたりは以下のブログを見てもらうと良くわかると思います。

その後Exchange Server 2007以降では以下のように「必要ないよ」ということがきちんと技術情報に乗るようになりました。

重要 :

以前のバージョンの Exchange を実行するクラスタでは、Microsoft 分散トランザクション コーディネータ (MSDTC) のクラスタ化されたインスタンスが必要です。Exchange 2007 ではクラスタ化された MSDTC リソースは不要です。SCC のクラスタ化メールボックス サーバーは、フェールオーバー クラスタにインストールされている MSDTC リソースを使用しません。サード パーティのアプリケーションは、COM+ との依存関係のため、MSDTC リソースを必要とする場合があります。Windows Server 2003 では、MSDTC クラスタ リソースはクラスタ内の共有記憶域を使用する必要があります。サード パーティのアプリケーションでクラスタ化 MSDTC リソースが必要な場合は、クラスタ化メールボックス サーバーが含まれているグループとは別のクラスタ グループにリソースをインストールする必要があります。Windows Server 2008 は、Windows Server 2008 フェールオーバー クラスタにおける共有記憶域の要件を解消する、ローカルの非クラスタ化 MSDTC インスタンスを提供します。Windows Server 2008 での MSDTC の変更の詳細については、Windows Server 2008 のヘルプを参照してください。

MSDTCは色々なアプリケーション(の一部)で使われていることがあるので、どのようなもので、どのように構成できるのか、ということは押さえておくと良いように思います。

コメント

タイトルとURLをコピーしました