Configurer Microsoft Distributed Transaction Coordinator (MSDTC) sur LinuxHow to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux

S’APPLIQUE À : ouiSQL Server (Linux uniquement) nonAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Cet article explique comment configurer Microsoft Distributed Transaction Coordinator (MSDTC) sur Linux.This article describes how to configure the Microsoft Distributed Transaction Coordinator (MSDTC) on Linux.

Notes

MSDTC sur Linux est pris en charge sur SQL Server 2017 à compter de la mise à jour cumulative 16.MSDTC on Linux is supported on SQL Server 2017 starting with cumulative update 16.

Vue d’ensembleOverview

Les transactions distribuées sont activées pour SQL Server sur Linux en introduisant la fonctionnalité MSDTC et RPC dans SQL Server.Distributed transactions are enabled on SQL Server on Linux by introducing MSDTC and RPC endpoint mapper functionality within SQL Server. Par défaut, un processus de mappage des points de terminaison RPC écoute sur le port 135 les requêtes RPC entrantes, et fournit aux requêtes distantes des informations sur les composants enregistrés.By default, an RPC endpoint-mapping process listens on port 135 for incoming RPC requests and provides registered components information to remote requests. Les requêtes à distance peuvent utiliser les informations renvoyées par le mappeur de points de terminaison afin de communiquer avec les composants RPC enregistrés, par exemple les services MSDTC.Remote requests can use the information returned by endpoint mapper to communicate with registered RPC components, such as MSDTC services. Un processus nécessite des privilèges de super utilisateur pour se lier à des ports bien connus (numéros de port inférieurs à 1024) sur Linux.A process requires super user privileges to bind to well-known ports (port numbers less than 1024) on Linux. Afin d’éviter de démarrer SQL Server avec les privilèges root pour le processus de mappage des points de terminaison RPC, les administrateurs système doivent utiliser des règles iptable et créer la conversion d'adresses réseau afin de router le trafic sur le port 135 vers le processus de mappage des points de terminaison RPC de SQL Server.To avoid starting SQL Server with root privileges for the RPC endpoint mapper process, system administrators must use iptables to create Network Address Translation to route traffic on port 135 to SQL Server's RPC endpoint-mapping process.

MSDTC utilise deux paramètres de configuration pour l'utilitaire mssql-conf :MSDTC uses two configuration parameters for the mssql-conf utility:

paramaètre mssql-confmssql-conf setting DescriptionDescription
network.rpcportnetwork.rpcport Le port TCP auquel se lie le processus de mappage de points de terminaison RPC.The TCP port that the RPC endpoint mapper process binds to.
distributedtransaction.servertcpportdistributedtransaction.servertcpport Le port sur lequel le serveur MSDTC écoute.The port that the MSDTC server listens to. S'il n’est pas configuré, le service MSDTC utilise un port éphémère aléatoire au redémarrage du service, et les exceptions du pare-feu devront être reconfigurées pour garantir que le service MSDTC continue à communiquer.If not set, the MSDTC service uses a random ephemeral port on service restarts, and firewall exceptions will need to be reconfigured to ensure that MSDTC service can continue communication.

Pour plus d'informations sur ces paramètres et d'autres paramètres MSDTC connexes, voir Configurer SQL Server sur Linux avec l'outil mssql-conf.For more information about these settings and other related MSDTC settings, see Configure SQL Server on Linux with the mssql-conf tool.

Configurations MSDTC prises en chargeSupported MSDTC configurations

Les configurations MSDTC prises en charge sont les suivantes :The following MSDTC configurations are supported:

  • Transactions distribuées OLE-TX avec SQL Server sur Linux pour les fournisseurs ODBC.OLE-TX Distributed transactions against SQL Server on Linux for ODBC providers.

  • Transactions distribuées XA avec SQL Server sur Linux en utilisant des fournisseurs JDBC et ODBC.XA Distributed transactions against SQL Server on Linux using JDBC and ODBC providers. Pour les transactions XA à effectuer à l'aide du fournisseur ODBC, vous devez utiliser Microsoft ODBC Driver for SQL Server version 17.3 ou supérieure.For XA transactions to be performed using ODBC provider, you need to use Microsoft ODBC Driver for SQL Server version 17.3 or higher. Pour plus d'informations, consultez Compréhension des transactions XA.For more information, see Understanding XA Transactions.

  • Transactions distribuées sur le serveur Linked.Distributed transactions on Linked server.

