Konfigurieren von Microsoft Distributed Transaction Coordinator (MS DTC) unter LinuxHow to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux

Gilt für: JaSQL Server (nur Linux) NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

In diesem Artikel wird beschrieben, wie Microsoft Distributed Transaction Coordinator (MS DTC) unter Linux konfiguriert wird.This article describes how to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux.

Hinweis

MS DTC für Linux wird in SQL Server 2017 ab dem kumulativen Update 16 unterstützt.MSDTC on Linux is supported on SQL Server 2017 starting with cumulative update 16.

ÜbersichtOverview

Verteilte Transaktionen sind für SQL Server für Linux aktiviert, indem MS DTC und die Funktion der RPC-Endpunktzuordnung in SQL Server eingeführt werden.Distributed transactions are enabled on SQL Server on Linux by introducing MSDTC and RPC endpoint mapper functionality within SQL Server. Standardmäßig lauscht ein RPC-Endpunktzuordnungsprozess an Port 135 für eingehende RPC-Anforderungen und bietet Informationen zu registrierten Komponenten für Remoteanforderungen.By default, an RPC endpoint-mapping process listens on port 135 for incoming RPC requests and provides registered components information to remote requests. Remoteanforderungen können die von der Endpunktzuordnung zurückgegebenen Informationen zum Kommunizieren mit registrierten RPC-Komponenten wie MS DTC-Diensten verwenden.Remote requests can use the information returned by endpoint mapper to communicate with registered RPC components, such as MSDTC services. Ein Prozess erfordert unter Linux Superuser-Berechtigungen für die Bindung an bekannte Ports (Portnummern unter 1024).A process requires super user privileges to bind to well-known ports (port numbers less than 1024) on Linux. Systemadministratoren müssen iptables zum Erstellen einer Netzwerkadressenübersetzung für das Routen von Datenverkehr an Port 135 zum RPC-Endpunktzuordnungsprozess von SQL Server verwenden, um zu vermeiden, dass SQL Server mit Stammberechtigungen für den RPC-Endpunktzuordnungsprozess gestartet wird.To avoid starting SQL Server with root privileges for the RPC endpoint mapper process, system administrators must use iptables to create Network Address Translation to route traffic on port 135 to SQL Server's RPC endpoint-mapping process.

MS DTC verwendet zwei Konfigurationsparameter für das mssql-conf-Hilfsprogramm:MSDTC uses two configuration parameters for the mssql-conf utility:

mssql-conf-Einstellungmssql-conf setting und BeschreibungDescription
network.rpcportnetwork.rpcport Der TCP-Port, an den der RPC-Endpunktzuordnungsprozess gebunden wird.The TCP port that the RPC endpoint mapper process binds to.
distributedtransaction.servertcpportdistributedtransaction.servertcpport Der Port, an dem der MS DTC-Server lauscht.The port that the MSDTC server listens to. Wenn dieser nicht festgelegt ist, verwendet der MS DTC-Dienst bei Neustarts des Diensts einen zufälligen kurzlebigen Port. Firewallausnahmen müssen neu konfiguriert werden, um sicherzustellen, dass die Kommunikation mit dem MS DTC-Dienst fortgesetzt werden kann.If not set, the MSDTC service uses a random ephemeral port on service restarts, and firewall exceptions will need to be reconfigured to ensure that MSDTC service can continue communication.

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.For more information about these settings and other related MSDTC settings, see Configure SQL Server on Linux with the mssql-conf tool.

Unterstützte MS DTC-KonfigurationenSupported MSDTC configurations

Die folgenden MS DTC-Konfigurationen werden unterstützt:The following MSDTC configurations are supported:

  • Verteilte OLE-TX-Transaktionen für SQL Server für Linux für ODBC-Anbieter.OLE-TX Distributed transactions against SQL Server on Linux for ODBC providers.

  • Verteilte XA-Transaktionen für SQL Server für Linux mithilfe von JDBC- und ODBC-Anbietern.XA Distributed transactions against SQL Server on Linux using JDBC and ODBC providers. Damit XA-Transaktionen mit dem ODBC-Anbieter ausgeführt werden können, müssen Sie Microsoft ODBC Driver for SQL Server Version 17.3 oder höher verwenden.For XA transactions to be performed using ODBC provider, you need to use Microsoft ODBC Driver for SQL Server version 17.3 or higher. Weitere Informationen finden Sie unter Grundlegendes zu XA-Transaktionen.For more information, see Understanding XA Transactions.

  • Verteilte Transaktionen auf Verbindungsservern.Distributed transactions on Linked server.

