Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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.rpcportvedistributedtransaction.servertcpportöğesini mssql-conf ile yapılandırın. - güvenlik duvarını
distributedtransaction.servertcpportve 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.
değerini ayarlamak için
network.rpcportkullanın. Aşağıdaki örnek bunu 13500 olarak ayarlar.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500distributedtransaction.servertcpportdeğerini ayarlayın. Aşağıdaki örnek bunu 51999 olarak ayarlar.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999SQL 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.
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.Aşağıdaki komutla oluşturduğunuz yönlendirme kurallarını görüntüleyin:
sudo iptables -S -t nat | grep "RpcEndPointMapper"Yönlendirme kurallarını makinenizdeki bir dosyaya kaydedin.
sudo iptables-save > /etc/iptables.confYeniden 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.confNot
rc.localveyaafter.localdosyaları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 |