Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.rpcportendistributedtransaction.servertcpportmet mssql-conf. - Configureer de firewall om communicatie op
distributedtransaction.servertcpporten 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.
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 13500Stel de
distributedtransaction.servertcpport-waarde in. In het volgende voorbeeld wordt dit ingesteld op 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Start 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.
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 RpcEndPointMapperDe
--comment RpcEndPointMapperparameter in de vorige opdrachten helpt u bij het beheren van deze regels in latere opdrachten.Bekijk de routeringsregels die u hebt gemaakt met de volgende opdracht:
sudo iptables -S -t nat | grep "RpcEndPointMapper"Sla de routeringsregels op uw computer op.
sudo iptables-save > /etc/iptables.confAls 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.confNotitie
U moet supergebruikersbevoegdheden (sudo) hebben om de
rc.local- ofafter.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 |