Freigeben über


Konfigurieren von Microsoft Distributed Transaction Coordinator (MS DTC) unter Linux

Gilt für:SQL Server unter Linux

In diesem Artikel wird beschrieben, wie Microsoft Distributed Transaction Coordinator (MS DTC) unter Linux konfiguriert wird.

MSDTC auf Linux wird von SQL Server 2017 (14.x) Cumulative Update 16 und späteren Versionen unterstützt.

Übersicht

Sie aktivieren verteilte Transaktionen auf SQL Server unter Linux, indem Sie MSDTC- und RPC-Endpunktzuordnungsfunktionen in SQL Server einführen. Standardmäßig lauscht ein RPC-Endpunktzuordnungsprozess an Port 135 für eingehende RPC-Anforderungen und bietet Informationen zu registrierten Komponenten für Remoteanforderungen. Remoteanforderungen können die von der Endpunktzuordnung zurückgegebenen Informationen zum Kommunizieren mit registrierten RPC-Komponenten wie MS DTC-Diensten verwenden.

Ein Prozess erfordert unter Linux Superuser-Berechtigungen für die Bindung an bekannte Ports (Portnummern unter 1024). Um zu vermeiden, dass SQL Server mit Root-Rechten für den RPC-Endpunktzuordnungsprozess gestartet wird, müssen Systemadministratoren iptables verwenden, um eine Netzwerkadressübersetzung zu erstellen, um den Datenverkehr auf Port 135 an den RPC-Endpunktzuordnungsprozess der SQL Server-Instanz weiterzuleiten.

MSDTC verwendet zwei Konfigurationsparameter für das Dienstprogramm mssql-conf:

mssql-conf-Einstellung Beschreibung
network.rpcport Der TCP-Port, an den der RPC-Endpunktzuordnungsprozess gebunden wird.
distributedtransaction.servertcpport Der Port, an dem der MS DTC-Server lauscht. Wenn diese Option nicht festgelegt ist, verwendet der MSDTC-Dienst bei Neustarts des Dienstes einen zufälligen ephemeren Port und die Firewall-Ausnahmen müssen neu konfiguriert werden, um sicherzustellen, dass der MSDTC-Dienst die Kommunikation fortsetzen kann.

Weitere Informationen zu diesen Einstellungen und weiteren MS DTC-Einstellungen finden Sie unter Konfigurieren von SQL Server für Linux mit dem mssql-conf-Tool.

Unterstützte Transaktionsstandards

Die folgenden MS DTC-Konfigurationen werden unterstützt:

Transaktionsstandard Datenquellen ODBC-Treiber JDBC-Treiber
OLE-TX-Transaktionen SQL Server für Linux Ja Nein
Verteilte XA-Transaktionen SQL Server sowie andere ODBC- und JDBC-Datenquellen mit Unterstützung für XA Ja (erfordert 17.3 oder höhere Versionen) Ja
Verteilte Transaktionen auf Verbindungsserver SQL Server Ja Nein

Weitere Informationen finden Sie unter Grundlegendes zu XA-Transaktionen.

MS DTC-Konfigurationsschritte

Führen Sie die folgenden drei Schritte aus, um die MSDTC-Kommunikation und -Funktionalität für SQL Server zu konfigurieren.

  • Konfigurieren network.rpcport und distributedtransaction.servertcpport mit mssql-conf.
  • Konfigurieren Sie die Firewall so, dass die Kommunikation über distributedtransaction.servertcpport und Port 135 zugelassen wird.
  • Konfigurieren Sie das Linux-Serverrouting so, dass die RPC-Kommunikation an Port 135 an die SQL Server-Instanz network.rpcportumgeleitet wird.

Die folgenden Abschnitte enthalten detaillierte Anweisungen für die einzelnen Schritte.

Konfigurieren von RPC- und MS DTC-Ports

