Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server em Linux
Este artigo descreve como configurar o Microsoft Distributed Transaction Coordinator (MSDTC) no Linux.
O MSDTC no Linux é suportado na Atualização Cumulativa 16 do SQL Server 2017 (14.x) e versões posteriores.
Visão geral
Ativar transações distribuídas no SQL Server em Linux introduzindo o MSDTC e a funcionalidade de mapeamento de endpoint de chamadas de procedimento remoto (RPC) dentro do SQL Server. Por predefinição, um processo de mapeamento de ponto de extremidade RPC escuta na porta 135 por solicitações RPC de entrada e fornece informações dos componentes registados para solicitações remotas. As solicitações remotas podem usar as informações retornadas pelo mapeador de pontos finais para se comunicar com componentes RPC registrados, como serviços MSDTC.
Um processo requer privilégios de superusuário para se vincular a portas conhecidas (números de porta inferiores a 1024) no Linux. Para evitar iniciar o SQL Server com privilégios root para o processo de mapeamento de endpoint RPC, os administradores de sistema devem usar iptables para criar a tradução de endereços de rede e encaminhar o tráfego da porta 135 para o processo de mapeamento de endpoint RPC da instância do SQL Server.
O MSDTC usa dois parâmetros de configuração para o utilitário mssql-conf:
| Configuração mssql-conf | Descrição |
|---|---|
network.rpcport |
A porta TCP à qual o processo mapeador de endpoint RPC se liga. |
distributedtransaction.servertcpport |
A porta que o servidor MSDTC escuta. Se não estiver definido, o serviço MSDTC usará uma porta efêmera aleatória nas reinicializações do serviço, e as exceções de firewall precisam ser reconfiguradas para garantir que o serviço MSDTC possa continuar a comunicação. |
Para obter mais informações sobre essas configurações e outras configurações MSDTC relacionadas, consulte Configurar o SQL Server no Linux com a ferramenta mssql-conf.
Padrões de transação suportados
As seguintes configurações do MSDTC são suportadas:
| Padrão de transação | Fontes de dados | controlador ODBC | JDBC Driver |
|---|---|---|---|
| OLE-TX transações | SQL Server em Linux | Sim | Não |
| XA transações distribuídas | SQL Server, outras fontes de dados ODBC e JDBC que oferecem suporte a XA | Sim (requer versões 17.3 ou posteriores) | Sim |
| Transações distribuídas no servidor vinculado | SQL Server | Sim | Não |
Para obter mais informações, consulte Noções básicas sobre transações XA.
Etapas de configuração do MSDTC
Complete os três passos seguintes para configurar a comunicação e funcionalidade MSDTC para o SQL Server.
- Configurar
network.rpcportedistributedtransaction.servertcpportcom mssql-conf. - Configure o firewall para permitir a comunicação na
distributedtransaction.servertcpporte na porta 135. - Configure o encaminhamento do servidor Linux para que a comunicação RPC na porta 135 seja redirecionada para a instância
network.rpcportdo SQL Server .
As seções a seguir fornecem instruções detalhadas para cada etapa.
Configurar portas RPC e MSDTC
Configurar network.rpcport e distributedtransaction.servertcpport com mssql-conf. Esta etapa é específica do SQL Server e comum a todas as distribuições suportadas.
Use mssql-conf para definir o valor
network.rpcport. O exemplo a seguir o define como 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500Defina o valor
distributedtransaction.servertcpport. O exemplo a seguir o define como 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Reinicie o SQL Server.
sudo systemctl restart mssql-server
Configurar o firewall
Configure o firewall para permitir a comunicação na servertcpport e na porta 135. Esta etapa permite que o processo de mapeamento de endpoints RPC e o processo MSDTC comuniquem externamente com outros gestores e coordenadores de transações. O procedimento real varia consoante a distribuição Linux e o firewall.
O exemplo a seguir mostra como criar essas regras no 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 configurar o firewall antes de configurar o roteamento de porta na próxima seção. Atualizar o firewall pode limpar as regras de roteamento de porta em alguns casos.
Configurar roteamento de porta
Configure a tabela de encaminhamento do servidor Linux para que a comunicação RPC na porta 135 seja redirecionada para a instância network.rpcportdo SQL Server . O mecanismo de configuração para o encaminhamento de portas pode diferir consoante as distribuições. As secções seguintes fornecem orientações para Ubuntu, SUSE Enterprise Linux (SLES) e Red Hat Enterprise Linux (RHEL).
Ubuntu e SLES não usam o serviço firewalld, por isso, as regras de iptables são um mecanismo eficiente para o encaminhamento de portas. As regras iptables podem não persistir durante os reinícios, pelo que os comandos seguintes também fornecem instruções para restaurar as regras após um reinício.
Crie regras de roteamento para a porta 135. No exemplo a seguir, a porta 135 é direcionada para a porta RPC, 13500, definida na seção anterior. Substitua
<ipaddress>pelo endereço IP do seu 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 RpcEndPointMapperO
--comment RpcEndPointMapperparâmetro nos comandos anteriores ajuda-te a gerir estas regras em comandos posteriores.Exiba as regras de roteamento criadas com o seguinte comando:
sudo iptables -S -t nat | grep "RpcEndPointMapper"Salve as regras de roteamento em um arquivo em sua máquina.
sudo iptables-save > /etc/iptables.confPara recarregar as regras após uma reinicialização, adicione o seguinte comando ao
/etc/rc.local(para o Ubuntu) ou ao/etc/init.d/after.local(para o SLES):iptables-restore < /etc/iptables.confObservação
Você deve ter privilégios de superusuário (sudo) para editar os arquivos
rc.localouafter.local.
Os comandos iptables-save e iptables-restore, juntamente com a configuração de arranque rc.local/after.local, fornecem um mecanismo básico para guardar e restaurar entradas iptables. Dependendo da sua distribuição Linux, pode haver opções mais avançadas ou automatizadas disponíveis. Por exemplo, uma alternativa do Ubuntu é o pacote iptables-persistent para tornar as entradas persistentes.
As etapas anteriores assumem um endereço IP fixo. Se o endereço IP da sua instância SQL Server mudar (devido a intervenção manual ou DHCP), deve remover e recriar as regras de encaminhamento se as criou com iptables. Se precisar de recriar ou eliminar regras de encaminhamento existentes, use o seguinte comando para remover regras antigas RpcEndPointMapper :
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Verificar
Neste ponto, o SQL Server deve ser capaz de participar de transações distribuídas. Para verificar se o SQL Server está a ouvir, execute o comando netstat . Se estiveres a usar RHEL, talvez tenhas primeiro de instalar o pacote net-tools :
sudo netstat -tulpn | grep sqlservr
Você deve ver uma saída semelhante ao exemplo a seguir:
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
No entanto, após uma reinicialização, o SQL Server não começa a escutar no servertcpport até a primeira transação distribuída. Nesse caso, você não veria o SQL Server escutando na porta 51999 neste exemplo até a primeira transação distribuída.
Configurar a autenticação na comunicação RPC para MSDTC
O MSDTC para SQL Server no Linux não usa autenticação na comunicação RPC por padrão. No entanto, quando a máquina anfitriã está ligada a um domínio Active Directory, pode configurar o MSDTC para usar comunicação RPC autenticada usando as seguintes definições mssql-conf :
| Cenário | Descrição |
|---|---|
distributedtransaction.allowonlysecurerpccalls |
Configure chamadas RPC seguras apenas para transações distribuídas. O valor padrão é 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Configure segurança apenas nas chamadas RPC para transações distribuídas. O valor padrão é 0. |
distributedtransaction.turnoffrpcsecurity |
Habilite ou desabilite a segurança RPC para transações distribuídas. O valor padrão é 0. |
Suporte e compatibilidade
Active Directory
A Microsoft recomenda usar o MSDTC com RPC ativado se o SQL Server estiver inscrito numa configuração do Active Directory. Se configurar o SQL Server para usar autenticação Active Directory, o MSDTC utiliza a segurança RPC de autenticação mútua por padrão.
Windows e Linux
Se um cliente em um sistema operacional Windows precisar se alistar em uma transação distribuída com o SQL Server no Linux, ele deverá ter a seguinte versão mínima do sistema operacional Windows:
| Sistema Operativo | Versão mínima | Compilação do SO |
|---|---|---|
| Servidor Windows | 1903 | 18362.30.190401-1528 |
| Windows 10 | 1903 | 18362.267 |