Étapes de configuration MSDTCMSDTC configuration steps

Il existe trois étapes pour configurer la communication et la fonctionnalité MSDTC.There are three steps to configure MSDTC communication and functionality. Si les étapes de configuration nécessaires ne sont pas effectuées, SQL Server n'activera pas la fonctionnalité MSDTC.If the necessary configuration steps are not done, SQL Server will not enable MSDTC functionality.

  • Configurez network.rpcport et distributedtransaction.servertcpport avec mssql-conf.Configure network.rpcport and distributedtransaction.servertcpport using mssql-conf.
  • Configurez le pare-feu pour autoriser la communication sur distributedtransaction.servertcpport et le port 135.Configure the firewall to allow communication on distributedtransaction.servertcpport and port 135.
  • Configurez le routage du serveur Linux pour que la communication RPC sur le port 135 soit redirigée vers network.rpcport sur SQL Server.Configure Linux server routing so that RPC communication on port 135 is redirected to SQL Server's network.rpcport.

Les sections qui suivent fournissent des informations détaillées sur chaque étape.The following sections provide detailed instructions for each step.

Configurer les ports RPC et MSDTCConfigure RPC and MSDTC ports

Configurez d’abord network.rpcport et distributedtransaction.servertcpport avec mssql-conf.First, configure network.rpcport and distributedtransaction.servertcpport using mssql-conf. Cette étape est spécifique à SQL Server et commune à toutes les distributions prises en charge.This step if specific to SQL Server and common across all supported distributions.

  1. Utilisez mssql-conf pour définir la valeur network.rpcport.Use mssql-conf to set the network.rpcport value. L'exemple suivant utilise la valeur 13500.The following example sets it to 13500.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. Définissez la valeur distributedtransaction.servertcpport.Set the distributedtransaction.servertcpport value. L'exemple suivant utilise la valeur 51999.The following example sets it to 51999.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. Redémarrez SQL Server.Restart SQL Server.

    sudo systemctl restart mssql-server
    

Configurer le pare-feuConfigure the firewall

La deuxième étape consiste à configurer le pare-feu pour autoriser la communication sur servertcpport et le port 135.The second step is to configure the firewall to allow communication on servertcpport and port 135. Cela permet au processus de mappage des points de terminaison RPC et au processus MSDTC de communiquer de façon externe avec d'autres gestionnaires et coordonnateurs de transactions.This enables the RPC endpoint-mapping process and MSDTC process to communicate externally to other transaction managers and coordinators. Les étapes réelles de cette opération varient selon votre distribution Linux et votre pare-feu.The actual steps for this will vary depending on your Linux distribution and firewall.

L’exemple suivant montre comment créer ces règles sur Ubuntu.The following example shows how to create these rules on Ubuntu.

sudo ufw allow from any to any port 51999 proto tcp
sudo ufw allow from any to any port 135 proto tcp

L’exemple suivant montre comment effectuer cette opération sur Red Hat Enterprise Linux (RHEL) :The following example shows how this could be done on 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

Il est important de configurer le pare-feu avant de configurer le routage des ports dans la section suivante.It is important to configure the firewall before configuring port routing in the next section. L’actualisation du pare-feu peut effacer les règles de routage des ports dans certains cas.Refreshing the firewall can clear the port routing rules in some cases.

Configurer le routage du portConfigure port routing

Configurez la table de routage du serveur Linux pour que la communication RPC sur le port 135 soit redirigée vers network.rpcport sur SQL Server.Configure the Linux server routing table so that RPC communication on port 135 is redirected to SQL Server's network.rpcport. Le mécanisme de configuration pour le transfert de port sur une autre distribution peut varier.Configuration mechanism for port forwarding on different distribution may differ. Les sections suivantes fournissent des conseils pour Ubuntu, SUS Enterprise Linux (SLES) et Red Hat Enterprise Linux (RHEL).The following sections provide guidance for Ubuntu, SUS Enterprise Linux (SLES), and Red Hat Enterprise Linux (RHEL).

