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

S’applique à : OuiSQL Server (Linux uniquement) aucunbase de données SQL Azure aucunAzure SQL Data Warehouse aucuneparallèles Entrepôt de données APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Cet article décrit comment configurer Microsoft Distributed Transaction Coordinator (MSTDC) sur Linux.This article describes how to configure the Microsoft Distributed Transaction Coordinator (MSTDC) on Linux. Prise en charge MSDTC sur Linux a été introduite dans la version préliminaire de SQL Server 2019.MSDTC support on Linux was introduced in SQL Server 2019 preview.

Vue d'ensembleOverview

Les transactions distribuées sont activées sur SQL Server sur Linux en introduisant des fonctionnalités de mappeur de point de terminaison 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 de point de terminaison RPC est à l’écoute sur le port 135 pour les demandes RPC entrantes et qui achemine vers les composants appropriés (par exemple, le service MSDTC).By default, an RPC endpoint-mapping process listens on port 135 for incoming RPC requests and routes that to appropriate components (such as the MSDTC service). Un processus nécessite des privilèges de super utilisateur pour lier les ports connus (numéros de port inférieurs à 1024) sur Linux.A process requires super user privilege to bind to well-known ports (port numbers less than 1024) on Linux. Pour éviter le démarrage de SQL Server avec des privilèges racine pour le processus de mappeur de point de terminaison RPC, les administrateurs système doivent utiliser iptables pour créer la traduction NAT pour acheminer le trafic sur le port 135 au processus de mappage de point de terminaison RPC du serveur SQL.To avoid starting SQL Server with root privileges for the RPC endpoint mapper process, system administrators must use iptables to create NAT translation to route traffic on port 135 to SQL Server's RPC endpoint-mapping process.

SQL Server 2019 introduit deux paramètres de configuration pour l’utilitaire mssql-conf.SQL Server 2019 introduces two configuration parameters for the mssql-conf utility.

paramètre de MSSQL-confmssql-conf setting DescriptionDescription
Network.rpcportnetwork.rpcport Le port TCP utilisé par le processus de mappeur de point de terminaison RPC lie à.The TCP port that the RPC endpoint mapper process binds to.
Network.servertcpportnetwork.servertcpport Le port qui écoute le serveur MSDTC.The port that the MSDTC server listens to. Si ce n’est pas définie, le service MS DTC utilise un port éphémère aléatoire sur les redémarrages du service, et les exceptions de pare-feu devra être reconfigurées pour s’assurer que service MSDTC peut poursuivre la communication.If not set, the MSDTC service uses a random ephemeral port on service restarts, and firewall exceptions will need to be re-configured to ensure that MSDTC service can continue communication.

Pour plus d’informations sur ces paramètres et d’autres paramètres de MSDTC connexes, consultez 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 prises en charge de MSDTCSupported MSDTC configurations

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

  • OLE-TX transactions distribuées par rapport à SQL Server sur Linux pour les fournisseurs JDBC et ODBC.OLE-TX Distributed transactions against SQL Server on Linux for JDBC and ODBC providers.
  • Transactions distribuées XA sont définies par rapport à SQL Server sur Linux à l’aide de fournisseurs JDBC.XA Distributed transactions against SQL Server on Linux using JDBC providers.
  • Transactions distribuées sur le serveur lié.Distributed transactions on Linked server.

Pour les limitations et problèmes connus pour MSDTC en version préliminaire, consultez notes de version préliminaire de SQL Server 2019 sur Linux.For limitations and known issues for MSDTC in preview, see Release notes for SQL Server 2019 preview on Linux.

Étapes de configuration de MSDTCMSDTC configuration steps

Il existe trois étapes pour configurer les fonctionnalités et communication de 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’active pas la fonctionnalité MSDTC.If the necessary configuration steps are not done, SQL Server will not enable MSDTC functionality.

  • Configurer network.rpcport et distributedtransaction.servertcpport à l’aide de mssql-conf.Configure network.rpcport and distributedtransaction.servertcpport using mssql-conf.
  • Configurer le pare-feu pour autoriser la communication sur rpcport, servertcpportet le port 135.Configure the firewall to allow communication on rpcport, servertcpport, and port 135.
  • Configurer le routage de serveur Linux afin que la communication RPC sur le port 135 est redirigée vers SQL Server network.rpcport.Configure Linux server routing so that RPC communication on port 135 is redirected to SQL Server's network.rpcport.

Les sections suivantes fournissent des instructions détaillées pour chaque étape.The following sections provide detailed instructions for each step.

Configurer les ports RPC et MSDTCConfigure RPC and MSDTC ports

