Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :SQL Server sur Linux
Cet article explique comment configurer Microsoft Distributed Transaction Coordinator (MSDTC) sur Linux.
MSDTC sur Linux est pris en charge par la mise à jour cumulative 16 et les versions ultérieures de SQL Server 2017 (14.x).
Vue d’ensemble
Vous activez les transactions distribuées sur SQL Server sur Linux en introduisant la fonctionnalité de mappeur de point de terminaison MSDTC et d’appel de procédure distante (RPC) dans 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. 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.
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. Pour éviter de démarrer SQL Server en tant que processus avec des privilèges racines pour le mappeur de point de terminaison RPC, les administrateurs système doivent utiliser iptables pour créer une traduction d'adresses IP afin de router le trafic sur le port 135 vers le processus de mappage de point de terminaison RPC de l'instance de SQL Server.
MSDTC utilise deux paramètres de configuration pour l'utilitaire mssql-conf :
| Paramètre mssql-conf | Descriptif |
|---|---|
network.rpcport |
Le port TCP auquel se lie le processus mappeur des points de terminaison RPC. |
distributedtransaction.servertcpport |
Le port sur lequel le serveur MSDTC écoute. 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 doivent être reconfigurées pour garantir que le service MSDTC continue à communiquer. |
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.
Normes de transaction prises en charge
Les configurations MSDTC prises en charge sont les suivantes :
| Norme de transaction | Sources de données | Pilote ODBC | Pilote JDBC |
|---|---|---|---|
| Transactions OLE-TX | SQL Server sur Linux | Oui | Non |
| Transactions distribuées XA | SQL Server, autres bases de données ODBC et sources de données JDBC qui prennent en charge XA | Oui (nécessite la version 17.3 ou ultérieure) | Oui |
| Transactions distribuées sur le serveur lié | SQL Server | Oui | Non |
Pour plus d'informations, consultez Compréhension des transactions XA.
Étapes de configuration MSDTC
Effectuez les trois étapes suivantes pour configurer la communication et les fonctionnalités MSDTC pour SQL Server.
- Configurez
network.rpcportetdistributedtransaction.servertcpportutilisez mssql-conf. - Configurez le pare-feu pour autoriser la communication sur
distributedtransaction.servertcpportet le port 135. - Configurez le routage du serveur Linux afin que la communication RPC sur le port 135 soit redirigée vers l’instance de
network.rpcportSQL Server.
Les sections qui suivent fournissent des informations détaillées sur chaque étape.
Configurer les ports RPC et MSDTC
Configurez network.rpcport et distributedtransaction.servertcpport utilisez mssql-conf. Cette étape est spécifique à SQL Server et commune à toutes les distributions prises en charge.
Utilisez mssql-conf pour définir la valeur
network.rpcport. L'exemple suivant utilise la valeur 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500Définissez la valeur
distributedtransaction.servertcpport. L'exemple suivant utilise la valeur 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Redémarrez SQL Server.
sudo systemctl restart mssql-server
Configurer le pare-feu
Configurez le pare-feu pour autoriser la communication sur servertcpport et le port 135. Cette étape permet au processus de mappage de point de terminaison RPC et au processus MSDTC de communiquer en externe avec d’autres gestionnaires de transactions et coordinateurs. La procédure réelle varie en fonction de votre distribution et pare-feu Linux.
L’exemple suivant montre comment créer ces règles sur 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
Il est important de configurer le pare-feu avant de configurer le routage des ports dans la section suivante. L’actualisation du pare-feu peut effacer les règles de routage des ports dans certains cas.
Configurer le routage du port
Configurez la table de routage du serveur Linux afin que la communication RPC sur le port 135 soit redirigée vers l’instance network.rpcportde SQL Server. Le mécanisme de configuration pour le transfert de port peut différer sur différentes distributions. Les sections suivantes fournissent des conseils pour Ubuntu, SUSE Enterprise Linux (SLES) et Red Hat Enterprise Linux (RHEL).
Ubuntu et SLES n’utilisent pas le service pare-feu . Les règles iptables sont donc un mécanisme efficace pour obtenir le routage des ports. Les règles iptables peuvent ne pas persister pendant les redémarrages. Les commandes suivantes fournissent également des instructions pour restaurer les règles après un redémarrage.
Créez des règles de routage pour le port 135. Dans l'exemple suivant, le port 135 est dirigé vers le port RPC, 13500, défini dans la section précédente. Remplacez
<ipaddress>par l'adresse IP de votre serveur.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 RpcEndPointMapperLe
--comment RpcEndPointMapperparamètre dans les commandes précédentes vous aide à gérer ces règles dans les commandes ultérieures.Affichez les règles de routage que vous avez créées avec la commande suivante :
sudo iptables -S -t nat | grep "RpcEndPointMapper"Enregistrez les règles de routage dans un fichier sur votre machine.
sudo iptables-save > /etc/iptables.confPour 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) :iptables-restore < /etc/iptables.confNote
Vous devez disposer de privilèges super utilisateur (sudo) pour modifier les fichiers
rc.localouafter.local.
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 enregistrer et restaurer des entrées iptables. Votre distribution Linux peut inclure des options plus avancées ou automatisées. Par exemple, une alternative Ubuntu est le package iptables-persistent qui rend les entrées persistantes.
Les étapes précédentes supposent une adresse IP fixe. 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 vous les avez créées avec des iptables. Si vous devez recréer ou supprimer des règles de routage existantes, utilisez la commande suivante pour supprimer les anciennes RpcEndPointMapper règles :
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Vérifier
À ce stade, SQL Server devrait être en mesure de participer aux transactions distribuées. Pour vérifier que SQL Server écoute, exécutez la commande netstat . Si vous utilisez RHEL, vous devrez peut-être d’abord installer le package net-tools :
sudo netstat -tulpn | grep sqlservr
Vous devez obtenir une sortie similaire à la suivante :
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. Dans ce cas, vous ne verrez pas SQL Server écouter sur le port 51999 dans cet exemple jusqu'à la première transaction distribuée.
Configurer l'authentification sur la communication RPC pour MSDTC
MSDTC pour SQL Server sur Linux n'utilise pas l'authentification sur la communication RPC par défaut. Toutefois, lorsque la machine hôte est jointe à un domaine Active Directory, vous pouvez configurer MSDTC pour utiliser la communication RPC authentifiée à l’aide des paramètres mssql-conf suivants :
| Réglage | Descriptif |
|---|---|
distributedtransaction.allowonlysecurerpccalls |
Configurer les appels sécurisés RPC pour les transactions distribuées. La valeur par défaut est 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Configurer les appels de sécurité RPC pour les transactions distribuées. La valeur par défaut est 0. |
distributedtransaction.turnoffrpcsecurity |
Activer ou désactiver la sécurité RPC pour les transactions distribuées. La valeur par défaut est 0. |
Prise en charge et compatibilité
Active Directory
Microsoft recommande d’utiliser MSDTC avec RPC activé si SQL Server est inscrit dans une configuration Active Directory. Si vous configurez SQL Server pour utiliser l’authentification Active Directory, MSDTC utilise la sécurité RPC d’authentification mutuelle par défaut.
Windows et 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 :
| Système d'exploitation | Version minimale | Build du système d’exploitation |
|---|---|---|
| Windows Server | 1903 | 18362.30.190401-1528 |
| Windows 10 | 1903 | 18362.267 |