none
Hochverfügbarkeit eines geclusterten DTC RRS feed

  • Frage

  • Guten Abend,

    meine Frage geht etwas über die Thematik Windows Clustering hinhaus.

    Folgende Konstellation: W2k8 (Enterprise mit 2 Knoten) Cluster und MSSQL2k8 (Activ-Passiv) Cluster (nur Standardinstanz) welches verteilte Transaktionen auf andere MSSQL2k8 ausführt. Der MSDTC auf dem Cluster läuft in einer eigenen Ressorcengruppe, da es momentan nicht auf Performance ankommt und ein Schwenk der SQL Servers bei Ausfall der MSDTC-Ressource nicht erwünscht ist.

    Fallbetrachtung:

    Führt man auf dem SQL Server Cluster via T-SQL eine DISTRIBUTED TRANSACTION (mit Set XACT_ABORT On) durch, die einige Minuten dauert und schwenkt den DTC gewollt auf einen anderen Knoten, wird die Transaktion abgebrochen, weil die DTC-Ressource kurzzeitig nicht verfügbar ist. Es erfolgt daher ein Rollback.

    Meine Frage: Bekommt man es "gebacken", das eine verteilte Transaktion das Umschalten der DTC-Ressource "überlebt" und nach der Umschaltdauer von ca. 5 Sekunden (Timeout) weiter läuft? Der DTC hat sein Logfile auf einem geshartem Datenträger im Cluster.

    Danke im Voraus für Beiträge

    Donnerstag, 22. März 2012 20:01

Alle Antworten

  • Guten Morgen (ok, es ist schon beinahe Mittag ... ) ;-)

    Ja die Transaktionen brechen hier an sobald der MSDTC gestopped wird. Aber man könnte in W2k8 je Resource Group einen MSDTC anlegen, der dann zur jeweiligen Instanz gehört. Damit würde man das Problem umgehen.

    Aus http://download.microsoft.com/download/6/9/D/69D1FEA7-5B42-437A-B3BA-A4AD13E34EF6/SQLServer2008FailoverCluster.docx

    MSDTC in Each SQL Server Resource Group

    • This option provides the best performance. It guarantees that your instance of MSDTC will always run on the same physical node as the SQL Server, which reduces communications overhead.
    • It is suitable for the widest array of requirements.
    • It does not require mappings . SQL Server 2008 automatically uses the local cluster group MSDTC resource by default. Note that if this local resource is offline or failed, distributed transactions will fail for this instance of SQL Server, and you will need to delete or move the MSDTC resource to make use of another instance of MSDTC on the cluster.
    • This configuration conserves drive letters for clusters that have a limited number of drive letters available. You can make use of mount points to keep disk I/O separate from other SQL Server files without using up a drive letter on the cluster.

    Note: When you use this configuration, you must determine the correct setting for the If restart is unsuccessful, fail over all resources in this service or application setting of the MSDTC resource. If the function of MSDTC is critical to your environment, you should either set MSDTC to If restart is unsuccessful, fail over all resources in this service or application or put MSDTC in its own resource group and create a mapping that directs SQL Server to that instance of MSDTC. In most cases, you will not want to set If restart is unsuccessful, fail over all resources in this service or application. The setting enables MSDTC to be restarted on the same node if it fails, but if it cannot be restarted, it will not cause a failover of the entire SQL Server resource group.


    Viele Grüße, Bernd Pfann [Microsoft] - This posting is provided "AS IS" with no warranties, and confers no rights.

    Freitag, 23. März 2012 09:26
    Moderator
  • Guten Morgen (ok, es ist schon beinahe Mittag ... ) ;-)

    Ja die Transaktionen brechen hier an sobald der MSDTC gestopped wird. Aber man könnte in W2k8 je Resource ..Group einen MSDTC anlegen, der dann zur jeweiligen Instanz gehört. Damit würde man das Problem umgehen.


    Viele Grüße, Bernd Pfann [Microsoft] - This posting is provided "AS IS" with no warranties, and confers no rights.

    Guten Tag und danke für die Info. Das verlinkte Whitepaper kenne ich, daher auch der Hinweis, dass es nicht auf Performance ankommt.

    Meine Überlegung war es, den MSDTC perspektivisch auf einen neuen dritten Knoten auszulagern.

    Ich verstehe aber nicht, wie ich das Problem des Abbrechens von Transaktionen via geclustertem DTC damit umschiffe, dass ich ihn in die entsprechende SQL Server Ressourcengruppe schaffe. Wenn ich so verfahre, schaltet dann nicht die komplette Ressourcengruppe um, wenn der DTC ausfällt? Dann switcht auch der SQL Server auf den anderen Knoten. Die Transaktion im DTC bricht docht trotzdem ab. Oder habe ich hier einen Denkfehler?

    Viele Grüße

    Dienstag, 27. März 2012 14:55
  • Hallo Thoma,

    deshalb ist auch empfohlen (im Whitepaper) MSDTC so zu konfigurieren, dass ein Ausfall
    des Dienstes nicht zum Failover führt:

    Note: When you use this
    configuration, you must determine the correct setting for the If restart is
    unsuccessful, fail over all resources in this service or application

    setting of the MSDTC resource. If the function of MSDTC is critical to your
    environment, you should either set MSDTC to If restart is unsuccessful, fail
    over all resources in this service or application
    or put MSDTC in its own
    resource group and create a mapping that directs SQL Server to that instance of
    MSDTC. In most cases, you will not want to set If restart is unsuccessful,
    fail over all resources in this service or application
    . The setting enables
    MSDTC to be restarted on the same node if it fails, but if it cannot be
    restarted, it will not cause a failover of the entire SQL Server resource
    group.



    Viele Grüße, Bernd Pfann [Microsoft] - This posting is provided "AS IS" with no warranties, and confers no rights.

    Donnerstag, 29. März 2012 09:02
    Moderator