Tout d’abord, configurez network.rpcport et distributedtransaction.servertcpport à l’aide de mssql-conf.First, configure network.rpcport and distributedtransaction.servertcpport using mssql-conf.

  1. Mssql-conf permet de définir le network.rpcport valeur.Use mssql-conf to set the network.rpcport value. L’exemple suivant définit à 13500.The following example sets it to 13500.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. Définir le distributedtransaction.servertcpport valeur.Set the distributedtransaction.servertcpport value. L’exemple suivant définit à 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

L’étape finale consiste à configurer le pare-feu pour autoriser la communication sur rpcport, servertcpportet le port 135.The final step is to configure the firewall to allow communication on rpcport, servertcpport, and port 135. Ainsi, le processus MSDTC pour communiquer avec l’extérieur vers d’autres gestionnaires de transactions et les coordinateurs et le processus de mappage de point de terminaison RPC.This enables the RPC endpoint-mapping process and MSDTC process to communicate externally to other transaction managers and coordinators. Les étapes réelles pour cela varie selon votre distribution Linux et le 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 cela peut être fait 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 de port 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 de port dans certains cas.Refreshing the firewall can clear the port routing rules in some cases.

Configurer le routage de portConfigure port routing

Configurer la table de routage du serveur Linux afin que la communication RPC sur le port 135 est redirigée vers SQL Server network.rpcport.Configure the Linux server routing table so that RPC communication on port 135 is redirected to SQL Server's network.rpcport. Mécanisme de configuration de distribution différente de réacheminement de port peut différer.Configuration mechanism for port forwarding on different distribution may differ. Dans les distributions qui n’utilisent pas de service de firewalld, de règles d’iptable sont un mécanisme efficace pour y parvenir.On distributions which do not use firewalld service, iptable rules are an efficient mechanism to achieve this. Exemples de ce type distrubution : Ubuntu 16.04 et SUSE Enterprise Linux v12.Example of such distrubution are Ubuntu 16.04 and SUSE Enterprise Linux v12. Les règles d’iptable ne sont pas persistant au cours des redémarrages, les commandes suivantes fournissent également des instructions permettant de 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éer 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> avec l’adresse IP de votre serveur.Replace <ipaddress> with the IP address of your server.

    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
    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 --comment RpcEndPointMapper paramètre dans les 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. Afficher les règles de routage que vous avez créé avec la commande suivante :View the routing rules you created with the following command:

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

    iptables-save > /etc/iptables.conf
    
  4. Pour recharger les règles après un redémarrage, ajoutez la commande suivante pour /etc/rc.local (pour Ubuntu or RHEL) 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 RHEL) or to /etc/init.d/after.local (for SLES):

    iptables-restore < /etc/iptables.conf
    

Le iptables-enregistrer et iptables-restauration commandes fournissent un mécanisme de base pour enregistrer et restaurer les entrées de tables d’adresses IP.The iptables-save and iptables-restore commands provide a basic mechanism to save and restore iptables entries. En fonction de votre distribution Linux, il peut être plus avancée ou automatisée des options disponibles.Depending on your Linux distribution, there might be more advanced or automated options available. Par exemple, une alternative Ubuntu est la iptables persistant package pour effectuer des entrées persistant.For example, an Ubuntu alternative is the iptables-persistent package to make entries persistent.

Sur les distributions qui utilisent firewalld service, le même service peut être utilisé pour les deux ouvrant le port sur le serveur et le réacheminement de port interne.On distributions which use firewalld service, the same service can be used for both opening the port on the server and internal port forwarding. Par exemple, vous devez utiliser sur Red Hat Enterprise Linux, le service de firewalld (via l’utilitaire de configuration de pare-feu-cmd avec - Ajouter-progression-port ou des options similaires) pour créer et gérer des règles au lieu d’utiliser iptables de réacheminement de port persistant.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.

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

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 (en raison d’une intervention manuelle ou DHCP), vous devez supprimer et recréer les règles de routage si elles ont été créées avec iptables.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 avez besoin de recréer ni de supprimer des règles de routage existantes, vous pouvez utiliser la commande suivante pour supprimer l’ancien RpcEndPointMapper règles :If you need to recreate or delete existing routing rules, you can use the following command to remove old RpcEndPointMapper rules:

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

VérifierVerify

À ce stade, SQL Server doit ê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 le netstat commande (si vous utilisez RHEL, vous devrez d’abord installer le net-tools package) :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 voir une sortie similaire à ce qui suit :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

Toutefois, après un redémarrage, SQL Server ne démarre pas à l’écoute sur le servertcpport jusqu'à ce que le premier de 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 verriez pas SQL Server écoute sur le port 51999 dans cet exemple, jusqu'à ce que 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.

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