MS DTC-KonfigurationsschritteMSDTC configuration steps

Es gibt drei Schritte, um die MS DTC-Kommunikation und -Funktionalität zu konfigurieren.There are three steps to configure MSDTC communication and functionality. Wenn die erforderlichen Konfigurationsschritte nicht ausgeführt werden, aktiviert SQL Server die MS DTC-Funktionalität nicht.If the necessary configuration steps are not done, SQL Server will not enable MSDTC functionality.

  • Konfigurieren von network.rpcport und distributedtransaction.servertcpport mithilfe von mssql-confConfigure network.rpcport and distributedtransaction.servertcpport using mssql-conf.
  • Konfigurieren der Firewall, um die Kommunikation über distributedtransaction.servertcpport und Port 135 zuzulassenConfigure the firewall to allow communication on distributedtransaction.servertcpport and port 135.
  • Konfigurieren des Linux-Serverroutings, sodass die RPC-Kommunikation an Port 135 an network.rpcport von SQL Server umgeleitet wirdConfigure Linux server routing so that RPC communication on port 135 is redirected to SQL Server's network.rpcport.

Die folgenden Abschnitte enthalten detaillierte Anweisungen für die einzelnen Schritte.The following sections provide detailed instructions for each step.

Konfigurieren von RPC- und MS DTC-PortsConfigure RPC and MSDTC ports

Konfigurieren Sie zunächst network.rpcport und distributedtransaction.servertcpport mithilfe von mssql-conf.First, configure network.rpcport and distributedtransaction.servertcpport using mssql-conf. Dieser Schritt gilt für SQL Server und für alle unterstützten Distributionen einheitlich.This step if specific to SQL Server and common across all supported distributions.

  1. Verwenden Sie mssql-conf, um den Wert von network.rpcport festzulegen.Use mssql-conf to set the network.rpcport value. Im folgenden Beispiel wird dieser auf „13500“ festgelegt.The following example sets it to 13500.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. Legen Sie den Wert für distributedtransaction.servertcpport fest.Set the distributedtransaction.servertcpport value. Im folgenden Beispiel wird dieser auf 51999 festgelegt.The following example sets it to 51999.

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

    sudo systemctl restart mssql-server
    

Konfigurieren der FirewallConfigure the firewall

Der zweite Schritt besteht darin, die Firewall zu konfigurieren, um die Kommunikation an servertcpport und Port 135 zuzulassen.The second step is to configure the firewall to allow communication on servertcpport and port 135. Dadurch kann der RPC-Endpunktzuordnungsprozess und der MS DTC-Prozess aktiviert werden, um extern mit anderen Transaktions-Managern und Koordinatoren zu kommunizieren.This enables the RPC endpoint-mapping process and MSDTC process to communicate externally to other transaction managers and coordinators. Die eigentlichen Schritte hierfür sind abhängig von Ihrer Linux-Distribution und Ihrer Firewall.The actual steps for this will vary depending on your Linux distribution and firewall.

Im folgenden Beispiel wird das Erstellen dieser Regeln unter Ubuntu gezeigt.The following example shows how to create these rules on Ubuntu.

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

Im folgenden Beispiel wird gezeigt, wie dies unter Red Hat Enterprise Linux (RHEL) durchgeführt werden kann:The following example shows how this could be done on Red Hat Enterprise Linux (RHEL):

sudo firewall-cmd --zone=public --add-port=51999/tcp --permanent
sudo firewall-cmd --zone=public --add-port=135/tcp --permanent
sudo firewall-cmd --reload

Es ist wichtig, dass die Firewall vor dem Konfigurieren des Portroutings im nächsten Abschnitt konfiguriert wird.It is important to configure the firewall before configuring port routing in the next section. Das Aktualisieren der Firewall kann in manchen Fällen die Portroutingregeln löschen.Refreshing the firewall can clear the port routing rules in some cases.

Konfigurieren des PortroutingsConfigure port routing

Konfigurieren Sie die Linux-Serverroutingtabelle, sodass die RPC-Kommunikation an Port 135 an network.rpcport von SQL Server umgeleitet wird.Configure the Linux server routing table so that RPC communication on port 135 is redirected to SQL Server's network.rpcport. Der Konfigurationsmechanismus für die Portweiterleitung kann sich bei unterschiedlichen Distributionen unterscheiden.Configuration mechanism for port forwarding on different distribution may differ. Die folgenden Abschnitte enthalten Anleitungen für Ubuntu, SUS Enterprise Linux (SLES) und Red Hat Enterprise Linux (RHEL).The following sections provide guidance for Ubuntu, SUS Enterprise Linux (SLES), and Red Hat Enterprise Linux (RHEL).

