Megosztás a következőn keresztül:


A Microsoft Distributed Transaction Coordinator (MSDTC) konfigurálása Linuxon

A következőkre vonatkozik:SQL Server Linux rendszeren

Ez a cikk bemutatja, hogyan konfigurálható a Microsoft Distributed Transaction Coordinator (MSDTC) Linuxon.

A Linuxon futó MSDTC az SQL Server 2017 (14.x) kumulatív 16-os és újabb verzióiban támogatott.

Áttekintés

Az elosztott tranzakciók linuxos SQL Serveren való engedélyezéséhez be kell vezetned az MSDTC-t és a távoli eljáráshívási (RPC) végpontleképező funkciót az SQL Serveren. Alapértelmezés szerint egy RPC-végpontleképezési folyamat figyeli a 135-ös porton a bejövő RPC-kérelmeket, és a távoli kérések számára a regisztrált összetevők adatait biztosítja. A távoli kérések a végpontleképező által visszaadott információk segítségével kommunikálhatnak a regisztrált RPC-összetevőkkel, például az MSDTC-szolgáltatásokkal.

Egy folyamathoz szuperfelhasználói jogosultságokra van szükség, hogy jól ismert portokhoz (1024-nél kisebb portszámokhoz) kötődjenek Linuxon. Annak érdekében, hogy az SQL Server ne induljon el az RPC végponttérképezési folyamat gyökérjogosultságaival, a rendszergazdáknak a iptables segítségével kell hálózati címfordítást létrehozniuk, hogy a 135-ös port forgalmát az SQL Server példány RPC végponttérképezési folyamatára irányítsák.

Az MSDTC két konfigurációs paramétert használ az mssql-conf segédprogram:

mssql-conf beállítás Leírás
network.rpcport A TCP-port, amelyhez az RPC végpont-leképező kapcsolódik.
distributedtransaction.servertcpport Az a port, amelyet az MSDTC-kiszolgáló figyel. Ha nincs beállítva, az MSDTC szolgáltatás véletlenszerű rövid élettartamú portot használ a szolgáltatás újraindításakor, és a tűzfalkivételeket újra kell konfigurálni, hogy az MSDTC szolgáltatás folytatni tudja a kommunikációt.

További információ ezekről a beállításokról és más kapcsolódó MSDTC-beállításokról: Sql Server konfigurálása Linuxon az mssql-conf eszközzel.

Támogatott tranzakciós szabványok

A következő MSDTC-konfigurációk támogatottak:

Tranzakciós szabvány Adatforrások ODBC-illesztő JDBC-illesztő
OLE-TX tranzakciók SQL Server on Linux Igen Nem
XA elosztott tranzakciók SQL Server, egyéb ODBC- és JDBC-adatforrások, amelyek támogatják az XA-t Igen (17.3-os vagy újabb verziót igényel) Igen
Elosztott tranzakciók a csatolt kiszolgálón SQL Server Igen Nem

További információ: XA-tranzakciók ismertetése.

AZ MSDTC konfigurációs lépései

Hajtsa végre az alábbi három lépést az SQL Server MSDTC-kommunikációjának és funkcióinak konfigurálásához.

  • Konfigurálja network.rpcport és distributedtransaction.servertcpport az mssql-conf használatával.
  • Konfigurálja a tűzfalat a distributedtransaction.servertcpport és a 135-ös porton való kommunikáció engedélyezéséhez.
  • Konfigurálja a Linux-kiszolgáló útválasztását, hogy a 135-ös porton futó RPC-kommunikáció az SQL Server-példányra network.rpcportlegyen átirányítva.

Az alábbi szakaszok részletes útmutatást nyújtanak az egyes lépésekhez.

RPC- és MSDTC-portok konfigurálása

Konfigurálja network.rpcport és distributedtransaction.servertcpport az mssql-conf használatával. Ez a lépés az SQL Serverre vonatkozik, és minden támogatott disztribúcióban gyakori.

  1. Az érték beállításához használja network.rpcport. Az alábbi példa 13500-ra állítja.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. Állítsa be a distributedtransaction.servertcpport értéket. Az alábbi példa 51999-et állít be.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. Indítsa újra az SQL Servert.

    sudo systemctl restart mssql-server
    

A tűzfal konfigurálása

Konfigurálja a tűzfalat a servertcpport és a 135-ös porton való kommunikáció engedélyezéséhez. Ez a lépés lehetővé teszi, hogy az RPC-végpontleképezési folyamat és az MSDTC-folyamat külsőleg kommunikáljon más tranzakciókezelőkkel és koordinátorokkal. A tényleges eljárás a Linux-disztribúciótól és a tűzfaltól függően változik.

Az alábbi példa bemutatja, hogyan lehet létrehozni ezeket a szabályokat Ubunturendszeren.

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

Fontos, hogy konfigurálja a tűzfalat, mielőtt a következő szakaszban a porttovábbítást konfigurálná. A tűzfal frissítése bizonyos esetekben törölheti a portválasztási szabályokat.

Port-útválasztás konfigurálása

