Jak skonfigurować koordynator transakcji rozproszonych firmy Microsoft (MSDTC) w systemie Linux
Dotyczy:programu SQL Server — Linux
W tym artykule opisano sposób konfigurowania programu Microsoft Distributed Transaction Coordinator (MSDTC) w systemie Linux.
Usługa MSDTC w systemie Linux jest obsługiwana w programie SQL Server 2017 (14.x) Aktualizacja zbiorcza 16 lub nowsza.
Przegląd
Transakcje rozproszone są możliwe na SQL Server w systemie Linux dzięki wprowadzeniu funkcjonalności MSDTC i mapowania punktów końcowych zdalnego wywoływania procedur (RPC) w SQL Server. Domyślnie proces mapowania punktów końcowych RPC nasłuchuje na porcie 135 dla przychodzących żądań RPC i udostępnia informacje o zarejestrowanych składnikach dla żądań zdalnych. Żądania zdalne mogą używać informacji zwracanych przez maper punktu końcowego do komunikowania się z zarejestrowanymi składnikami RPC, takimi jak usługi MSDTC. Proces wymaga uprawnień administratora do powiązania z dobrze znanymi portami (numerami portów mniejszymi niż 1024) w systemie Linux. Aby uniknąć uruchamiania programu SQL Server z uprawnieniami głównymi dla procesu mapowania punktu końcowego RPC, administratorzy systemu muszą używać tabel iptable do tworzenia translacji adresów sieciowych w celu kierowania ruchu na porcie 135 do procesu mapowania punktów końcowych RPC programu SQL Server.
MsdTC używa dwóch parametrów konfiguracji dla narzędzia mssql-conf:
mssql-conf ustawić | Opis |
---|---|
network.rpcport |
Port TCP powiązany z procesem mapowania punktu końcowego RPC. |
distributedtransaction.servertcpport |
Port, na który nasłuchuje serwer MSDTC. Jeśli nie zostanie ustawiona, usługa MSDTC używa losowego portu efemerycznego podczas ponownego uruchamiania usługi, a wyjątki zapory należy ponownie skonfigurować, aby upewnić się, że usługa MSDTC może kontynuować komunikację. |
Aby uzyskać więcej informacji na temat tych ustawień i innych powiązanych ustawień MSDTC, zobacz Configure SQL Server on Linux with the mssql-conf tool (Konfigurowanie programu SQL Server w systemie Linux przy użyciu narzędzia mssql-conf).
Obsługiwane standardy transakcji
Obsługiwane są następujące konfiguracje MSDTC:
Standard transakcji | Źródła danych | Sterownik ODBC | Sterownik JDBC |
---|---|---|---|
OLE-TX transakcje | Program SQL Server w systemie Linux | Tak | Nie |
Transakcje rozproszone XA | SQL Server, inne źródła danych ODBC i JDBC, które obsługują XA | Tak (wymaga wersji 17.3 lub nowszej) | Tak |
transakcje rozproszone na serwerze połączonym | SQL Server | Tak | Nie |
Aby uzyskać więcej informacji, zobacz Understanding XA Transactions.
Kroki konfiguracji MSDTC
Istnieją trzy kroki konfigurowania komunikacji i funkcjonalności MSDTC. Jeśli nie wykonano niezbędnych kroków konfiguracji, program SQL Server nie włącza funkcji MSDTC.
- Skonfiguruj
network.rpcport
idistributedtransaction.servertcpport
przy użyciu mssql-conf. - Skonfiguruj zaporę tak, aby zezwalała na komunikację na
distributedtransaction.servertcpport
i porcie 135. - Skonfiguruj routing serwera z systemem Linux, aby komunikacja RPC na porcie 135 została przekierowana do
network.rpcport
programu SQL Server.
Poniższe sekcje zawierają szczegółowe instrukcje dotyczące każdego kroku.
Konfigurowanie portów RPC i MSDTC
Najpierw skonfiguruj network.rpcport
i distributedtransaction.servertcpport
przy użyciu mssql-conf. Ten krok jest specyficzny dla programu SQL Server, a jednocześnie wspólny dla wszystkich obsługiwanych dystrybucji.
Użyj mssql-conf, aby ustawić wartość
network.rpcport
. Poniższy przykład ustawia go na 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
Ustaw wartość
distributedtransaction.servertcpport
. Poniższy przykład ustawia go na 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
Uruchom ponownie program SQL Server.
sudo systemctl restart mssql-server
Konfigurowanie zapory
Drugim krokiem jest skonfigurowanie zapory tak, aby zezwalała na komunikację na servertcpport
i na porcie 135. Dzięki temu proces mapowania punktów końcowych RPC i proces MSDTC komunikują się zewnętrznie z innymi menedżerami transakcji i koordynatorami. Rzeczywiste kroki tego rozwiązania różnią się w zależności od dystrybucji i zapory systemu Linux.
W poniższym przykładzie pokazano, jak utworzyć te reguły w systemie 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
Poniższy przykład pokazuje, jak można to zrobić w Red Hat Enterprise Linux (RHEL):
sudo firewall-cmd --zone=public --add-port=51999/tcp --permanent
sudo firewall-cmd --zone=public --add-port=135/tcp --permanent
sudo firewall-cmd --reload
Ważne jest, aby skonfigurować zaporę przed skonfigurowaniem routingu portów w następnej sekcji. Odświeżanie zapory może w niektórych przypadkach wyczyścić zasady routingu portów.
Konfigurowanie routingu portów
Skonfiguruj tabelę routingu serwera z systemem Linux, aby komunikacja RPC na porcie 135 została przekierowana do network.rpcport
programu SQL Server. Mechanizm konfiguracji przekazywania portów w różnych dystrybucjach może się różnić. Poniższe sekcje zawierają wskazówki dotyczące systemów Ubuntu, SUS Enterprise Linux (SLES) i Red Hat Enterprise Linux (RHEL).
Routing portów w systemach Ubuntu i SLES
System Ubuntu i SLES nie korzystają z usługi zapory, dlatego reguły iptable są wydajnym mechanizmem do osiągnięcia routingu portów. Reguły iptable mogą nie być utrwalane podczas ponownego uruchamiania, dlatego następujące polecenia zawierają również instrukcje dotyczące przywracania reguł po ponownym uruchomieniu.
Utwórz reguły routingu dla portu 135. W poniższym przykładzie port 135 jest kierowany do portu RPC 13500 zdefiniowanego w poprzedniej sekcji. Zastąp
<ipaddress>
adresem IP serwera.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
Parametr
--comment RpcEndPointMapper
w poprzednich poleceniach ułatwia zarządzanie tymi regułami w kolejnych poleceniach.Wyświetl reguły routingu utworzone za pomocą następującego polecenia:
sudo iptables -S -t nat | grep "RpcEndPointMapper"
Zapisz reguły routingu w pliku na maszynie.
sudo iptables-save > /etc/iptables.conf
Aby ponownie załadować reguły po ponownym uruchomieniu, dodaj następujące polecenie do
/etc/rc.local
(dla Ubuntu) lub do/etc/init.d/after.local
(dla SLES):iptables-restore < /etc/iptables.conf
Notatka
Aby edytować pliki
rc.local
lubafter.local
, musisz mieć uprawnienia administratora (sudo).
Polecenia iptables-save i iptables-restore wraz z konfiguracją uruchamiania rc.local
/after.local
zapewniają podstawowy mechanizm zapisywania i przywracania wpisów iptables. W zależności od dystrybucji systemu Linux mogą istnieć bardziej zaawansowane lub zautomatyzowane opcje. Na przykład alternatywą dla systemu Ubuntu jest pakiet iptables-persistent
, który umożliwia trwałe wprowadzanie wpisów.
W poprzednich krokach przyjęto założenie stałego adresu IP. Jeśli adres IP wystąpienia programu SQL Server ulegnie zmianie (z powodu ręcznej interwencji lub protokołu DHCP), musisz usunąć i ponownie utworzyć reguły routingu, jeśli zostały utworzone przy użyciu tabel iptable. Jeśli musisz ponownie utworzyć lub usunąć istniejące reguły routingu, możesz użyć następującego polecenia, aby usunąć stare reguły RpcEndPointMapper
:
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Routing portów w systemie RHEL
W dystrybucjach korzystających z usługi firewalld, takich jak Red Hat Enterprise Linux, tej samej usługi można użyć zarówno do otwierania portu na serwerze, jak i do wewnętrznego przekierowywania portów. Na przykład w systemie Red Hat Enterprise Linux należy użyć usługi zapory (za pośrednictwem narzędzia konfiguracji zapory z -add-forward-port
lub podobnymi opcjami) do tworzenia trwałych reguł przekierowywania portów i zarządzania nimi zamiast używania tabel iptable.
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload
Zweryfikować
Na tym etapie program SQL Server powinien mieć możliwość udziału w transakcjach rozproszonych. Aby sprawdzić, czy program SQL Server nasłuchuje, uruchom polecenie netstat (jeśli używasz systemu RHEL, może być konieczne najpierw zainstalowanie pakietu narzędzi net-tools):
sudo netstat -tulpn | grep sqlservr
Powinny zostać wyświetlone dane wyjściowe podobne do następującego przykładu:
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
Jednak po ponownym uruchomieniu program SQL Server nie zaczyna nasłuchiwać na servertcpport
do momentu pierwszej transakcji rozproszonej. W tym przykładzie nie będzie można odsłuchiwać programu SQL Server na porcie 51999 do momentu pierwszej transakcji rozproszonej.
Konfigurowanie uwierzytelniania w komunikacji RPC dla MSDTC
Usługa MSDTC dla programu SQL Server w systemie Linux domyślnie nie używa uwierzytelniania w komunikacji RPC. Jednak po dołączeniu maszyny hosta do domeny usługi Active Directory można skonfigurować msdTC do korzystania z uwierzytelnionej komunikacji RPC przy użyciu następujących ustawień mssql-conf:
Ustawienie | Opis |
---|---|
distributedtransaction.allowonlysecurerpccalls |
Skonfiguruj bezpieczne wywołania RPC tylko dla transakcji rozproszonych. Wartość domyślna to 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Skonfiguruj wyłącznie zabezpieczone wywołania RPC dla transakcji rozproszonych. Wartość domyślna to 0. |
distributedtransaction.turnoffrpcsecurity |
Włączanie lub wyłączanie zabezpieczeń RPC dla transakcji rozproszonych. Wartość domyślna to 0. |
Dodatkowe wskazówki
Active Directory
Firma Microsoft zaleca korzystanie z MSDTC z włączonym RPC, jeśli SQL Server jest włączony do konfiguracji usługi Active Directory. Jeśli program SQL Server jest skonfigurowany do korzystania z uwierzytelniania usługi Active Directory, MSDTC domyślnie używa bezpieczeństwa RPC opartego na wzajemnym uwierzytelnianiu.
Windows i Linux
Jeśli klient w systemie operacyjnym Windows musi zarejestrować się w transakcji rozproszonej z programem SQL Server w systemie Linux, musi mieć następującą minimalną wersję systemu operacyjnego Windows:
System operacyjny | Minimalna wersja | Kompilacja systemu operacyjnego |
---|---|---|
systemu Windows Server | 1903 | 18362.30.190401-1528 |
Windows 10 | 1903 | 18362.267 |