Konfigurace koordinátoru distribuovaných transakcí Microsoftu (MSDTC) v Linuxu
platí pro:SQL Server – Linux
Tento článek popisuje, jak nakonfigurovat Microsoft Distributed Transaction Coordinator (MSDTC) v Linuxu.
MSDTC v Linuxu se podporuje v kumulativní aktualizaci 16 a novějších verzích SQL Serveru 2017 (14.x).
Přehled
Distribuované transakce jsou povoleny na SQL Serveru v Linuxu zavedením funkce mapování koncového bodu RPC (MSDTC a vzdálené volání procedur) v RÁMCI SQL Serveru. Ve výchozím nastavení proces mapování koncového bodu RPC naslouchá na portu 135 příchozím požadavkům RPC a poskytuje informace o registrovaných součástech vzdáleným požadavkům. Vzdálené požadavky mohou použít informace vrácené mapovačem koncových bodů ke komunikaci s registrovanými komponentami RPC, jako jsou služby MSDTC. Proces vyžaduje, aby oprávnění superuživatele byla vázána na dobře známé porty (čísla portů menší než 1024) v Linuxu. Aby se zabránilo spuštění SQL Serveru s kořenovými oprávněními pro proces mapování koncových bodů RPC, musí správci systému použít iptables k vytvoření překladu síťových adres pro směrování provozu na portu 135 do procesu mapování koncových bodů RPC SQL Serveru.
MSDTC používá pro nástroj mssql-conf dva parametry konfigurace:
Nastavení mssql-conf | Popis |
---|---|
network.rpcport |
Port TCP, ke kterému mapovač koncového bodu RPC vytvoří vazbu. |
distributedtransaction.servertcpport |
Port, na který server MSDTC naslouchá. Pokud není nastavená, služba MSDTC používá náhodný dočasný port při restartování služby a výjimky brány firewall je potřeba překonfigurovat, aby služba MSDTC pokračovala ve komunikaci. |
Další informace o těchto nastaveních a dalších souvisejících nastavení MSDTC naleznete v tématu Konfigurace SQL Serveru v Linuxu pomocí nástroje mssql-conf.
Podporované standardy transakcí
Podporují se následující konfigurace MSDTC:
Standard transakcí | Zdroje dat | Ovladač ODBC | Ovladač JDBC |
---|---|---|---|
OLE-TX transakce | SQL Server na Linuxu | Ano | Ne |
XA distribuované transakce | SQL Server, další zdroje dat ODBC a JDBC, které podporují XA | Ano (vyžaduje verzi 17.3 nebo vyšší) | Ano |
distribuované transakce na propojeném serveru | SQL Server | Ano | Ne |
Další informace naleznete v tématu Principy transakcí XA.
Kroky konfigurace MSDTC
Ke konfiguraci komunikace a funkčnosti MSDTC existují tři kroky. Pokud nejsou provedeny nezbytné kroky konfigurace, SQL Server nepovolí funkce MSDTC.
- Konfigurace
network.rpcport
adistributedtransaction.servertcpport
pomocí mssql-conf. - Nakonfigurujte bránu firewall tak, aby umožňovala komunikaci na
distributedtransaction.servertcpport
a portu 135. - Nakonfigurujte směrování serveru s Linuxem tak, aby byla komunikace RPC na portu 135 přesměrována na
network.rpcport
SQL Serveru .
Následující části obsahují podrobné pokyny pro každý krok.
Konfigurace portů RPC a MSDTC
Nejprve nakonfigurujte network.rpcport
a distributedtransaction.servertcpport
pomocí mssql-conf. Tento krok je specifický pro SQL Server a je společný pro všechny podporované distribuce.
K nastavení hodnoty
network.rpcport
použijte mssql-conf. Následující příklad ho nastaví na 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
Nastavte hodnotu
distributedtransaction.servertcpport
. Následující příklad ho nastaví na 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
Restartujte SQL Server.
sudo systemctl restart mssql-server
Nakonfigurujte bránu firewall
Druhým krokem je konfigurace brány firewall tak, aby umožňovala komunikaci na servertcpport
a portu 135. To umožňuje proces mapování koncových bodů RPC a proces MSDTC komunikovat externě s jinými správci transakcí a koordinátory. Skutečný postup se liší v závislosti na vaší linuxové distribuci a bráně firewall.
Následující příklad ukazuje, jak vytvořit tato pravidla pro 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
Následující příklad ukazuje, jak to lze provést v 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
Před konfigurací směrování portů v další části je důležité nakonfigurovat bránu firewall. Aktualizace brány firewall může v některých případech vymazat pravidla směrování portů.
Konfigurace směrování portů
Nakonfigurujte směrovací tabulku linuxového serveru tak, aby komunikace RPC na portu 135 byla přesměrována na network.rpcport
SQL Serveru . Konfigurační mechanismus pro předávání portů v různých distribucích se může lišit. Následující části obsahují pokyny pro Ubuntu, SUS Enterprise Linux (SLES) a Red Hat Enterprise Linux (RHEL).
Směrování portů v Ubuntu a SLES
Ubuntu a SLES nepoužívají službu brány firewall, takže pravidla iptable představují efektivní mechanismus pro dosažení směrování portů. Pravidla iptable nemusí během restartování trvat, takže následující příkazy také poskytují pokyny k obnovení pravidel po restartování.
Vytvořte pravidla směrování pro port 135. V následujícím příkladu se port 135 směruje na port RPC 13500 definovaný v předchozí části. Nahraďte
<ipaddress>
IP adresou vašeho serveru.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
v předchozích příkazech pomáhá s řízením těchto pravidel v pozdějších příkazech.Zobrazte pravidla směrování, která jste vytvořili, pomocí následujícího příkazu:
sudo iptables -S -t nat | grep "RpcEndPointMapper"
Uložte pravidla směrování do souboru na svém počítači.
sudo iptables-save > /etc/iptables.conf
Pokud chcete pravidla po restartování znovu načíst, přidejte do
/etc/rc.local
(pro Ubuntu) nebo do/etc/init.d/after.local
(pro SLES) následující příkaz:iptables-restore < /etc/iptables.conf
Poznámka
Abyste mohli upravovat soubory
rc.local
neboafter.local
, musíte mít oprávnění superuživatele (sudo).
Příkazy iptables-save a iptables-restore spolu s konfigurací spouštění rc.local
/after.local
poskytují základní mechanismus pro ukládání a obnovení položek iptables. V závislosti na vaší linuxové distribuci můžou být k dispozici pokročilejší nebo automatizované možnosti. Alternativou ubuntu je například balíček iptables-persistent
k trvalému zadávání položek.
Předchozí kroky předpokládají pevnou IP adresu. Pokud se IP adresa vaší instance SQL Serveru změní (kvůli ručnímu zásahu nebo dhcp), musíte odebrat a znovu vytvořit pravidla směrování, pokud byly vytvořeny s iptables. Pokud potřebujete znovu vytvořit nebo odstranit existující pravidla směrování, můžete pomocí následujícího příkazu odebrat stará pravidla RpcEndPointMapper
:
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Směrování portů v RHEL
V distribucích, které používají bránu firewall službu, jako je Red Hat Enterprise Linux, lze stejnou službu použít k otevření portu na serveru i pro přesměrování interních portů. Například v systému Red Hat Enterprise Linux byste měli použít službu brány firewall s bránou firewall (prostřednictvím nástroje pro konfiguraci s -add-forward-port
nebo podobnými možnostmi) k vytvoření a správě pravidel pro předávání trvalých portů místo použití iptables.
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload
Ověřit
V tuto chvíli by měl být SQL Server schopný účastnit se distribuovaných transakcí. Pokud chcete ověřit, že SQL Server naslouchá, spusťte příkaz netstat (pokud používáte RHEL, možná budete muset napřed nainstalovat balíček net-tools):
sudo netstat -tulpn | grep sqlservr
Měl by se zobrazit výstup podobný následujícímu příkladu:
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
Po restartování však SQL Server nezačne aktivně naslouchat na servertcpport
, dokud neproběhne první distribuovaná transakce. V tomto případě byste neviděli SQL Server naslouchat na portu 51999, dokud nedojde k první distribuované transakci.
Konfigurace ověřování při komunikaci RPC pro MSDTC
MSDTC pro SQL Server v Linuxu ve výchozím nastavení nepoužívá ověřování při komunikaci RPC. Pokud je však hostitelský počítač připojený k doméně služby Active Directory, je možné nakonfigurovat MSDTC tak, aby používal ověřenou komunikaci RPC pomocí následujících nastavení mssql-conf:
Nastavení | Popis |
---|---|
distributedtransaction.allowonlysecurerpccalls |
Konfigurujte pouze zabezpečené volání RPC pro distribuované transakce. Výchozí hodnota je 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Nakonfigurujte volání RPC týkající se pouze zabezpečení pro distribuované transakce. Výchozí hodnota je 0. |
distributedtransaction.turnoffrpcsecurity |
Povolte nebo zakažte zabezpečení RPC pro distribuované transakce. Výchozí hodnota je 0. |
Další pokyny
Active Directory
Microsoft doporučuje používat MSDTC s povoleným RPC, pokud je SQL Server zaregistrovaný v konfiguraci služby Active Directory. Pokud je SQL Server nakonfigurovaný tak, aby používal ověřování Active Directory, MSDTC ve výchozím nastavení používá zabezpečení RPC vzájemného ověřování.
Windows a Linux
Pokud klient používající operační systém Windows potřebuje vstoupit do distribuované transakce se SQL Serverem na Linuxu, musí mít následující minimální verzi operačního systému Windows:
Operační systém | Minimální verze | Sestavení operačního systému |
---|---|---|
Windows Server | 1903 | 18362.30.190401-1528 |
Windows 10 | 1903 | 18362.267 |