Så här konfigurerar du Microsoft Distributed Transaction Coordinator (MSDTC) i Linux

Gäller för:SQL Server i 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

Du aktiverar distribuerade transaktioner 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 rotprivilegier 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-instansens RPC-slutpunktsmappningsprocess.

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 17,3 eller senare versioner) Ja
Distribuerade transaktioner på länkad server SQL Server Ja Nej

Mer information finns i Understanding XA Transactions.

Konfigurationssteg för MSDTC

Utför följande tre steg för att konfigurera MSDTC-kommunikation och funktioner för SQL Server.

  • Konfigurera network.rpcport och distributedtransaction.servertcpport med mssql-conf.
  • Konfigurera brandväggen så att den tillåter kommunikation på distributedtransaction.servertcpport och port 135.
  • Konfigurera Linux-serverroutning så att RPC-kommunikationen på port 135 omdirigeras till SQL Server-instansens network.rpcport.

Följande avsnitt innehåller detaljerade instruktioner för varje steg.

Konfigurera RPC- och MSDTC-portar

Konfigurera network.rpcport och distributedtransaction.servertcpport med mssql-conf. Det här steget är specifikt för SQL Server och är vanligt för alla distributioner som stöds.

  1. 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
    
  2. Ange värdet distributedtransaction.servertcpport. I följande exempel anges den till 51999.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. Starta om SQL Server.

    sudo systemctl restart mssql-server
    

Konfigurera brandväggen

Konfigurera brandväggen så att den tillåter kommunikation på servertcpport och port 135. Det här steget gör det möjligt för RPC-slutpunktsmappningsprocessen och MSDTC-processen att kommunicera externt med andra transaktionshanterare och koordinatorer. Den faktiska proceduren 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

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-instansens network.rpcport. Konfigurationsmekanismen för portvidarebefordring kan skilja sig åt i olika distributioner. Följande avsnitt innehåller vägledning för Ubuntu, SUSE Enterprise Linux (SLES) och Red Hat Enterprise Linux (RHEL).

Ubuntu och SLES använder inte den brandväggsbaserade tjänsten, så iptables-regler är en effektiv mekanism för att uppnå portroutning. Iptables-reglerna kanske inte bevaras under omstarter, så följande kommandon innehåller även instruktioner för att återställa reglerna efter en omstart.

  1. 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.

  2. Visa de routningsregler som du skapade med följande kommando:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Spara routningsreglerna i en fil på datorn.

    sudo iptables-save > /etc/iptables.conf
    
  4. 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- eller after.local-filerna.

Kommandona iptables-save ochiptables-restore, tillsammans medrc.local/after.localstartkonfigurationen, 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 du har skapat dem med iptables. Om du behöver återskapa eller ta bort befintliga routningsregler använder du 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

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 netstat-kommandot . Om du använder RHEL kanske du först måste 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 kan du konfigurera MSDTC för 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.

Supporterbarhet och kompatibilitet

Active Directory

Microsoft rekommenderar att du använder MSDTC med RPC aktiverat om SQL Server har registrerats i en Active Directory-konfiguration. Om du konfigurerar SQL Server 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-bygge
Windows Server 1903 18362.30.190401-1528
Windows 10 1903 18362.267