Konfigurálja a Linux-kiszolgáló útválasztási tábláját úgy, hogy a 135-ös porton futó RPC-kommunikáció átirányítva legyen az SQL Server-példányra network.rpcport. A porttovábbítás konfigurációs mechanizmusa eltérő lehet a különböző disztribúciókban. Az alábbi szakaszok útmutatást nyújtanak az Ubuntu, a SUSE Enterprise Linux (SLES) és a Red Hat Enterprise Linux (RHEL) rendszerekhez.

Az Ubuntu és az SLES nem használja a tűzfalas szolgáltatást, ezért az iptables-szabályok hatékony mechanizmust jelentenek a portok útválasztásának eléréséhez. Előfordulhat , hogy az iptables-szabályok nem maradnak fenn az újraindítások során, ezért az alábbi parancsok útmutatást nyújtanak a szabályok újraindítás utáni visszaállításához is.

  1. Útválasztási szabályok létrehozása a 135-ös porthoz. Az alábbi példában a 135-ös port az előző szakaszban definiált 13500 RPC-portra lesz irányítva. Cserélje le <ipaddress> a kiszolgáló IP-címére.

    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
    

    Az --comment RpcEndPointMapper előző parancsok paramétere segít ezeknek a szabályoknak a későbbi parancsokban való kezelésében.

  2. Tekintse meg a következő paranccsal létrehozott útválasztási szabályokat:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Mentse az útválasztási szabályokat egy fájlba a számítógépen.

    sudo iptables-save > /etc/iptables.conf
    
  4. A szabályok újraindítás utáni újratöltéséhez adja hozzá a következő parancsot /etc/rc.local (Ubuntu esetén) vagy /etc/init.d/after.local (SLES esetén):

    iptables-restore < /etc/iptables.conf
    

    Jegyzet

    A rc.local vagy after.local fájlok szerkesztéséhez super user (sudo) jogosultságokkal kell rendelkeznie.

A iptables-save parancsok és iptables-restore az indításirc.local/after.localkonfiguráció egy alapvető mechanizmust biztosítanak az iptables-bejegyzések mentéséhez és visszaállításához. A Linux-disztribúciótól függően előfordulhat, hogy fejlettebb vagy automatizáltabb lehetőségek állnak rendelkezésre. Az Ubuntu alternatíva például a iptables-persistent csomag, amely állandóvá teszi a bejegyzéseket.

Az előző lépések rögzített IP-címet feltételeznek. Ha az SQL Server-példány IP-címe megváltozik (manuális beavatkozás vagy DHCP miatt), el kell távolítania és újra létre kell hoznia az útválasztási szabályokat, ha iptable-okkal hozta létre őket. Ha újra létre kell hoznia vagy törölnie kell a meglévő útválasztási szabályokat, a következő paranccsal távolítsa el a régi RpcEndPointMapper szabályokat:

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

Igazol

Ezen a ponton az SQL Servernek képesnek kell lennie részt venni az elosztott tranzakciókban. Annak ellenőrzéséhez, hogy az SQL Server figyel-e, futtassa a netstat parancsot. Ha RHEL-t használ, előfordulhat, hogy először telepítenie kell a net-tools csomagot:

sudo netstat -tulpn | grep sqlservr

A következő példához hasonló kimenetnek kell megjelennie:

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

Újraindítás után azonban az SQL Server csak az első elosztott tranzakció után kezd el hallgatni a servertcpport-ra. Ebben az esetben az SQL Server nem figyeli az 51999-s portot ebben a példában az első elosztott tranzakcióig.

Hitelesítés konfigurálása az MSDTC RPC-kommunikációján

A Linuxon futó SQL Server MSDTC alapértelmezés szerint nem használ hitelesítést az RPC-kommunikációhoz. Ha azonban a gazdagép egy Active Directory-tartományhoz csatlakozik, az MSDTC-t úgy konfigurálhatja, hogy hitelesített RPC-kommunikációt használjon az alábbi mssql-conf beállításokkal:

Beállítás Leírás
distributedtransaction.allowonlysecurerpccalls Csak az elosztott tranzakciókhoz konfiguráljon biztonságos RPC-hívásokat. Az alapértelmezett érték 0.
distributedtransaction.fallbacktounsecurerpcifnecessary Konfigurálja a biztonsági célú RPC-hívásokat elosztott tranzakciókhoz. Az alapértelmezett érték 0.
distributedtransaction.turnoffrpcsecurity Az elosztott tranzakciók RPC-biztonságának engedélyezése vagy letiltása. Az alapértelmezett érték 0.

Támogatottság és kompatibilitás

Active Directory

A Microsoft javasolja az MSDTC használatát az RPC engedélyezésével, ha az SQL Server regisztrálva van egy Active Directory-konfigurációban. Ha az SQL Servert Active Directory-hitelesítés használatára konfigurálja, az MSDTC alapértelmezés szerint kölcsönös hitelesítési RPC-biztonságot használ.

Windows és Linux

Ha egy Windows operációs rendszeren lévő ügyfélnek csatlakoznia kell az elosztott tranzakcióhoz a Linuxon futó SQL Serverrel, akkor a Windows operációs rendszer minimális verziójával kell rendelkeznie:

Operációs rendszer Minimális verzió Operációs rendszer buildelése
Windows Server 1903 18362.30.190401-1528
Windows 10 1903 18362.267