Routage de port dans Ubuntu et SLESPort routing in Ubuntu and SLES

Ubuntu et SLES n'utilisent pas le service firewalld, les règles iptable constituent donc un mécanisme efficace pour le routage des ports.Ubuntu and SLES do not use the firewalld service, so iptable rules are an efficient mechanism to achieve port routing. Comme les règles iptable peuvent ne pas persister pendant le redémarrage, les commandes suivantes fournissent également des instructions pour restaurer les règles après un redémarrage.The iptable rules may not persist during reboots, so the following commands also provide instructions for restoring the rules after a reboot.

  1. Créez des règles de routage pour le port 135.Create routing rules for port 135. Dans l'exemple suivant, le port 135 est dirigé vers le port RPC, 13500, défini dans la section précédente.In the following example, port 135 is directed to the RPC port, 13500, defined in the previous section. Remplacez <ipaddress> par l'adresse IP de votre serveur.Replace <ipaddress> with the IP address of your 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
    

    Le paramètre --comment RpcEndPointMapper des commandes précédentes facilite la gestion de ces règles dans les commandes ultérieures.The --comment RpcEndPointMapper parameter in the previous commands assists with managing these rules in later commands.

  2. Affichez les règles de routage que vous avez créées avec la commande suivante :View the routing rules you created with the following command:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Enregistrez les règles de routage dans un fichier sur votre machine.Save the routing rules to a file on your machine.

    sudo iptables-save > /etc/iptables.conf
    
  4. Pour recharger les règles après un redémarrage, ajoutez la commande suivante à /etc/rc.local (pour Ubuntu) ou à /etc/init.d/after.local (pour SLES) :To reload the rules after a reboot, add the following command to /etc/rc.local (for Ubuntu) or to /etc/init.d/after.local (for SLES):

    iptables-restore < /etc/iptables.conf
    

    Notes

    Vous devez disposer de privilèges super utilisateur (sudo) pour modifier les fichiers rc.local ou après.local.You must have super user (sudo) privileges to edit the rc.local or after.local files.

Les commandes iptables-save et iptables-restore, ainsi que la configuration de démarrage rc.local/after.local fournissent un mécanisme de base pour sauvegarder et restaurer les entrées iptables.The iptables-save and iptables-restore commands, along with rc.local/after.local startup configuration, provide a basic mechanism to save and restore iptables entries. Votre distribution Linux peut inclure des options plus avancées ou automatisées.Depending on your Linux distribution, there might be more advanced or automated options available. Par exemple, une alternative Ubuntu est le package iptables-persistent qui rend les entrées persistantes.For example, an Ubuntu alternative is the iptables-persistent package to make entries persistent.

Important

Les étapes précédentes supposent une adresse IP fixe.The previous steps assume a fixed IP address. Si l'adresse IP de votre instance SQL Server change (suite à une intervention manuelle ou DHCP), vous devez supprimer et recréer les règles de routage si elles ont été créées avec des règles iptable.If the IP address for your SQL Server instance changes (due to manual intervention or DHCP), you must remove and recreate the routing rules if they were created with iptables. Si vous devez recréer ou supprimer des règles de routage existantes, vous pouvez utiliser la commande suivante pour supprimer les anciennes règles RpcEndPointMapper :If you need to recreate or delete existing routing rules, you can use the following command to remove old RpcEndPointMapper rules:

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

Routage de port dans RHELPort routing in RHEL

Sur les distributions qui utilisent le service firewalld, comme Red Hat Enterprise Linux, le même service peut être utilisé pour ouvrir le port sur le serveur et pour le transfert de port interne.On distributions that use firewalld service, such as Red Hat Enterprise Linux, the same service can be used for both opening the port on the server and internal port forwarding. Par exemple, sur Red Hat Enterprise Linux, vous devez utiliser le service firewalld (via l’utilitaire de configuration firewall-cmd avec -add-forward-port ou des options similaires) pour créer et gérer des règles de redirection de ports persistantes au lieu d'utiliser des règles iptable.For example, on Red Hat Enterprise Linux, you should use firewalld service (via firewall-cmd configuration utility with -add-forward-port or similar options) to create and manage persistent port forwarding rules instead of using iptables.

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

