Aracılığıyla paylaş


Linux üzerinde Microsoft Dağıtılmış İşlem Düzenleyicisi'ni (MSDTC) yapılandırma

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu makalede, Linux üzerinde Microsoft Dağıtılmış İşlem Düzenleyicisi'nin (MSDTC) nasıl yapılandırıldığı açıklanır.

Linux üzerinde MSDTC, SQL Server 2017 (14.x) Toplu Güncelleştirme 16 ve sonraki sürümlerde desteklenir.

Genel bakış

SQL Server'da MSDTC ve uzaktan yordam çağrısı (RPC) uç nokta eşleyici işlevselliğini kullanıma sunarak Linux üzerinde SQL Server'da dağıtılmış işlemleri etkinleştirebilirsiniz. Varsayılan olarak, bir RPC uç nokta eşleme işlemi gelen RPC istekleri için 135 numaralı bağlantı noktasını dinler ve uzak isteklere kayıtlı bileşen bilgileri sağlar. Uzak istekler, MSDTC hizmetleri gibi kayıtlı RPC bileşenleriyle iletişim kurmak için uç nokta eşleyicisi tarafından döndürülen bilgileri kullanabilir.

Bir işlem, Linux'ta iyi bilinen bağlantı noktalarına (1024'ten küçük bağlantı noktası numaraları) bağlanmak için süper kullanıcı ayrıcalıkları gerektirir. SQL Server'ın RPC uç nokta eşleyici işlemi için kök ayrıcalıklarla başlatılmasını önlemek için, sistem yöneticilerinin 135 numaralı bağlantı noktasındaki trafiği SQL Server örneğinin RPC uç nokta eşleme işlemine yönlendirmek üzere Ağ Adresi Çevirisi oluşturmak için iptable'ları kullanması gerekir.

MSDTC, mssql-conf yardımcı programı için iki yapılandırma parametresi kullanır:

mssql-conf ayarı Açıklama
network.rpcport RPC uç nokta eşleyici sürecinin bağlandığı TCP bağlantı noktası.
distributedtransaction.servertcpport MSDTC sunucusunun dinlediği bağlantı noktası. Ayarlanmamışsa, MSDTC hizmeti hizmet yeniden başlatmalarında rastgele kısa ömürlü bir bağlantı noktası kullanır ve MSDTC hizmetinin iletişime devam etmesini sağlamak için güvenlik duvarı özel durumlarının yeniden yapılandırılması gerekir.

Bu ayarlar ve diğer ilgili MSDTC ayarları hakkında daha fazla bilgi için bkz. mssql-conf aracıyla Linux üzerinde SQL Server yapılandırma.

Desteklenen işlem standartları

Aşağıdaki MSDTC yapılandırmaları desteklenir:

İşlem standardı Veri kaynakları ODBC sürücüsü JDBC sürücüsü
OLE-TX işlemleri Linux üzerinde SQL Server Evet Hayır
XA dağıtılmış işlemler XA'yı destekleyen SQL Server, diğer ODBC ve JDBC veri kaynakları Evet (17.3 veya sonraki sürümleri gerektirir) Evet
Bağlı sunucudaki dağıtılmış işlemler SQL Server Evet Hayır

Daha fazla bilgi için bkz. XA İşlemlerini Anlama .

MSDTC yapılandırma adımları

SQL Server için MSDTC iletişimini ve işlevselliğini yapılandırmak için aşağıdaki üç adımı tamamlayın.

  • network.rpcport ve distributedtransaction.servertcpport öğesini mssql-conf ile yapılandırın.
  • güvenlik duvarını distributedtransaction.servertcpport ve bağlantı noktası 135'te iletişime izin verecek şekilde yapılandırın.
  • 135 numaralı bağlantı noktasındaki RPC iletişiminin SQL Server örneğine network.rpcportyeniden yönlendirilmesi için Linux sunucu yönlendirmesini yapılandırın.

Aşağıdaki bölümlerde her adım için ayrıntılı yönergeler sağlanır.

RPC ve MSDTC bağlantı noktalarını yapılandırma

network.rpcport ve distributedtransaction.servertcpport öğesini mssql-conf ile yapılandırın. Bu adım SQL Server'a özgüdür ve desteklenen tüm dağıtımlarda yaygındır.

  1. değerini ayarlamak için network.rpcport kullanın. Aşağıdaki örnek bunu 13500 olarak ayarlar.

    sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
    
  2. distributedtransaction.servertcpport değerini ayarlayın. Aşağıdaki örnek bunu 51999 olarak ayarlar.

    sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
    
  3. SQL Server'i yeniden başlatın.

    sudo systemctl restart mssql-server
    

Güvenlik duvarını yapılandırma

güvenlik duvarını servertcpport ve bağlantı noktası 135'te iletişime izin verecek şekilde yapılandırın. Bu adım, RPC uç nokta eşleme işleminin ve MSDTC işleminin diğer işlem yöneticilerine ve koordinatörlerine harici olarak iletişim kurmasını sağlar. Gerçek yordam, Linux dağıtımınıza ve güvenlik duvarınıza bağlı olarak değişir.

Aşağıdaki örnekte, Ubuntuüzerinde bu kuralların nasıl oluşturulacağı gösterilmektedir.

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

Sonraki bölümde bağlantı noktası yönlendirmesini yapılandırmadan önce güvenlik duvarını yapılandırmak önemlidir. Güvenlik duvarını yenilemek bazı durumlarda bağlantı noktası yönlendirme kurallarını temizleyebilir.

Bağlantı noktası yönlendirmeyi yapılandırma

