gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste SQL-, Fabric- en Power BI-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
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.
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.
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.
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.
network.rpcport
en distributedtransaction.servertcpport
met behulp van mssql-conf-.distributedtransaction.servertcpport
en poort 135 toe te staan.network.rpcport
van SQL Server.De volgende secties bevatten gedetailleerde instructies voor elke stap.
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.
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
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
Start SQL Server opnieuw op.
sudo systemctl restart mssql-server
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-.
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):
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.
Configureer de routeringstabel van de Linux-server zodat RPC-communicatie op poort 135 wordt omgeleid naar de network.rpcport
van 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).
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.
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 parameter --comment RpcEndPointMapper
in de vorige opdrachten helpt 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.conf
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, 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:
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
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.
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload
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):
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.
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. |
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.
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 |
gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste SQL-, Fabric- en Power BI-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertTraining
Leertraject
SQL Server voor Linux - Training
SQL Server kan nu worden uitgevoerd op het besturingssysteem van uw keuze. In dit leertraject ontdekt u de grondbeginselen van SQL Server in Linux voordat u ontdekt hoe u SQL Server uitvoert op Linux-containers en SQL Server implementeert in Linux. Vervolgens leert u hoe u uw SQL Server in Linux-implementatie automatisch kunt afstemmen.
Certificering
Microsoft Certified: Azure Database Administrator Associate - Certifications
Beheer een SQL Server-databaseinfrastructuur voor cloud-, on-premises en hybride relationele databases met behulp van de relationele Microsoft PaaS-databaseaanbiedingen.