Delen via


De Microsoft Distributed Transaction Coordinator (MSDTC) configureren in Linux

Van toepassing op:SQL Server op Linux

In dit artikel wordt beschreven hoe u de Microsoft Distributed Transaction Coordinator (MSDTC) configureert in Linux.

MSDTC op Linux wordt ondersteund op SQL Server 2017 (14.x) Cumulatieve update 16 en nieuwere versies.

Overzicht

U kunt gedistribueerde transacties op SQL Server in Linux inschakelen door MSDTC en RPC-eindpunttoewijzingsfunctionaliteit (remote procedure call) in SQL Server te introduceren. Standaard luistert een RPC-eindpunttoewijzingsproces naar poort 135 voor binnenkomende RPC-aanvragen en geeft informatie over geregistreerde componenten aan externe verzoeken. Externe aanvragen kunnen de informatie die wordt geretourneerd door endpoint mapper gebruiken om te communiceren met geregistreerde RPC-onderdelen, zoals MSDTC-services.

Voor een proces zijn supergebruikersbevoegdheden vereist om verbinding te maken met bekende poorten (poortnummers kleiner dan 1024) in Linux. Om te voorkomen dat SQL Server wordt gestart met hoofdbevoegdheden voor het RPC-eindpunttoewijzingsproces, moeten systeembeheerders iptables gebruiken om Network Address Translation te maken om verkeer op poort 135 te routeren naar het RPC-eindpunttoewijzingsproces van het SQL Server-exemplaar.

MSDTC maakt gebruik van twee configuratieparameters voor het hulpprogramma mssql-conf:

mssql-conf-instelling Beschrijving
network.rpcport De TCP-poort waaraan het RPC-eindpunttoewijzingsproces is gekoppeld.
distributedtransaction.servertcpport De poort waarnaar de MSDTC-server luistert. Als deze niet is ingesteld, gebruikt de MSDTC-service een willekeurige tijdelijke poort bij het opnieuw opstarten van de service en moeten firewalluitzonderingen opnieuw worden geconfigureerd om ervoor te zorgen dat de MSDTC-service de communicatie kan voortzetten.

Zie SQL Server configureren op Linux met het hulpprogramma mssql-confvoor meer informatie over deze instellingen en andere gerelateerde MSDTC-instellingen.

Ondersteunde transactiestandaarden

De volgende MSDTC-configuraties worden ondersteund:

Transactiestandaard Gegevensbronnen ODBC-stuurprogramma JDBC-stuurprogramma
OLE-TX transacties SQL Server op Linux Ja Nee
XA-gedistribueerde transacties SQL Server, andere ODBC- en JDBC-gegevensbronnen die ondersteuning bieden voor XA Ja (vereist 17.3 of nieuwere versies) Ja
gedistribueerde transacties op gekoppelde server SQL Server Ja Nee

Zie Understanding XA Transactionsvoor meer informatie.

MSDTC-configuratiestappen

Voer de volgende drie stappen uit om MSDTC-communicatie en -functionaliteit voor SQL Server te configureren.

  • Configureren network.rpcport en distributedtransaction.servertcpport met mssql-conf.
  • Configureer de firewall om communicatie op distributedtransaction.servertcpport en poort 135 toe te staan.
  • Configureer Linux-serverroutering zodat RPC-communicatie op poort 135 wordt omgeleid naar de SQL network.rpcportServer-instantie.

De volgende secties bevatten gedetailleerde instructies voor elke stap.

RPC- en MSDTC-poorten configureren

Configureren network.rpcport en distributedtransaction.servertcpport met mssql-conf. Deze stap is specifiek voor SQL Server en algemeen voor alle ondersteunde distributies.

  1. Gebruik mssql-conf om de network.rpcport-waarde in te stellen. In het volgende voorbeeld wordt dit ingesteld op 13500.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. Stel de distributedtransaction.servertcpport-waarde in. In het volgende voorbeeld wordt dit ingesteld op 51999.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. Start SQL Server opnieuw op.

    sudo systemctl restart mssql-server
    

De firewall configureren

Configureer de firewall om communicatie op servertcpport en poort 135 toe te staan. Met deze stap kunnen het RPC-eindpunttoewijzingsproces en het MSDTC-proces extern communiceren met andere transactiemanagers en coördinatoren. De daadwerkelijke procedure is afhankelijk van uw Linux-distributie en firewall.

In het volgende voorbeeld ziet u hoe u deze regels maakt op 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

Het is belangrijk om de firewall te configureren voordat u poortroutering configureert in de volgende sectie. Als u de firewall vernieuwt, kunnen de poortrouteringsregels in sommige gevallen worden gewist.

Portroutering configureren

