Lezen in het Engels

Delen via


De Microsoft Distributed Transaction Coordinator (MSDTC) configureren in Linux

van toepassing op:SQL Server- - 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

Gedistribueerde transacties zijn ingeschakeld op SQL Server op Linux 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 netwerkadresomzetting te maken om verkeer op poort 135 te routeren naar het RPC-eindpunttoewijzingsproces van SQL Server.

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 versie 17.3 of hoger) Ja
gedistribueerde transacties op gekoppelde server SQL Server Ja Nee

Zie Understanding XA Transactionsvoor meer informatie.

MSDTC-configuratiestappen

Er zijn drie stappen voor het configureren van MSDTC-communicatie en -functionaliteit. Als de benodigde configuratiestappen niet worden uitgevoerd, schakelt SQL Server de MSDTC-functionaliteit niet in.

  • Configureer network.rpcport en distributedtransaction.servertcpport met behulp van mssql-conf-.
  • Configureer de firewall om communicatie op distributedtransaction.servertcpport en poort 135 toe te staan.
  • Configureer Routering van Linux-servers zodat RPC-communicatie op poort 135 wordt omgeleid naar de network.rpcportvan SQL Server.

De volgende secties bevatten gedetailleerde instructies voor elke stap.

RPC- en MSDTC-poorten configureren

Configureer eerst network.rpcport en distributedtransaction.servertcpport met behulp van 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.

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

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

    Bash
    sudo systemctl restart mssql-server
    

De firewall configureren

De tweede stap is het configureren van de firewall om communicatie op servertcpport en poort 135 toe te staan. Hierdoor kunnen het RPC-proces voor eindpunttoewijzing en het MSDTC-proces extern communiceren met andere transactiemanagers en coördinatoren. De werkelijke stappen hiervoor variëren, afhankelijk van uw Linux-distributie en firewall.

In het volgende voorbeeld ziet u hoe u deze regels maakt op Ubuntu-.

Bash
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

In het volgende voorbeeld ziet u hoe dit kan worden gedaan op Red Hat Enterprise Linux (RHEL):

Bash
sudo firewall-cmd --zone=public --add-port=51999/tcp --permanent
sudo firewall-cmd --zone=public --add-port=135/tcp --permanent
sudo firewall-cmd --reload

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 network.rpcportvan SQL Server. Het configuratiemechanisme voor het doorsturen van poorten op verschillende distributies kan verschillen. De volgende secties bevatten richtlijnen voor Ubuntu, SUS Enterprise Linux (SLES) en Red Hat Enterprise Linux (RHEL).

Poortenroutering in Ubuntu en SLES

Ubuntu en SLES gebruiken de -service niet, dus iptable regels zijn een efficiënt mechanisme om poortroutering te bereiken. De iptable--regels blijven mogelijk niet behouden tijdens het opnieuw opstarten. De volgende opdrachten bevatten dus ook instructies voor het herstellen van de regels na het 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.

    Bash
    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 parameter --comment RpcEndPointMapper in de vorige opdrachten helpt bij het beheren van deze regels in latere opdrachten.

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

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

    Bash
    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):

    Bash
    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, samen met rc.local/after.local opstartconfiguratie, bieden 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 ze zijn gemaakt met iptables. Als u bestaande routeringsregels opnieuw wilt maken of verwijderen, kunt u de volgende opdracht gebruiken om oude RpcEndPointMapper regels te verwijderen:

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

Poortenroutering in RHEL

Voor distributies die gebruikmaken van de firewalld-service, zoals Red Hat Enterprise Linux, kan dezelfde service worden gebruikt voor zowel het openen van poorten op de server als het doorsturen van interne poorten. In Red Hat Enterprise Linux moet u bijvoorbeeld firewall--service (via firewall-cmd configuratiehulpprogramma met -add-forward-port of vergelijkbare opties) gebruiken om permanente regels voor doorsturen van poorten te maken en te beheren in plaats van iptables te gebruiken.

Bash
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload

Verifiëren

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

Bash
sudo netstat -tulpn | grep sqlservr

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

Bash
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 lid is van een Active Directory-domein, is het mogelijk MSDTC te 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.

Aanvullende richtlijnen

Active Directory

Microsoft raadt aan MSDTC te gebruiken met RPC ingeschakeld als SQL Server is ingeschreven bij een Active Directory-configuratie. Als SQL Server is geconfigureerd 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 Build van besturingssysteem
Windows Server- 1903 18362.30.190401-1528
Windows 10- 1903 18362.267