Konfigurieren network.rpcport und distributedtransaction.servertcpport mit mssql-conf. Dieser Schritt ist spezifisch für SQL Server und gilt für alle unterstützten Verteilungen.

  1. Verwenden Sie mssql-conf, um den network.rpcport-Wert festzulegen. Im folgenden Beispiel wird dieser auf „13500“ festgelegt.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. Legen Sie den distributedtransaction.servertcpport-Wert fest. Im folgenden Beispiel wird dieser auf 51999 festgelegt.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. Starten Sie SQL Server neu.

    sudo systemctl restart mssql-server
    

Konfigurieren der Firewall

Konfigurieren Sie die Firewall so, dass die Kommunikation über servertcpport und Port 135 zugelassen wird. In diesem Schritt kann der RPC-Endpunktzuordnungsprozess und der MSDTC-Prozess extern mit anderen Transaktionsmanagern und Koordinatoren kommunizieren. Das tatsächliche Verfahren variiert je nach Linux-Verteilung und Firewall.

Im folgenden Beispiel wird das Erstellen dieser Regeln unter Ubuntu gezeigt.

sudo ufw allow from any to any port 51999 proto tcp
sudo ufw allow from any to any port 135 proto tcp
sudo ufw allow from any to any port 13500 proto tcp

Es ist wichtig, die Firewall zu konfigurieren, bevor Sie im nächsten Abschnitt das Port-Routing konfigurieren. Das Aktualisieren der Firewall kann in manchen Fällen die Portroutingregeln löschen.

Konfigurieren des Portroutings

Konfigurieren Sie die Linux-Serverroutingtabelle so, dass die RPC-Kommunikation an Port 135 an die SQL Server-Instanz network.rpcportumgeleitet wird. Der Konfigurationsmechanismus für die Portweiterleitung kann sich bei verschiedenen Verteilungen unterscheiden. Die folgenden Abschnitte enthalten Anleitungen für Ubuntu, SUSE Enterprise Linux (SLES) und Red Hat Enterprise Linux (RHEL).

Ubuntu und SLES verwenden den Firewalld-Dienst nicht, daher sind iptables-Regeln ein effizienter Mechanismus zum Erreichen des Portroutings. Die IPTables-Regeln werden möglicherweise während eines Neustarts nicht beibehalten, sodass die folgenden Befehle auch Anweisungen zum Wiederherstellen der Regeln nach einem Neustart bereitstellen.

  1. Erstellen Sie Routingregeln für Port 135. Im folgenden Beispiel wird Port 135 an den RPC-Port 13500 weitergeleitet, der im vorherigen Abschnitt definiert wurde. Ersetzen Sie <ipaddress> durch die IP-Adresse Ihres Servers.

    sudo iptables -t nat -A PREROUTING -d <ip> -p tcp --dport 135 -m addrtype --dst-type LOCAL  \
       -j DNAT --to-destination <ip>:13500 -m comment --comment RpcEndPointMapper
    sudo iptables -t nat -A OUTPUT -d <ip> -p tcp --dport 135 -m addrtype --dst-type LOCAL \
       -j DNAT --to-destination <ip>:13500 -m comment --comment RpcEndPointMapper
    

    Mit --comment RpcEndPointMapper dem Parameter in den vorherigen Befehlen können Sie diese Regeln in späteren Befehlen verwalten.

  2. Lassen Sie die mit dem folgenden Befehl erstellten Routingregeln anzeigen:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Speichern Sie die Routingregeln in einer Datei auf Ihrem Computer.

    sudo iptables-save > /etc/iptables.conf
    
  4. Fügen Sie den folgenden Befehl zu /etc/rc.local (für Ubuntu) oder zu /etc/init.d/after.local (für SLES) hinzu, um die Regeln nach einem Neustart erneut zu laden:

    iptables-restore < /etc/iptables.conf
    

    Hinweis

    Sie müssen über die Berechtigungen des Superusers (sudo) verfügen, um die Dateien rc.local oder after.local zu bearbeiten.

Die iptables-save Befehle und iptables-restore Befehle bieten zusammen mit derrc.local/after.localStartkonfiguration einen grundlegenden Mechanismus zum Speichern und Wiederherstellen von IPTables-Einträgen. Abhängig von Ihrer Linux-Distribution sind möglicherweise erweiterte oder automatisierte Optionen verfügbar. Eine Ubuntu-Alternative ist zum Beispiel das Paket iptables-persistent, um Einträge dauerhaft zu machen.

