Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Se aplica a:SQL Server en Linux
En este artículo se describe cómo configurar el Coordinador de transacciones distribuidas de Microsoft (MSDTC) en Linux.
MSDTC en Linux se admite en SQL Server 2017 (14.x) a partir de la actualización acumulativa 16 y versiones posteriores.
Información general
Habilitas las transacciones distribuidas en SQL Server en Linux introduciendo la funcionalidad para el mapeo de puntos de conexión MSDTC y RPC dentro de SQL Server. Un proceso de asignación de puntos de conexión de RPC escucha las solicitudes de RPC entrantes en el puerto 135 de manera predeterminada, y facilita información de los componentes registrados a las solicitudes remotas. Las solicitudes remotas pueden usar la información devuelta por el asignador de puntos de conexión para comunicarse con los componentes de RPC registrados, como los servicios de MSDTC.
Un proceso requiere privilegios de superusuario para enlazar con puertos conocidos (números de puerto inferiores a 1024) en Linux. Para evitar iniciar SQL Server con privilegios raíz para el proceso del asignador de puntos de conexión RPC, los administradores del sistema deben usar iptables para crear traducción de direcciones de red para enrutar el tráfico del puerto 135 al proceso de asignación de puntos de conexión RPC de la instancia de SQL Server.
MS DTC usa dos parámetros de configuración para la utilidad mssql-conf:
| Parámetro de mssql-conf | Descripción |
|---|---|
network.rpcport |
Puerto TCP al que se enlaza el asignador de puntos de conexión de RPC. |
distributedtransaction.servertcpport |
Puerto en el que escucha el servidor de MS DTC. Si no se establece, el servicio de MSDTC usa un puerto efímero aleatorio en los reinicios del servicio, y será necesario reconfigurar las excepciones de firewall para asegurarse de que el servicio de MSDTC pueda continuar con la comunicación. |
Para más información sobre estas y otras opciones de configuración relativas a MSDTC, vea Configuración de SQL Server en Linux con la herramienta mssql-conf.
Estándares de transacciones admitidos
Se admiten las siguientes configuraciones de MSDTC:
| Estándar de transacciones | Orígenes de datos | Controlador ODBC | Controlador JDBC |
|---|---|---|---|
| Transacciones OLE-TX | SQL Server en Linux | Sí | No |
| Transacciones distribuidas XA | SQL Server, otras ODBC y orígenes de datos de JDBC que admiten XA | Sí (requiere 17.3 o versiones posteriores) | Sí |
| Transacciones distribuidas en el servidor vinculado | SQL Server | Sí | No |
Para obtener más información, vea Descripción de las transacciones XA.
Pasos de configuración de MSDTC
Complete los tres pasos siguientes para configurar la comunicación y la funcionalidad de MSDTC para SQL Server.
- Configure
network.rpcportydistributedtransaction.servertcpportcon mssql-conf. - Configure el firewall para permitir la comunicación en
distributedtransaction.servertcpporty en el puerto 135. - Configure el enrutamiento del servidor Linux para que la comunicación RPC en el puerto 135 se redirija a la instancia de
network.rpcportSQL Server.
En las siguientes secciones se proporciona información detallada sobre cada paso.
Configuración de los puertos de RPC y MSDTC
Configure network.rpcport y distributedtransaction.servertcpport con mssql-conf. Este paso es específico de SQL Server y común en todas las distribuciones admitidas.
Use mssql-conf para establecer el valor
network.rpcport. En el siguiente ejemplo se establece en 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500Establezca el valor
distributedtransaction.servertcpport. En el siguiente ejemplo se establece en 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Reinicie SQL Server.
sudo systemctl restart mssql-server
Configuración del firewall
Configure el firewall para permitir la comunicación en servertcpport y en el puerto 135. Este paso permite que el proceso de asignación de puntos de conexión RPC y el proceso MSDTC se comuniquen externamente con otros administradores y coordinadores de transacciones. El procedimiento real varía en función de la distribución y el firewall de Linux.
En el siguiente ejemplo se muestra cómo crear estas reglas en 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
Es importante configurar el firewall antes de configurar el enrutamiento de puertos en la sección siguiente. Si el firewall se actualiza, en algunos casos se podrían borrar las reglas de enrutamiento de puertos.
Configuración del enrutamiento de puertos
Configure la tabla de enrutamiento del servidor Linux para que la comunicación RPC en el puerto 135 se redirija a la instancia de network.rpcportSQL Server. El mecanismo de configuración para el reenvío de puertos puede diferir en distintas distribuciones. En las secciones siguientes se proporcionan instrucciones para Ubuntu, SUSE Enterprise Linux (SLES) y Red Hat Enterprise Linux (RHEL).
Ubuntu y SLES no utilizan el servicio firewalld, por lo que las reglas iptables son un mecanismo eficaz para gestionar el enrutamiento de puertos. Es posible que las reglas de iptables no persistan durante los reinicios, por lo que los siguientes comandos también proporcionan instrucciones para restaurar las reglas después de un reinicio.
Cree reglas de enrutamiento para el puerto 135. En el siguiente ejemplo, el puerto 135 se dirige al puerto RPC (13500), que se definió en la sección anterior. Reemplace
<ipaddress>por la dirección IP de su servidor.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 RpcEndPointMapperEl
--comment RpcEndPointMapperparámetro de los comandos anteriores le ayuda a administrar estas reglas en comandos posteriores.Vea las reglas de enrutamiento que creó con el siguiente comando:
sudo iptables -S -t nat | grep "RpcEndPointMapper"Guarde las reglas de enrutamiento en un archivo en el equipo.
sudo iptables-save > /etc/iptables.confPara volver a cargar las reglas tras un reinicio, agregue el siguiente comando a
/etc/rc.local(Ubuntu) o a/etc/init.d/after.local(SLES):iptables-restore < /etc/iptables.confNota
Debe tener privilegios de superusuario (sudo) para editar los archivos
rc.localoafter.local.
Los iptables-save comandos y iptables-restore , junto con rc.local/after.local la configuración de inicio, proporcionan un mecanismo básico para guardar y restaurar entradas de iptables . En función de la distribución de Linux, es posible que haya opciones más avanzadas o automatizadas. Por ejemplo, una alternativa de Ubuntu es el paquete iptables-persistent para que las entradas sean persistentes.
En los pasos anteriores se da por hecho que la dirección IP es fija. Si cambia la dirección IP de la instancia de SQL Server (debido a la intervención manual o DHCP), debe quitar y volver a crear las reglas de enrutamiento si las creó con iptables. Si necesita volver a crear o eliminar reglas de enrutamiento existentes, use el siguiente comando para quitar las reglas antiguas RpcEndPointMapper :
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Comprobar
En este punto, SQL Server debería poder participar en las transacciones distribuidas. Para comprobar que SQL Server está escuchando, ejecute el comando netstat . Si usa RHEL, es posible que tenga que instalar primero el paquete net-tools :
sudo netstat -tulpn | grep sqlservr
Debería ver una salida similar al ejemplo siguiente:
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
Pero después de un reinicio, SQL Server no inicia la escucha en servertcpport hasta la primera transacción distribuida. En este caso, no verá que SQL Server escucha en el puerto 51999 hasta la primera transacción distribuida.
Configuración de la autenticación en la comunicación RPC para MSDTC
MSDTC para SQL Server en Linux no usa de forma predeterminada la autenticación en la comunicación RPC. Sin embargo, cuando la máquina host está unida a un dominio de Active Directory, puede configurar MSDTC para usar la comunicación RPC autenticada mediante la siguiente configuración mssql-conf :
| Configuración | Descripción |
|---|---|
distributedtransaction.allowonlysecurerpccalls |
Configure solo llamadas RPC seguras para transacciones distribuidas. El valor predeterminado es 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Configure solo llamadas RPC de seguridad para transacciones distribuidas. El valor predeterminado es 0. |
distributedtransaction.turnoffrpcsecurity |
Habilite o deshabilite la seguridad RPC de las transacciones distribuidas. El valor predeterminado es 0. |
Soportabilidad y compatibilidad
Active Directory
Microsoft recomienda usar MSDTC con RPC habilitado si SQL Server está inscrito en una configuración de Active Directory. Si configura SQL Server para usar la autenticación de Active Directory, MSDTC usa la seguridad RPC de autenticación mutua de forma predeterminada.
Windows y Linux
Si un cliente de un sistema operativo Windows necesita darse de alta en una transacción distribuida con SQL Server en Linux, deberá tener la siguiente versión mínima del sistema operativo Windows:
| Sistema operativo | Versión mínima | Compilación del sistema operativo |
|---|---|---|
| Windows Server | 1903 | 18362.30.190401-1528 |
| Windows 10 | 1903 | 18362.267 |