Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: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 и распространен во всех поддерживаемых дистрибутивах.
Используйте mssql-conf для задания
network.rpcportзначения. В следующем примере задается значение 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500distributedtransaction.servertcpportЗадайте значение. В следующем примере задается значение 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999Перезапуск 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 могут не сохраняться во время перезапуска, поэтому следующие команды также предоставляют инструкции по восстановлению правил после перезапуска.
Создайте правила маршрутизации для порта 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в предыдущих командах помогает управлять этими правилами в последующих командах.Просмотрите созданные правила маршрутизации с помощью следующей команды.
sudo iptables -S -t nat | grep "RpcEndPointMapper"Сохраните правила маршрутизации в файл на компьютере.
sudo iptables-save > /etc/iptables.confЧтобы перезагрузить правила после перезапуска, добавьте следующую команду
/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 |