Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server no Linux
Este artigo descreve como configurar o MSDTC (Coordenador de Transações Distribuídas da Microsoft) no Linux.
O MSDTC no Linux é suportado no SQL Server 2017 (14.x) Atualização Cumulativa 16 e versões posteriores.
Visão geral
Você habilita transações distribuídas no SQL Server no Linux introduzindo o MSDTC e a funcionalidade de mapeador de ponto de extremidade (RPC) no SQL Server. Por padrão, um processo de mapeamento de ponto de extremidade RPC escuta na porta 135 para solicitações RPC de entrada e fornece informações de componentes registrados a solicitações remotas. As solicitações remotas podem usar as informações retornadas pelo mapeador de pontos de extremidade para se comunicarem com os componentes RPC registrados, tais como os serviços MSDTC.
Um processo requer privilégios de superusuário para associar a portas conhecidas (números de porta menores que 1024) no Linux. Para evitar iniciar o SQL Server com privilégios de root para o processo de mapeamento de ponto de extremidade RPC, os administradores do sistema devem usar iptables para criar Tradução de Endereço de Rede para rotear o tráfego na porta 135 para o processo de mapeamento de ponto de extremidade 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 do mapeador de pontos de extremidade RPC é associado. |
distributedtransaction.servertcpport |
A porta em que o servidor MSDTC escuta. Se não for definido, o serviço MSDTC usará uma porta efêmera aleatória na reinicialização do serviço, e as exceções de firewall precisarão 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 relacionadas do MSDTC, confira Configurar o SQL Server em Linux com a ferramenta mssql-conf.
Padrões de transação com suporte
As configurações do MSDTC a seguir são compatíveis:
| Padrão de transação | Fontes de dados | driver ODBC | Driver JDBC |
|---|---|---|---|
| Transações OLE-TX | SQL Server em Linux | Sim | Não |
| Transações distribuídas XA | SQL Server, outras fontes de dados ODBC e JDBC que dão suporte a XA | Sim (requer versões 17.3 ou posteriores) | Sim |
| Transações distribuídas em um servidor vinculado | SQL Server | Sim | Não |
Para saber mais, confira Noções básicas sobre Transações XA.
Etapas de configuração do MSDTC
Conclua as três etapas a seguir para configurar a comunicação e a funcionalidade do MSDTC para o SQL Server.
- Configurar
network.rpcportedistributedtransaction.servertcpportcom mssql-conf. - Configure o firewall para permitir a comunicação em
distributedtransaction.servertcpporte na porta 135. - Configure o roteamento do servidor Linux para que a comunicação RPC na porta 135 seja redirecionada para a instância do
network.rpcportSQL 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 em todas as distribuições com suporte.
Use mssql-conf para definir o valor
network.rpcport. O exemplo a seguir define-o para 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500Defina o valor
distributedtransaction.servertcpport. O exemplo a seguir define-o para 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 em servertcpport e na porta 135. Esta etapa permite que o processo de mapeamento de ponto de extremidade RPC e o processo MSDTC se comuniquem externamente com outros gerentes e coordenadores de transações. O procedimento real varia dependendo da distribuição e do firewall do Linux.
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 portas na próxima seção. A atualização do firewall pode limpar as regras de roteamento de porta em alguns casos.
Configurar roteamento de porta
Configure a tabela de roteamento do servidor Linux para que a comunicação RPC na porta 135 seja redirecionada para a instância do network.rpcportSQL Server. O mecanismo de configuração para encaminhamento de porta pode variar dependendo da distribuição. As seções a seguir fornecem diretrizes para Ubuntu, SUSE Enterprise Linux (SLES) e RHEL (Red Hat Enterprise Linux).
O Ubuntu e o SLES não usam o serviço firewalld, portanto, as regras iptables são um mecanismo eficiente para alcançar o encaminhamento de portas. As regras de iptables podem não persistir durante as reinicializações, portanto, os comandos a seguir também fornecem instruções para restaurar as regras após uma reinicialização.
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 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 você a gerenciar essas regras em comandos posteriores.Exiba as regras de roteamento que você criou com o seguinte comando:
sudo iptables -S -t nat | grep "RpcEndPointMapper"Salve as regras de roteamento em um arquivo no computador.
sudo iptables-save > /etc/iptables.confPara recarregar as regras após uma reinicialização, adicione o seguinte comando a
/etc/rc.local(para Ubuntu) ou a/etc/init.d/after.local(para 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 rc.local/after.local configuração de inicialização, fornecem um mecanismo básico para salvar e restaurar Entradas de Iptables. Dependendo de sua distribuição do 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 pressupõem um endereço IP fixo. Se o endereço IP da instância do SQL Server for alterado (devido à intervenção manual ou DHCP), você deverá remover e recriar as regras de roteamento se as tiver criado com iptables. Se você precisar recriar ou excluir regras de roteamento 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á escutando, execute o comando netstat . Se você estiver usando o RHEL, talvez seja necessário primeiro instalar o pacote de ferramentas de rede :
sudo netstat -tulpn | grep sqlservr
Você deverá ver uma saída semelhante ao seguinte exemplo:
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 o MSDTC
O MSDTC para SQL Server no Linux não usa autenticação na comunicação RPC por padrão. No entanto, quando o computador host é ingressado em um domínio do Active Directory, você pode configurar o MSDTC para usar a comunicação RPC autenticada usando as seguintes configurações mssql-conf :
| Configuração | Descrição |
|---|---|
distributedtransaction.allowonlysecurerpccalls |
Configure chamadas RPC somente seguras para transações distribuídas. O valor padrão é 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Configure chamadas RPC somente de segurança para transações distribuídas. O valor padrão é 0. |
distributedtransaction.turnoffrpcsecurity |
Habilitar ou desabilitar a segurança RPC para transações distribuídas. O valor padrão é 0. |
Suportabilidade e compatibilidade
Active Directory
A Microsoft recomenda usar o MSDTC com O RPC habilitado se o SQL Server estiver registrado em uma configuração do Active Directory. Se você configurar o SQL Server para usar a autenticação do Active Directory, o MSDTC usará 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 inscrever em uma transação distribuída com SQL Server em Linux, ele deverá ter a seguinte versão mínima do sistema operacional Windows:
| Sistema operacional | Versão mínima | Compilação do sistema operacional |
|---|---|---|
| Windows Server | 1903 | 18362.30.190401-1528 |
| Windows 10 | 1903 | 18362.267 |