Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.rpcportunddistributedtransaction.servertcpportmit mssql-conf. - Konfigurieren Sie die Firewall so, dass die Kommunikation über
distributedtransaction.servertcpportund 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.
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 13500Legen Sie den
distributedtransaction.servertcpport-Wert fest. Im folgenden Beispiel wird dieser auf 51999 festgelegt.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Starten 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.
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 RpcEndPointMapperMit
--comment RpcEndPointMapperdem Parameter in den vorherigen Befehlen können Sie diese Regeln in späteren Befehlen verwalten.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.confFü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.confHinweis
Sie müssen über die Berechtigungen des Superusers (sudo) verfügen, um die Dateien
rc.localoderafter.localzu 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 |