Portrouting in Ubuntu und SLESPort routing in Ubuntu and SLES

Ubuntu und SLES (SUSE Linux Enterprise Server) verwenden nicht den firewalld-Dienst, sodass iptable-Regeln einen effizienten Mechanismus zum Erreichen von Portrouting bieten.Ubuntu and SLES do not use the firewalld service, so iptable rules are an efficient mechanism to achieve port routing. Die iptable-Regeln bleiben bei Neustarts möglicherweise nicht erhalten, sodass die folgenden Befehle auch Anweisungen zum Wiederherstellen der Regeln nach einem Neustart enthalten.The iptable rules may not persist during reboots, so the following commands also provide instructions for restoring the rules after a reboot.

  1. Erstellen Sie Routingregeln für Port 135.Create routing rules for port 135. Im folgenden Beispiel wird Port 135 an den RPC-Port 13500 weitergeleitet, der im vorherigen Abschnitt definiert wurde.In the following example, port 135 is directed to the RPC port, 13500, defined in the previous section. Ersetzen Sie <ipaddress> durch die IP-Adresse Ihres Servers.Replace <ipaddress> with the IP address of your server.

    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
    

    Der --comment RpcEndPointMapper-Parameter in den vorherigen Befehlen unterstützt Sie bei der Verwaltung dieser Regeln in späteren Befehlen.The --comment RpcEndPointMapper parameter in the previous commands assists with managing these rules in later commands.

  2. Lassen Sie die mit dem folgenden Befehl erstellten Routingregeln anzeigen:View the routing rules you created with the following command:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Speichern Sie die Routingregeln in einer Datei auf Ihrem Computer.Save the routing rules to a file on your machine.

    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:To reload the rules after a reboot, add the following command to /etc/rc.local (for Ubuntu) or to /etc/init.d/after.local (for SLES):

    iptables-restore < /etc/iptables.conf
    

    Hinweis

    Sie müssen über Superuser-Berechtigungen (Sudo) verfügen, um die Dateien rc.local oder after.local zu bearbeiten.You must have super user (sudo) privileges to edit the rc.local or after.local files.

Die Befehle iptables-save und iptables-restore stellen zusammen mit der Startkonfiguration rc.local/after.local einen grundlegenden Mechanismus zum Speichern und Wiederherstellen von iptables-Entitäten bereit.The iptables-save and iptables-restore commands, along with rc.local/after.local startup configuration, provide a basic mechanism to save and restore iptables entries. Abhängig von Ihrer Linux-Distribution sind möglicherweise erweiterte oder automatisierte Optionen verfügbar.Depending on your Linux distribution, there might be more advanced or automated options available. Eine Ubuntu-Alternative ist beispielsweise das iptables-persistent-Paket, um Einträge persistent zu machen.For example, an Ubuntu alternative is the iptables-persistent package to make entries persistent.

Wichtig

In den vorherigen Schritte wird von einer festen IP-Adresse ausgegangen.The previous steps assume a fixed IP address. Wenn sich die IP-Adresse für Ihre SQL Server-Instanz (aufgrund von manuellem Eingriff oder DHCP) ändert, müssen Sie die Routingregeln entfernen und neu erstellen, wenn diese mit iptables erstellt wurden.If the IP address for your SQL Server instance changes (due to manual intervention or DHCP), you must remove and recreate the routing rules if they were created with iptables. Wenn Sie vorhandene Routingregeln neu erstellen oder löschen müssen, können Sie den folgenden Befehl zum Löschen alter RpcEndPointMapper-Regeln verwenden:If you need to recreate or delete existing routing rules, you can use the following command to remove old RpcEndPointMapper rules:

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

Portrouting in RHELPort routing in RHEL

