Поделиться через


Сведения о настройке координатора распределенных транзакций (Майкрософт) (MSDTC) в Linux

Применимо к:SQL Server в Linux

В этой статье описывается настройка координатора распределенных транзакций Майкрософт (MSDTC) в Linux.

MSDTC в Linux поддерживается в накопительном обновлении 16 и более поздних версиях SQL Server 2017 (14.x).

Обзор

Вы можете включить распределенные транзакции в SQL Server в Linux, введя функции сопоставления конечных точек MSDTC и удаленного вызова процедур (RPC). По умолчанию процесс сопоставления конечных точек RPC прослушивает порт 135 на предмет входящих запросов RPC и предоставляет удаленным запросам сведения о зарегистрированных компонентах. Удаленные запросы могут использовать сведения, возвращенные сопоставителем конечных точек, для взаимодействия с зарегистрированными компонентами RPC, такими как службы MSDTC.

Процессу требуются права суперпользователя для привязки к известным портам (номера портов меньше 1024) в Linux. Чтобы избежать запуска SQL Server с правами root для процесса отображения конечных точек RPC, системные администраторы должны использовать iptables для создания преобразования сетевых адресов и маршрутизации трафика через порт 135 к процессу отображения конечных точек RPC экземпляра SQL Server.

MSDTC использует два параметра конфигурации для служебной программы mssql-conf :

Настройка mssql-conf Описание
network.rpcport TCP-порт, к которому привязан процесс сопоставителя конечных точек RPC.
distributedtransaction.servertcpport Порт, который обслуживает сервер MSDTC. Если не задано, служба MSDTC использует случайный временный порт при перезапуске службы, а исключения брандмауэра необходимо перенастроить, чтобы служба MSDTC продолжала обмен данными.

Дополнительные сведения об этих параметрах и других параметрах, связанных с MSDTC, см. в статье Настройка SQL Server на Linux с помощью средства mssql-conf.

Поддерживаемые стандарты транзакций

Поддерживаются следующие конфигурации MSDTC.

Стандарт транзакции Источники данных Драйвер ODBC Драйвер JDBC
Транзакции OLE-TX SQL Server на Linux Да Нет
Распределенные транзакции XA SQL Server, другие источники данных ODBC и JDBC, которые поддерживают XA Да (требуется 17.3 или более поздние версии) Да
Распределенные транзакции на связанном сервере SQL Server Да Нет

Дополнительные сведения см. в статье Основные сведения о транзакциях XA.

Шаги настройки MSDTC

Выполните следующие три действия, чтобы настроить связь и функциональные возможности MSDTC для SQL Server.

  • Настройте network.rpcport и distributedtransaction.servertcpport с помощью mssql-conf.
  • Настройте брандмауэр для разрешения обмена данными через distributedtransaction.servertcpport и порт 135.
  • Настройте маршрутизацию сервера Linux, чтобы связь RPC через порт 135 перенаправлялась на экземпляр network.rpcportSQL Server.

Более подробные сведения по каждому шагу приведены в следующих разделах.

Настройка портов MSDTC и RPC

Настройте network.rpcport и distributedtransaction.servertcpport с помощью mssql-conf. Этот шаг предназначен для SQL Server и распространен во всех поддерживаемых дистрибутивах.

  1. Используйте mssql-conf для задания network.rpcport значения. В следующем примере задается значение 13500.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. distributedtransaction.servertcpport Задайте значение. В следующем примере задается значение 51999.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. Перезапуск SQL Server.

    sudo systemctl restart mssql-server
    

Настройка брандмауэра

Настройте брандмауэр для разрешения обмена данными через servertcpport и порт 135. Этот шаг позволяет процессу сопоставления конечных точек RPC и MSDTC взаимодействовать с другими диспетчерами транзакций и координаторами. Фактическая процедура зависит от дистрибутива и брандмауэра Linux.

В следующем примере показано, как создать эти правила в 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

Перед настройкой маршрутизации портов в следующем разделе важно настроить брандмауэр. В некоторых случаях обновление брандмауэра может очистить правила маршрутизации портов.

Настройка маршрутизации портов