135 numaralı bağlantı noktasındaki RPC iletişiminin SQL Server örneğine network.rpcportyeniden yönlendirilmesi için Linux sunucu yönlendirme tablosunu yapılandırın. Bağlantı noktası iletme yapılandırma mekanizması farklı dağıtımlarda farklılık gösterebilir. Aşağıdaki bölümlerde Ubuntu, SUSE Enterprise Linux (SLES) ve Red Hat Enterprise Linux (RHEL) için yönergeler sağlanır.

Ubuntu ve SLES güvenlik duvarı hizmetini kullanmaz, bu nedenle iptables kuralları bağlantı noktası yönlendirmesi elde etmek için verimli bir mekanizmadır. Iptables kuralları yeniden başlatmalar sırasında kalıcı olmayabilir, bu nedenle aşağıdaki komutlar yeniden başlatma sonrasında kuralları geri yüklemeye yönelik yönergeler de sağlar.

  1. 135 numaralı bağlantı noktası için yönlendirme kuralları oluşturun. Aşağıdaki örnekte, 135 numaralı bağlantı noktası önceki bölümde tanımlanan RPC bağlantı noktası 13500'e yönlendirilir. <ipaddress> yerine sunucunuzun IP adresini yazın.

    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 Önceki komutlardaki parametresi, sonraki komutlarda bu kuralları yönetmenize yardımcı olur.

  2. Aşağıdaki komutla oluşturduğunuz yönlendirme kurallarını görüntüleyin:

    sudo iptables -S -t nat | grep "RpcEndPointMapper"
    
  3. Yönlendirme kurallarını makinenizdeki bir dosyaya kaydedin.

    sudo iptables-save > /etc/iptables.conf
    
  4. Yeniden başlatma sonrasında kuralları yeniden yüklemek için aşağıdaki komutu /etc/rc.local (Ubuntu için) veya /etc/init.d/after.local (SLES için) ekleyin:

    iptables-restore < /etc/iptables.conf
    

    Not

    rc.local veya after.local dosyalarını düzenlemek için süper kullanıcı (sudo) ayrıcalıklarına sahip olmanız gerekir.

iptables-save ve iptables-restore komutları, başlangıç yapılandırmasıyla rc.local/after.local birlikte iptable girdilerini kaydetmek ve geri yüklemek için temel bir mekanizma sağlar. Linux dağıtımınıza bağlı olarak, daha gelişmiş veya otomatik seçenekler kullanılabilir. Örneğin, Ubuntu alternatifi, girişleri kalıcı hale getirmek için iptables-persistent paketidir.

Önceki adımlarda sabit bir IP adresi varsayılır. SQL Server örneğinizin IP adresi değişirse (el ile müdahale veya DHCP nedeniyle), yönlendirme kurallarını iptable'larla oluşturduysanız kaldırmanız ve yeniden oluşturmanız gerekir. Mevcut yönlendirme kurallarını yeniden oluşturmanız veya silmeniz gerekiyorsa, eski RpcEndPointMapper kuralları kaldırmak için aşağıdaki komutu kullanın:

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

Doğrulamak

Bu noktada, SQL Server dağıtılmış işlemlere katılabilmelidir. SQL Server'ın dinlediğini doğrulamak için netstat komutunu çalıştırın. RHEL kullanıyorsanız, önce net-tools paketini yüklemeniz gerekebilir:

sudo netstat -tulpn | grep sqlservr

Aşağıdaki örneğe benzer bir çıktı görmeniz gerekir:

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

Ancak, yeniden başlatıldıktan sonra SQL Server ilk dağıtılmış işleme kadar servertcpport dinlemeye başlamaz. Bu durumda, ilk dağıtılmış işleme kadar bu örnekte 51999 numaralı bağlantı noktasını dinleyen SQL Server'ı görmezsiniz.

MSDTC için RPC iletişiminde kimlik doğrulamasını yapılandırma

Linux üzerinde SQL Server için MSDTC varsayılan olarak RPC iletişiminde kimlik doğrulamasını kullanmaz. Ancak, konak makine bir Active Directory etki alanına katıldığında, aşağıdaki mssql-conf ayarlarını kullanarak MSDTC'yi kimliği doğrulanmış RPC iletişimini kullanacak şekilde yapılandırabilirsiniz:

Ayar Açıklama
distributedtransaction.allowonlysecurerpccalls Dağıtılmış işlemler için yalnızca güvenli RPC çağrılarını yapılandırın. Varsayılan değer 0'dır.
distributedtransaction.fallbacktounsecurerpcifnecessary Dağıtılmış işlemler için yalnızca güvenlik RPC çağrılarını yapılandırın. Varsayılan değer 0'dır.
distributedtransaction.turnoffrpcsecurity Dağıtılmış işlemler için RPC güvenliğini etkinleştirin veya devre dışı bırakın. Varsayılan değer 0'dır.

Desteklenebilirlik ve uyumluluk

Active Directory

Microsoft, SQL Server bir Active Directory yapılandırmasına kayıtlıysa RPC etkin olarak MSDTC kullanılmasını önerir. SQL Server'ı Active Directory kimlik doğrulamasını kullanacak şekilde yapılandırdığınızda, MSDTC varsayılan olarak karşılıklı kimlik doğrulaması RPC güvenliğini kullanır.

Windows ve Linux

Windows işletim sistemindeki bir istemcinin Linux üzerinde SQL Server ile dağıtılmış işleme dahil edilmesi gerekiyorsa, windows işletim sisteminin aşağıdaki en düşük sürümüne sahip olması gerekir:

İşletim Sistemi En düşük sürüm OS derlemesi
Windows Server 1903 18362.30.190401-1528
Windows 10 1903 18362.267