VérifierVerify

À ce stade, SQL Server devrait être en mesure de participer aux transactions distribuées.At this point, SQL Server should be able to participate in distributed transactions. Pour vérifier que SQL Server est à l'écoute, exécutez la commande netstat (si vous utilisez RHEL, vous devrez peut-être d'abord installer le package net-tools) :To verify that SQL Server is listening, run the netstat command (if you are using RHEL, you might have to first install the net-tools package):

sudo netstat -tulpn | grep sqlservr

Vous devez obtenir une sortie similaire à la suivante :You should see output similar to the following:

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

Cependant, après un redémarrage, SQL Server ne commence pas à écouter sur servertcpport avant la première transaction distribuée.However, after a restart, SQL Server does not start listening on the servertcpport until the first distributed transaction. Dans ce cas, vous ne verrez pas SQL Server écouter sur le port 51999 dans cet exemple jusqu'à la première transaction distribuée.In this case, you would not see SQL Server listening on port 51999 in this example until the first distributed transaction.

Configurer l'authentification sur la communication RPC pour MSDTCConfigure authentication on RPC communication for MSDTC

MSDTC pour SQL Server sur Linux n'utilise pas l'authentification sur la communication RPC par défaut.MSDTC for SQL Server on Linux does not use authentication on RPC communication by default. Cependant, lorsque la machine hôte est connectée à un domaine Active Directory (AD), il est possible de configurer MSDTC pour utiliser une communication RPC authentifiée à l’aide des paramètres mssql-conf suivants :However, when the host machine is joined to an Active Directory (AD) domain, it is possible to configure MSDTC to use authenticated RPC communication using following mssql-conf settings:

ParamètreSetting DescriptionDescription
distributedtransaction.allowonlysecurerpccallsdistributedtransaction.allowonlysecurerpccalls Configurer les appels sécurisés RPC pour les transactions distribuées.Configure secure only RPC calls for distributed transactions. La valeur par défaut est 0.Default value is 0.
distributedtransaction.fallbacktounsecurerpcifnecessarydistributedtransaction.fallbacktounsecurerpcifnecessary Configurer les appels de sécurité RPC pour les transactions distribuées.Configure security only RPC calls for distributed transactions. La valeur par défaut est 0.Default value is 0.
distributedtransaction.turnoffrpcsecuritydistributedtransaction.turnoffrpcsecurity Activer ou désactiver la sécurité RPC pour les transactions distribuées.Enable or disable RPC security for distributed transactions. La valeur par défaut est 0.Default value is 0.

Conseils supplémentairesAdditional guidance

Active DirectoryActive directory

Microsoft recommande d’utiliser MSDTC avec RPC activé si SQL Server est inscrit dans une configuration Active Directory (AD).Microsoft recommends using MSDTC with RPC enabled if SQL Server is enrolled into an Active Directory (AD) configuration. Si SQL Server est configuré pour utiliser l’authentification AD, MSDTC utilise la sécurité RPC de l’authentification mutuelle par défaut.If SQL Server is configured to use AD authentication, MSDTC uses mutual authentication RPC security by default.

Windows et LinuxWindows and Linux

Si un client sur un système d’exploitation Windows doit s’inscrire dans une transaction distribuée avec SQL Server sur Linux, il doit avoir installé la version minimale suivante du système d’exploitation Windows :If a client on a Windows operating system needs to enlist into distributed transaction with SQL Server on Linux, it must have the following minimum version of Windows operating system:

Système d’exploitationOperating system Version minimaleMinimum version Version du système d'exploitationOS Build
Windows ServerWindows Server 19031903 18362.30.190401-152818362.30.190401-1528
Windows 10Windows 10 19031903 18362.26718362.267

Étapes suivantesNext steps

Pour plus d’informations sur SQL Server sur Linux, consultez SQL Server sur Linux.For more information about SQL Server on Linux, see SQL Server on Linux.