Настройте таблицу маршрутизации сервера Linux, чтобы связь RPC через порт 135 перенаправлялась на экземпляр network.rpcportSQL Server. Механизм конфигурации для переадресации портов может отличаться в разных дистрибутивах. В следующих разделах приведены рекомендации по Ubuntu, SUSE Enterprise Linux (SLES) и Red Hat Enterprise Linux (RHEL).

Ubuntu и SLES не используют службу брандмауэра , поэтому правила iptables являются эффективным механизмом для достижения маршрутизации портов. Правила iptables могут не сохраняться во время перезапуска, поэтому следующие команды также предоставляют инструкции по восстановлению правил после перезапуска.

  1. Создайте правила маршрутизации для порта 135. В следующем примере порт 135 направляется на порт RPC 13500, определенный в предыдущем разделе. Замените <ipaddress> IP-адресом вашего сервера.

    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 RpcEndPointMapper
    

    Параметр --comment RpcEndPointMapper в предыдущих командах помогает управлять этими правилами в последующих командах.

  2. Просмотрите созданные правила маршрутизации с помощью следующей команды.

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Сохраните правила маршрутизации в файл на компьютере.

    sudo iptables-save > /etc/iptables.conf
    
  4. Чтобы перезагрузить правила после перезапуска, добавьте следующую команду /etc/rc.local в (для Ubuntu) или /etc/init.d/after.local (для SLES):

    iptables-restore < /etc/iptables.conf
    

    Примечание.

    Для редактирования rc.local файлов или after.local файлов необходимо иметь права суперпользоваемого пользователя (sudo).

Команды iptables-save и iptables-restore команды вместе сrc.local/after.localконфигурацией запуска предоставляют базовый механизм для сохранения и восстановления записей iptables. В зависимости от дистрибутива Linux могут быть доступны расширенные или автоматизированные варианты. Например, альтернативой Ubuntu может быть использование пакета iptables-persistent для сохранения записей.

При выполнении предыдущих действий предполагается использование фиксированного IP-адреса. Если IP-адрес для экземпляра SQL Server изменяется (из-за ручного вмешательства или DHCP), необходимо удалить и повторно создать правила маршрутизации, если вы создали их с iptables. Если необходимо повторно создать или удалить существующие правила маршрутизации, используйте следующую команду, чтобы удалить старые RpcEndPointMapper правила:

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

Проверка

На этом этапе SQL Server должен иметь возможность участвовать в распределенных транзакциях. Чтобы убедиться, что SQL Server прослушивает, выполните команду netstat . Если вы используете RHEL, вам может потребоваться сначала установить пакет net-tools :

sudo netstat -tulpn | grep sqlservr

Выходные данные должны соответствовать следующему примеру.

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

Однако после перезапуска SQL Server не начинает прослушивать servertcpport до первой распределенной транзакции. В этом случае SQL Server не будет прослушивать порт 51999 до первой распределенной транзакции.

Настройка проверки подлинности при RPC-взаимодействии для MSDTC

MSDTC для SQL Server на Linux по умолчанию не использует проверку подлинности для связи RPC. Однако при присоединении хост-компьютера к домену Active Directory можно настроить MSDTC для использования проверки подлинности связи RPC с помощью следующих параметров mssql-conf :

Настройка Описание
distributedtransaction.allowonlysecurerpccalls Настройте исключительно безопасные удаленные вызовы процедур (RPC) для распределенных транзакций. Значение по умолчанию — 0.
distributedtransaction.fallbacktounsecurerpcifnecessary Настройте только безопасные вызовы процедур по удаленному доступу (RPC) для распределенных транзакций. Значение по умолчанию — 0.
distributedtransaction.turnoffrpcsecurity Включение или отключение безопасности RPC для распределенных транзакций. Значение по умолчанию — 0.

Поддержка и совместимость

Active Directory

Корпорация Майкрософт рекомендует использовать MSDTC с поддержкой RPC, если SQL Server зарегистрирован в конфигурации Active Directory. Если вы настроите SQL Server для использования проверки подлинности Active Directory, MSDTC по умолчанию использует взаимную проверку подлинности RPC.

Windows и Linux.

Если клиент с операционной системой Windows необходимо включить в распределенную транзакцию с SQL Server на Linux, он должен иметь следующую минимальную версию операционной системы Windows.

Операционная система Минимальная версия Сборка ОС
Windows Server 1903 18362.30.190401-1528
Windows 10 1903 18362.267