Så här konfigurerar du Microsoft Distributed Transaction Coordinator (MSDTC) i Linux
gäller för:SQL Server – Linux
Den här artikeln beskriver hur du konfigurerar Microsoft Distributed Transaction Coordinator (MSDTC) i Linux.
MSDTC på Linux stöds på SQL Server 2017 (14.x) Kumulativ uppdatering 16 och senare versioner.
Överblick
Distribuerade transaktioner är aktiverade på SQL Server i Linux genom att introducera MSDTC- och RPC-slutpunktsmappningsfunktioner (Remote Procedure Call) i SQL Server. Som standard lyssnar en RPC-slutpunktsmappningsprocess på port 135 efter inkommande RPC-begäranden och tillhandahåller information om registrerade komponenter till fjärrbegäranden. Fjärrbegäranden kan använda den information som returneras av slutpunktsmapparen för att kommunicera med registrerade RPC-komponenter, till exempel MSDTC-tjänster. En process kräver superanvändarbehörighet för att binda till välkända portar (portnummer mindre än 1024) i Linux. För att undvika att starta SQL Server med rotbehörigheter för RPC-slutpunktsmappningsprocessen måste systemadministratörer använda iptables för att skapa nätverksadressöversättning för att dirigera trafik på port 135 till SQL Server RPC-slutpunktsmappningsprocessen.
MSDTC använder två konfigurationsparametrar för verktyget mssql-conf:
mssql-conf-inställning | Beskrivning |
---|---|
network.rpcport |
TCP-porten som RPC-slutpunktsmappningsprocessen binder till. |
distributedtransaction.servertcpport |
Porten som MSDTC-servern lyssnar på. Om den inte har angetts använder MSDTC-tjänsten en slumpmässig tillfällig port vid omstarter av tjänsten, och brandväggsundantag måste konfigureras om för att säkerställa att MSDTC-tjänsten kan fortsätta kommunicera. |
Mer information om dessa inställningar och andra relaterade MSDTC-inställningar finns i Konfigurera SQL Server på Linux med verktyget mssql-conf.
Transaktionsstandarder som stöds
Följande MSDTC-konfigurationer stöds:
Transaktionsstandard | Datakällor | ODBC-drivrutin | JDBC-drivrutin |
---|---|---|---|
OLE-TX transaktioner | SQL Server i Linux | Ja | Nej |
XA-distribuerade transaktioner | SQL Server, andra ODBC- och JDBC-datakällor som stöder XA | Ja (kräver version 17.3 eller senare) | Ja |
Distribuerade transaktioner på länkad server | SQL Server | Ja | Nej |
Mer information finns i Understanding XA Transactions.
Konfigurationssteg för MSDTC
Det finns tre steg för att konfigurera MSDTC-kommunikation och funktioner. Om de nödvändiga konfigurationsstegen inte är klara aktiverar SQL Server inte MSDTC-funktioner.
- Konfigurera
network.rpcport
ochdistributedtransaction.servertcpport
med hjälp av mssql-conf. - Konfigurera brandväggen så att den tillåter kommunikation på
distributedtransaction.servertcpport
och port 135. - Konfigurera Linux-serverroutning så att RPC-kommunikation på port 135 omdirigeras till SQL Server-
network.rpcport
.
Följande avsnitt innehåller detaljerade instruktioner för varje steg.
Konfigurera RPC- och MSDTC-portar
Konfigurera först network.rpcport
och distributedtransaction.servertcpport
med hjälp av mssql-conf. Det här steget är specifikt för SQL Server och gemensamt för alla distributioner som stöds.
Använd mssql-conf för att ange värdet för
network.rpcport
. I följande exempel anges den till 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
Ange värdet
distributedtransaction.servertcpport
. I följande exempel anges den till 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
Starta om SQL Server.
sudo systemctl restart mssql-server
Konfigurera brandväggen
Det andra steget är att konfigurera brandväggen så att den tillåter kommunikation på servertcpport
och port 135. Detta gör det möjligt för RPC-slutpunktsmappningsprocessen och MSDTC-processen att kommunicera externt med andra transaktionshanterare och koordinatorer. De faktiska stegen för detta varierar beroende på din Linux-distribution och brandvägg.
I följande exempel visas hur du skapar dessa regler på Ubuntu.
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
Följande exempel visar hur detta kan göras på 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
Det är viktigt att konfigurera brandväggen innan du konfigurerar portroutning i nästa avsnitt. Om du uppdaterar brandväggen kan du rensa portdirigeringsreglerna i vissa fall.
Konfigurera portroutning
Konfigurera Routningstabellen för Linux-servern så att RPC-kommunikationen på port 135 omdirigeras till SQL Server-network.rpcport
. Konfigurationsmekanismen för portvidarebefordring för olika distributioner kan skilja sig åt. Följande avsnitt innehåller vägledning för Ubuntu, SUS Enterprise Linux (SLES) och Red Hat Enterprise Linux (RHEL).
Portroutning i Ubuntu och SLES
Ubuntu och SLES använder inte den brandväggsbaserade-tjänsten, så iptable- regler är en effektiv mekanism för att uppnå portroutning. De iptable- reglerna kanske inte finns kvar under omstarter, så följande kommandon innehåller även instruktioner för att återställa reglerna efter en omstart.
Skapa routningsregler för port 135. I följande exempel dirigeras port 135 till RPC-porten, 13500, som definierades i föregående avsnitt. Ersätt
<ipaddress>
med SERVERNs IP-adress.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
Parametern
--comment RpcEndPointMapper
i föregående kommandon hjälper dig att hantera dessa regler i senare kommandon.Visa de routningsregler som du skapade med följande kommando:
sudo iptables -S -t nat | grep "RpcEndPointMapper"
Spara routningsreglerna i en fil på datorn.
sudo iptables-save > /etc/iptables.conf
Om du vill läsa in reglerna igen efter en omstart lägger du till följande kommando i
/etc/rc.local
(för Ubuntu) eller till/etc/init.d/after.local
(för SLES):iptables-restore < /etc/iptables.conf
Obs
Du måste ha behörighet som superanvändare (sudo) för att kunna redigera
rc.local
- ellerafter.local
-filerna.
Kommandona iptables-save och iptables-restore, tillsammans med rc.local
/after.local
startkonfiguration, ger en grundläggande mekanism för att spara och återställa iptables-poster. Beroende på din Linux-distribution kan det finnas mer avancerade eller automatiserade alternativ tillgängliga. Ett Ubuntu-alternativ är till exempel det iptables-persistent
paketet för att göra poster beständiga.
I föregående steg förutsätts en fast IP-adress. Om IP-adressen för SQL Server-instansen ändras (på grund av manuella åtgärder eller DHCP) måste du ta bort och återskapa routningsreglerna om de har skapats med iptables. Om du behöver återskapa eller ta bort befintliga routningsregler kan du använda följande kommando för att ta bort gamla RpcEndPointMapper
regler:
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Portroutning i RHEL
På distributioner som använder brandväggsbaserad tjänst, till exempel Red Hat Enterprise Linux, kan samma tjänst användas för att både öppna porten på servern och intern portvidarebefordring. I Red Hat Enterprise Linux bör du till exempel använda brandväggsbaserad -tjänst (via brandväggs-cmd konfigurationsverktyg med -add-forward-port
eller liknande alternativ) för att skapa och hantera regler för beständig portvidarebefordring i stället för att använda iptables.
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload
Kontrollera
I det här läget bör SQL Server kunna delta i distribuerade transaktioner. Kontrollera att SQL Server lyssnar genom att köra kommandot netstat (om du använder RHEL måste du kanske först installera net-tools-paketet):
sudo netstat -tulpn | grep sqlservr
Du bör se utdata som liknar följande exempel:
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
Men efter en omstart börjar SQL Server inte lyssna på servertcpport
förrän den första distribuerade transaktionen. I det här fallet skulle du inte se SQL Server lyssna på port 51999 i det här exemplet förrän den första distribuerade transaktionen.
Konfigurera autentisering på RPC-kommunikation för MSDTC
MSDTC för SQL Server i Linux använder inte autentisering på RPC-kommunikation som standard. Men när värddatorn är ansluten till en Active Directory-domän är det möjligt att konfigurera MSDTC att använda autentiserad RPC-kommunikation med hjälp av följande mssql-conf inställningar:
Inställning | Beskrivning |
---|---|
distributedtransaction.allowonlysecurerpccalls |
Konfigurera endast säkra RPC-anrop för distribuerade transaktioner. Standardvärdet är 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Konfigurera säkerhetsrelaterade endast RPC-anrop för distribuerade transaktioner. Standardvärdet är 0. |
distributedtransaction.turnoffrpcsecurity |
Aktivera eller inaktivera RPC-säkerhet för distribuerade transaktioner. Standardvärdet är 0. |
Ytterligare vägledning
Active Directory
Microsoft rekommenderar att du använder MSDTC med RPC aktiverat om SQL Server har registrerats i en Active Directory-konfiguration. Om SQL Server har konfigurerats för att använda Active Directory-autentisering använder MSDTC ömsesidig autentisering av RPC-säkerhet som standard.
Windows och Linux
Om en klient i ett Windows-operativsystem behöver registrera sig för distribuerade transaktioner med SQL Server i Linux måste den ha följande lägsta version av Windows-operativsystemet:
Operativsystem | Lägsta version | OS-versionbyggnad |
---|---|---|
Windows Server | 1903 | 18362.30.190401-1528 |
Windows 10 | 1903 | 18362.267 |