Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Si applica a:SQL Server - Linux
Questo articolo descrive come configurare Microsoft Distributed Transaction Coordinator (MSDTC) in Linux.
MSDTC in Linux è supportato in SQL Server 2017 (14.x) a partire dall'aggiornamento cumulativo 16 e versioni successive.
Panoramica
Per abilitare le transazioni distribuite in SQL Server su Linux, si utilizzano MSDTC e la funzionalità di mapping dell'endpoint RPC (Chiamata di Procedura Remota) all'interno di SQL Server. Per impostazione predefinita, un processo di mapping degli endpoint RPC ascolta sulla porta 135 le richieste RPC in ingresso e fornisce informazioni sui componenti registrati alle richieste remote. Le richieste remote possono usare le informazioni restituite dal mapper di endpoint per comunicare con i componenti RPC registrati, ad esempio i servizi MSDTC.
Un processo richiede privilegi avanzati per l'associazione a porte note (numeri di porta inferiori a 1024) in Linux. Per evitare di avviare SQL Server con privilegi radice per il processo di mapping degli endpoint RPC, gli amministratori di sistema devono usare iptables per creare la traduzione degli indirizzi di rete per instradare il traffico sulla porta 135 al processo di mapping degli endpoint RPC dell'istanza di SQL Server.
MSDTC usa due parametri di configurazione per l'utilità mssql-conf:
| Impostazione di mssql-conf | Descrizione |
|---|---|
network.rpcport |
Porta TCP cui si associa il processo di mapping degli endpoint RPC. |
distributedtransaction.servertcpport |
Porta su cui è in ascolto il server MSDTC. Se non è impostata, il servizio MSDTC usa una porta temporanea casuale ai riavvii del servizio ed è necessario riconfigurare le eccezioni del firewall per garantire che il servizio MSDTC possa continuare le comunicazioni. |
Per altre informazioni su queste impostazioni e altre impostazioni MSDTC correlate, vedere Configurare SQL Server in Linux con lo strumento mssql-conf.
Standard di transazione supportati
Sono supportate le configurazioni MSDTC seguenti:
| Standard di transazione | Origini dati | Driver ODBC | Driver JDBC |
|---|---|---|---|
| Transazioni OLE-TX | SQL Server in Linux | Sì | NO |
| Transazioni distribuite XA | SQL Server, altre origini dati ODBC e JDBC che supportano XA | Sì (richiede la versione 17.3 o successiva) | Sì |
| Transazioni distribuite nel server collegato | SQL Server | Sì | NO |
Per altre informazioni, vedere Informazioni sulle transazioni XA.
Passaggi di configurazione di MSDTC
Completare i tre passaggi seguenti per configurare la comunicazione e le funzionalità MSDTC per SQL Server.
- Configurare
network.rpcportedistributedtransaction.servertcpportcon mssql-conf. - Configurare il firewall per consentire la comunicazione su
distributedtransaction.servertcpporte sulla porta 135. - Configurare il routing del server Linux in modo che la comunicazione RPC sulla porta 135 venga reindirizzata all'istanza di
network.rpcportSQL Server.
Le sezioni seguenti includono istruzioni dettagliate per ogni passaggio.
Configurare le porte RPC e MSDTC
Configurare network.rpcport e distributedtransaction.servertcpport con mssql-conf. Questo passaggio è specifico di SQL Server e comune in tutte le distribuzioni supportate.
Usare mssql-conf per impostare il valore
network.rpcport. Nell'esempio seguente viene impostato il valore 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500Imposta il valore
distributedtransaction.servertcpport. Nell'esempio seguente viene impostato il valore 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Riavviare SQL Server.
sudo systemctl restart mssql-server
Configurare il firewall
Configurare il firewall per consentire la comunicazione su servertcpport e sulla porta 135. Questo passaggio consente al processo di mapping degli endpoint RPC e al processo MSDTC di comunicare esternamente ad altri gestori transazioni e coordinatori. La procedura effettiva varia a seconda della distribuzione e del firewall di Linux.
L'esempio seguente mostra come creare queste regole in 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
È importante configurare il firewall prima di configurare il routing delle porte nella sezione successiva. In alcuni casi, l'aggiornamento del firewall può cancellare le regole di routing delle porte.
Configurare il routing delle porte
Configurare la tabella di routing del server Linux in modo che la comunicazione RPC sulla porta 135 venga reindirizzata all'istanza di network.rpcportSQL Server. Il meccanismo di configurazione per il port forwarding può variare in diverse distribuzioni. Le sezioni seguenti forniscono indicazioni per Ubuntu, SUSE Enterprise Linux (SLES) e Red Hat Enterprise Linux (RHEL).
Ubuntu e SLES non usano il servizio firewall , quindi le regole iptables sono un meccanismo efficiente per ottenere il routing delle porte. Le regole iptables potrebbero non essere persistenti durante i riavvii, pertanto i comandi seguenti forniscono anche istruzioni per il ripristino delle regole dopo un riavvio.
Creare regole di routing per la porta 135. Nell'esempio seguente la porta 135 viene indirizzata alla porta RPC 13500 definita nella sezione precedente. Sostituire
<ipaddress>con l'indirizzo IP del 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 RpcEndPointMapperIl
--comment RpcEndPointMapperparametro nei comandi precedenti consente di gestire queste regole nei comandi successivi.Visualizzare le regole di routing create con il comando seguente:
sudo iptables -S -t nat | grep "RpcEndPointMapper"Salvare le regole di routing in un file nel computer.
sudo iptables-save > /etc/iptables.confPer ricaricare le regole dopo un riavvio, aggiungere il comando seguente a
/etc/rc.local(per Ubuntu) o a/etc/init.d/after.local(per SLES):iptables-restore < /etc/iptables.confNota
Per modificare i file
rc.localoafter.local, è necessario disporre di privilegi avanzati (sudo).
I iptables-save comandi eiptables-restore, insieme allarc.local/after.localconfigurazione di avvio, forniscono un meccanismo di base per salvare e ripristinare le voci di iptable. A seconda della distribuzione Linux potrebbero essere disponibili opzioni più avanzate o automatizzate. Ad esempio, un'alternativa ad Ubuntu è il pacchetto iptables-persistent per rendere persistenti le voci.
I passaggi precedenti presuppongono un indirizzo IP fisso. Se l'indirizzo IP per l'istanza di SQL Server cambia (a causa dell'intervento manuale o DHCP), è necessario rimuovere e ricreare le regole di routing se sono state create con iptable. Se è necessario ricreare o eliminare regole di routing esistenti, usare il comando seguente per rimuovere le regole precedenti RpcEndPointMapper :
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Verificare
A questo punto, SQL Server dovrebbe essere in grado di partecipare alle transazioni distribuite. Per verificare che SQL Server sia in ascolto, eseguire il comando netstat . Se si usa RHEL, potrebbe essere necessario prima installare il pacchetto net-tools :
sudo netstat -tulpn | grep sqlservr
L'output dovrebbe essere simile all'esempio seguente:
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
Tuttavia, dopo un riavvio, SQL Server non inizia l'ascolto su servertcpport fino alla prima transazione distribuita. In questo caso, SQL Server non sarà in ascolto sulla porta 51999 fino alla prima transazione distribuita.
Configurare l'autenticazione per le comunicazioni RPC per MSDTC
MSDTC per SQL Server in Linux non usa l'autenticazione per le comunicazioni RPC per impostazione predefinita. Tuttavia, quando il computer host viene aggiunto a un dominio di Active Directory, è possibile configurare MSDTC per l'uso delle comunicazioni RPC autenticate usando le impostazioni mssql-conf seguenti:
| Impostazione | Descrizione |
|---|---|
distributedtransaction.allowonlysecurerpccalls |
Configurare solo chiamate RPC protette per le transazioni distribuite. Il valore predefinito è 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Configurare la sicurezza delle sole chiamate RPC per le transazioni distribuite. Il valore predefinito è 0. |
distributedtransaction.turnoffrpcsecurity |
Abilitare o disabilitare la sicurezza RPC per le transazioni distribuite. Il valore predefinito è 0. |
Supporto e compatibilità
Active Directory
Microsoft consiglia di usare MSDTC con RPC abilitato se SQL Server è registrato in una configurazione di Active Directory. Se si configura SQL Server per l'uso dell'autenticazione di Active Directory, MSDTC usa la sicurezza RPC di autenticazione reciproca per impostazione predefinita.
Windows e Linux
Se un client in un sistema operativo Windows deve integrarsi in una transazione distribuita con SQL Server in Linux, deve avere la versione minima del sistema operativo Windows seguente:
| Sistema operativo | Versione minima | Build del sistema operativo |
|---|---|---|
| Windows Server | 1903 | 18362.30.190401-1528 |
| Windows 10 | 1903 | 18362.267 |