In den vorherigen Schritte wird von einer festen IP-Adresse ausgegangen. Wenn sich die IP-Adresse für Ihre SQL Server-Instanz ändert (aufgrund eines manuellen Eingriffs oder DHCP), müssen Sie die Routingregeln entfernen und neu erstellen, wenn Sie sie mit IPTables erstellt haben. Wenn Sie vorhandene Routingregeln neu erstellen oder löschen müssen, verwenden Sie den folgenden Befehl, um alte RpcEndPointMapper Regeln zu entfernen:

sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done

Verifizieren

An diesem Punkt sollte SQL Server an verteilten Transaktionen teilnehmen können. Führen Sie den Netstat-Befehl aus, um zu überprüfen, ob SQL Server zuhört. Wenn Sie RHEL verwenden, müssen Sie möglicherweise zuerst das Paket "net-tools " installieren:

sudo netstat -tulpn | grep sqlservr

Die Ausgabe sollte etwa folgendem Beispiel entsprechen:

tcp 0 0 0.0.0.0:1433 0.0.0.0:* LISTEN 13911/sqlservr
tcp 0 0 127.0.0.1:1434 0.0.0.0:* LISTEN 13911/sqlservr
tcp 0 0 0.0.0.0:13500 0.0.0.0:* LISTEN 13911/sqlservr
tcp 0 0 0.0.0.0:51999 0.0.0.0:* LISTEN 13911/sqlservr
tcp6 0 0 :::1433 :::* LISTEN 13911/sqlservr
tcp6 0 0 ::1:1434 :::* LISTEN 13911/sqlservr
tcp6 0 0 :::13500 :::* LISTEN 13911/sqlservr
tcp6 0 0 :::51999 :::* LISTEN 13911/sqlservr

Nach einem Neustart beginnt SQL Server jedoch erst bei der ersten verteilten Transaktion mit der Überwachung des servertcpport. In diesem Fall würden Sie SQL Server in diesem Beispiel erst bei der ersten verteilten Transaktion auf Port 51999 ausmachen.

Konfigurieren der Authentifizierung für die RPC-Kommunikation für MS DTC

MSDTC für SQL Server unter Linux verwendet standardmäßig keine Authentifizierung bei der RPC-Kommunikation. Wenn der Hostcomputer jedoch einer Active Directory-Domäne beigetreten ist, können Sie MSDTC so konfigurieren, dass authentifizierte RPC-Kommunikation mithilfe der folgenden mssql-conf-Einstellungen verwendet wird:

Einstellung Beschreibung
distributedtransaction.allowonlysecurerpccalls Konfigurieren von sicheren RPC-Aufrufen für verteilte Transaktionen. Der Standardwert ist 0.
distributedtransaction.fallbacktounsecurerpcifnecessary Konfigurieren von sicheren RPC-Aufrufen für verteilte Transaktionen. Der Standardwert ist 0.
distributedtransaction.turnoffrpcsecurity Aktivieren oder Deaktivieren der RPC-Sicherheit für verteilte Transaktionen. Der Standardwert ist 0.

Unterstützung und Kompatibilität

Active Directory

Microsoft empfiehlt die Verwendung von MSDTC mit aktivierten RPC, wenn SQL Server in einer Active Directory-Konfiguration eingebunden ist. Wenn Sie SQL Server für die Verwendung der Active Directory-Authentifizierung konfigurieren, verwendet MSDTC standardmäßig RPC-Sicherheit für die gegenseitige Authentifizierung.

Windows und Linux

Wenn sich ein Client mit Windows-Betriebssystem bei einer verteilten Transaktion mit SQL Server für Linux eintragen muss, benötigt er die folgende Mindestversion des Windows-Betriebssystems:

Betriebssystem Mindestversion Betriebssystembuild
Windows Server 1903 18362.30.190401-1528
Windows 10 1903 18362.267