Bei Distributionen wie Red Hat Enterprise Linux, die den firewalld-Dienst verwenden, kann derselbe Dienst sowohl für das Öffnen des Ports auf dem Server als auch für die interne Portweiterleitung verwendet werden.On distributions that use firewalld service, such as Red Hat Enterprise Linux, the same service can be used for both opening the port on the server and internal port forwarding. Im Fall von Red Hat Enterprise Linux sollten Sie beispielsweise anstatt iptables den firewalld-Dienst verwenden (über das firewall-cmd-Konfigurationshilfsprogramm mit -add-forward-port oder ähnlichen Optionen), um persistente Portweiterleitungsregeln zu erstellen und zu verwalten.For example, on Red Hat Enterprise Linux, you should use firewalld service (via firewall-cmd configuration utility with -add-forward-port or similar options) to create and manage persistent port forwarding rules instead of using iptables.

sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload

ÜberprüfenVerify

An diesem Punkt sollte SQL Server an verteilten Transaktionen teilnehmen können.At this point, SQL Server should be able to participate in distributed transactions. Führen Sie den Befehl netstat aus, um zu überprüfen, ob SQL Server lauscht (Wenn Sie RHEL verwenden, müssen Sie möglicherweise zuerst das Paket net-tools installieren):To verify that SQL Server is listening, run the netstat command (if you are using RHEL, you might have to first install the net-tools package):

sudo netstat -tulpn | grep sqlservr

Die Ausgabe sollte etwa folgendermaßen aussehen:You should see output similar to the following:

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 bis zur ersten verteilten Transaktion nicht damit, an servertcpport zu lauschen.However, after a restart, SQL Server does not start listening on the servertcpport until the first distributed transaction. In diesem Fall würde SQL Server bis zur ersten verteilten Transaktion nicht an Port 51999 lauschen.In this case, you would not see SQL Server listening on port 51999 in this example until the first distributed transaction.

Konfigurieren der Authentifizierung für die RPC-Kommunikation für MS DTCConfigure authentication on RPC communication for MSDTC

MS DTC für SQL Server für Linux verwendet standardmäßig keine Authentifizierung für die RPC-Kommunikation.MSDTC for SQL Server on Linux does not use authentication on RPC communication by default. Wenn der Hostcomputer jedoch einer Active Directory-Domäne (AD) hinzugefügt wird, ist es möglich, MS DTC mithilfe der folgenden mssql-conf-Einstellungen für die Verwendung der authentifizierten RPC-Kommunikation zu konfigurieren:However, when the host machine is joined to an Active Directory (AD) domain, it is possible to configure MSDTC to use authenticated RPC communication using following mssql-conf settings:

EinstellungSetting und BeschreibungDescription
distributedtransaction.allowonlysecurerpccallsdistributedtransaction.allowonlysecurerpccalls Konfigurieren von sicheren RPC-Aufrufen für verteilte Transaktionen.Configure secure only RPC calls for distributed transactions. Der Standardwert ist 0 (null).Default value is 0.
distributedtransaction.fallbacktounsecurerpcifnecessarydistributedtransaction.fallbacktounsecurerpcifnecessary Konfigurieren von sicheren RPC-Aufrufen für verteilte Transaktionen.Configure security only RPC calls for distributed transactions. Der Standardwert ist 0 (null).Default value is 0.
distributedtransaction.turnoffrpcsecuritydistributedtransaction.turnoffrpcsecurity Aktivieren oder Deaktivieren der RPC-Sicherheit für verteilte Transaktionen.Enable or disable RPC security for distributed transactions. Der Standardwert ist 0 (null).Default value is 0.

Zusätzliche AnleitungenAdditional guidance

Active DirectoryActive directory

Microsoft empfiehlt die Verwendung von MS DTC mit aktiviertem RPC, wenn SQL Server in einer Active Directory-Konfiguration (AD) registriert ist.Microsoft recommends using MSDTC with RPC enabled if SQL Server is enrolled into an Active Directory (AD) configuration. Wenn SQL Server für die Verwendung der AD-Authentifizierung konfiguriert ist, verwendet MS DTC standardmäßig die RPC-Sicherheit mit gegenseitiger Authentifizierung.If SQL Server is configured to use AD authentication, MSDTC uses mutual authentication RPC security by default.

Windows und LinuxWindows and 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:If a client on a Windows operating system needs to enlist into distributed transaction with SQL Server on Linux, it must have the following minimum version of Windows operating system:

BetriebssystemOperating system MindestversionMinimum version BetriebssystembuildOS Build
Windows ServerWindows Server 19031903 18362.30.190401-152818362.30.190401-1528
Windows 10Windows 10 19031903 18362.26718362.267

Nächste SchritteNext steps

Weitere Informationen zu SQL Server für Linux finden Sie unter SQL Server für Linux.For more information about SQL Server on Linux, see SQL Server on Linux.