Configureer de routeringstabel van de Linux-server zodat RPC-communicatie op poort 135 wordt omgeleid naar de SQL network.rpcportServer-instantie. Het configuratiemechanisme voor port forwarding kan verschillen op verschillende distributies. De volgende secties bevatten richtlijnen voor Ubuntu, SUSE Enterprise Linux (SLES) en Red Hat Enterprise Linux (RHEL).

Ubuntu en SLES maken geen gebruik van de firewallservice , dus iptables-regels zijn een efficiënt mechanisme om poortroutering te bereiken. De iptables-regels blijven mogelijk niet behouden tijdens het opnieuw opstarten, dus de volgende opdrachten bieden ook instructies voor het herstellen van de regels na opnieuw opstarten.

  1. Maak routeringsregels voor poort 135. In het volgende voorbeeld wordt poort 135 omgeleid naar de RPC-poort, 13500, die in de vorige sectie is gedefinieerd. Vervang <ipaddress> door het IP-adres van uw 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
    

    De --comment RpcEndPointMapper parameter in de vorige opdrachten helpt u bij het beheren van deze regels in latere opdrachten.

  2. Bekijk de routeringsregels die u hebt gemaakt met de volgende opdracht:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Sla de routeringsregels op uw computer op.

    sudo iptables-save > /etc/iptables.conf
    
  4. Als u de regels na opnieuw opstarten opnieuw wilt laden, voegt u de volgende opdracht toe aan /etc/rc.local (voor Ubuntu) of aan /etc/init.d/after.local (voor SLES):

    iptables-restore < /etc/iptables.conf
    

    Notitie

    U moet supergebruikersbevoegdheden (sudo) hebben om de rc.local- of after.local-bestanden te bewerken.

De iptables-save en iptables-restore opdrachten bieden, samen met rc.local/after.local opstartconfiguratie, een basismechanisme voor het opslaan en herstellen van iptables-vermeldingen . Afhankelijk van uw Linux-distributie zijn er mogelijk meer geavanceerde of geautomatiseerde opties beschikbaar. Een Alternatief voor Ubuntu is bijvoorbeeld het iptables-persistent-pakket om vermeldingen permanent te maken.

In de vorige stappen wordt uitgegaan van een vast IP-adres. Als het IP-adres voor uw SQL Server-exemplaar wordt gewijzigd (vanwege handmatige interventie of DHCP), moet u de routeringsregels verwijderen en opnieuw maken als u deze met iptables hebt gemaakt. Als u bestaande routeringsregels opnieuw wilt maken of verwijderen, gebruikt u de volgende opdracht om oude RpcEndPointMapper regels te verwijderen:

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

Verifiëren

Op dit moment moet SQL Server kunnen deelnemen aan gedistribueerde transacties. Voer de netstat-opdracht uit om te controleren of SQL Server luistert. Als u RHEL gebruikt, moet u mogelijk eerst het pakket net-tools installeren:

sudo netstat -tulpn | grep sqlservr

U zou een uitvoer moeten zien die vergelijkbaar is met het volgende voorbeeld:

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

Na het opnieuw opstarten luistert SQL Server echter pas op de servertcpport nadat de eerste gedistribueerde transactie is uitgevoerd. In dit voorbeeld ziet u niet dat SQL Server luistert op poort 51999 voordat de eerste gedistribueerde transactie plaatsvindt.

Verificatie configureren voor RPC-communicatie voor MSDTC

MSDTC voor SQL Server in Linux gebruikt standaard geen verificatie voor RPC-communicatie. Wanneer de hostcomputer echter is gekoppeld aan een Active Directory-domein, kunt u MSDTC configureren voor het gebruik van geverifieerde RPC-communicatie met behulp van de volgende mssql-conf-instellingen :

Instelling Beschrijving
distributedtransaction.allowonlysecurerpccalls Configureer alleen veilige RPC-aanroepen voor gedistribueerde transacties. De standaardwaarde is 0.
distributedtransaction.fallbacktounsecurerpcifnecessary RPC-aanroepen voor gedistribueerde transacties alleen voor beveiliging configureren. De standaardwaarde is 0.
distributedtransaction.turnoffrpcsecurity RPC-beveiliging voor gedistribueerde transacties in- of uitschakelen. De standaardwaarde is 0.

Ondersteuning en compatibiliteit

Active Directory

Microsoft raadt aan MSDTC te gebruiken met RPC ingeschakeld als SQL Server is ingeschreven in een Active Directory-configuratie. Als u SQL Server configureert voor het gebruik van Active Directory-verificatie, gebruikt MSDTC standaard RPC-beveiliging voor wederzijdse verificatie.

Windows en Linux

Als een client op een Windows-besturingssysteem moet worden opgenomen in gedistribueerde transacties met SQL Server op Linux, moet deze de volgende minimale versie van het Windows-besturingssysteem hebben:

Besturingssysteem Minimale versie OS-versie
Windows Server- 1903 18362.30.190401-1528
Windows 10- 1903 18362.267