Konfigurieren von Microsoft Distributed Transaction Coordinator (MS DTC) unter Linux
Gilt für: SQL Server – Linux
In diesem Artikel wird beschrieben, wie Microsoft Distributed Transaction Coordinator (MS DTC) unter Linux konfiguriert wird.
MS DTC für Linux wird in SQL Server 2017 (14.x) kumulatives Update 16 und in höheren Versionen unterstützt.
Übersicht
Verteilte Transaktionen sind für SQL Server für Linux aktiviert, indem MS DTC und die Funktion der Remoteprozeduraufruf (RPC) -Endpunktzuordnung in SQL Server eingeführt werden. 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). 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.
MS DTC verwendet zwei Konfigurationsparameter für das mssql-conf-Hilfsprogramm:
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 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. |
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 unter Linux | Ja | Nein |
Verteilte XA-Transaktionen | SQL Server sowie andere ODBC- und JDBC-Datenquellen mit Unterstützung für XA | Ja (Version 17.3 oder höher erforderlich) | Ja |
Verteilte Transaktionen auf Verbindungsserver | SQL Server | Ja | Nein |
Weitere Informationen finden Sie unter Grundlegendes zu XA-Transaktionen.
MS DTC-Konfigurationsschritte
Es gibt drei Schritte, um die MS DTC-Kommunikation und -Funktionalität zu konfigurieren. Wenn die erforderlichen Konfigurationsschritte nicht ausgeführt werden, aktiviert SQL Server die MS DTC-Funktionalität nicht.
- Konfigurieren von
network.rpcport
unddistributedtransaction.servertcpport
mit mssql-conf. - Konfigurieren Sie die Firewall so, dass die Kommunikation auf
distributedtransaction.servertcpport
und an Port 135 zugelassen wird. - Konfigurieren des Linux-Serverroutings, sodass die RPC-Kommunikation an Port 135 an
network.rpcport
von SQL Server umgeleitet wird.
Die folgenden Abschnitte enthalten detaillierte Anweisungen für die einzelnen Schritte.
Konfigurieren von RPC- und MS DTC-Ports
Konfigurieren Sie zuerst network.rpcport
und distributedtransaction.servertcpport
mit mssql-conf. Dieser Schritt gilt für SQL Server und für alle unterstützten Distributionen einheitlich.
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
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
Starten Sie SQL Server neu.
sudo systemctl restart mssql-server
Konfigurieren der Firewall
Der zweite Schritt besteht darin, die Firewall zu konfigurieren, um die Kommunikation an servertcpport
und Port 135 zuzulassen. Dadurch kann der RPC-Endpunktzuordnungsprozess und der MS DTC-Prozess aktiviert werden, um extern mit anderen Transaktions-Managern und Koordinatoren zu kommunizieren. Die eigentlichen Schritte hierfür sind abhängig von Ihrer Linux-Distribution und Ihrer 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
Im folgenden Beispiel wird gezeigt, wie dies unter Red Hat Enterprise Linux (RHEL) durchgeführt werden kann:
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. Das Aktualisieren der Firewall kann in manchen Fällen die Portroutingregeln löschen.
Konfigurieren des Portroutings
Konfigurieren Sie die Linux-Serverroutingtabelle, sodass die RPC-Kommunikation an Port 135 an network.rpcport
von SQL Server umgeleitet wird. Der Konfigurationsmechanismus für die Portweiterleitung kann sich bei unterschiedlichen Distributionen unterscheiden. Die folgenden Abschnitte enthalten Anleitungen für Ubuntu, SUS Enterprise Linux (SLES) und Red Hat Enterprise Linux (RHEL).
Portrouting in Ubuntu und SLES
Ubuntu und SLES (SUSE Linux Enterprise Server) verwenden nicht den firewalld-Dienst, sodass iptable-Regeln einen effizienten Mechanismus zum Erreichen von Portrouting bieten. Die iptable-Regeln bleiben bei Neustarts möglicherweise nicht erhalten, sodass die folgenden Befehle auch Anweisungen zum Wiederherstellen der Regeln nach einem Neustart enthalten.
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
Der
--comment RpcEndPointMapper
-Parameter in den vorherigen Befehlen unterstützt Sie bei der Verwaltung dieser Regeln in späteren Befehlen.Lassen Sie die mit dem folgenden Befehl erstellten Routingregeln anzeigen:
sudo iptables -S -t nat | grep "RpcEndPointMapper"
Speichern Sie die Routingregeln in einer Datei auf Ihrem Computer.
sudo iptables-save > /etc/iptables.conf
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 Superuser-Berechtigungen (Sudo) verfügen, um die Dateien
rc.local
oderafter.local
zu bearbeiten.
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. Abhängig von Ihrer Linux-Distribution sind möglicherweise erweiterte oder automatisierte Optionen verfügbar. Eine Ubuntu-Alternative ist beispielsweise das iptables-persistent
-Paket, um Einträge persistent zu machen.
In den vorherigen Schritte wird von einer festen IP-Adresse ausgegangen. 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. Wenn Sie vorhandene Routingregeln neu erstellen oder löschen müssen, können Sie den folgenden Befehl zum Löschen alter RpcEndPointMapper
-Regeln verwenden:
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Portrouting 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. 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.
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload
Überprüfung
An diesem Punkt sollte SQL Server an verteilten Transaktionen teilnehmen können. 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):
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 bis zur ersten verteilten Transaktion nicht damit, an servertcpport
zu lauschen. In diesem Fall würde SQL Server bis zur ersten verteilten Transaktion nicht an Port 51999 lauschen.
Konfigurieren der Authentifizierung für die RPC-Kommunikation für MS DTC
MS DTC für SQL Server für Linux verwendet standardmäßig keine Authentifizierung für die RPC-Kommunikation. Wenn der Hostcomputer jedoch einer Active Directory-Domäne 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:
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. |
Zusätzliche Anleitungen
Active Directory
Microsoft empfiehlt die Verwendung von MS DTC mit aktiviertem RPC, wenn SQL Server in einer Active Directory-Konfiguration registriert ist. Wenn SQL Server für die Verwendung der Active Directory-Authentifizierung konfiguriert ist, verwendet MS DTC standardmäßig die RPC-Sicherheit mit gegenseitiger 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 |