Cara mengonfigurasi Koordinator Transaksi Terdistribusi Microsoft (MSDTC) di Linux
Berlaku untuk: SQL Server - Linux
Artikel ini menjelaskan cara mengonfigurasi Koordinator Transaksi Terdistribusi Microsoft (MSDTC) di Linux.
MSDTC di Linux didukung pada SQL Server 2017 (14.x) Pembaruan Kumulatif 16 dan versi yang lebih baru.
Gambaran Umum
Transaksi terdistribusi diaktifkan di SQL Server di Linux dengan memperkenalkan fungsionalitas pemeta titik akhir MSDTC dan panggilan prosedur jarak jauh (RPC) dalam SQL Server. Secara default, proses pemetaan titik akhir RPC mendengarkan pada port 135 untuk permintaan RPC masuk dan menyediakan informasi komponen terdaftar untuk permintaan jarak jauh. Permintaan jarak jauh dapat menggunakan informasi yang dikembalikan oleh pemeta titik akhir untuk berkomunikasi dengan komponen RPC terdaftar, seperti layanan MSDTC. Proses memerlukan hak istimewa pengguna super untuk mengikat port terkenal (nomor port kurang dari 1024) di Linux. Untuk menghindari memulai SQL Server dengan hak istimewa root untuk proses pemetaan titik akhir RPC, administrator sistem harus menggunakan iptable untuk membuat Terjemahan Alamat Jaringan untuk merutekan lalu lintas pada port 135 ke proses pemetaan titik akhir RPC SQL Server.
MSDTC menggunakan dua parameter konfigurasi untuk utilitas mssql-conf :
pengaturan mssql-conf | Deskripsi |
---|---|
network.rpcport |
Port TCP yang diikat oleh proses pemeta titik akhir RPC. |
distributedtransaction.servertcpport |
Port yang didengarkan server MSDTC. Jika tidak diatur, layanan MSDTC menggunakan port ephemeral acak pada restart layanan, dan pengecualian firewall perlu dikonfigurasi ulang untuk memastikan bahwa layanan MSDTC dapat melanjutkan komunikasi. |
Untuk informasi selengkapnya tentang pengaturan ini dan pengaturan MSDTC terkait lainnya, lihat Mengonfigurasi SQL Server di Linux dengan alat mssql-conf.
Standar transaksi yang didukung
Konfigurasi MSDTC berikut didukung:
Standar transaksi | Sumber data | Driver ODBC | Driver JDBC |
---|---|---|---|
Transaksi OLE-TX | SQL Server di Linux | Ya | Tidak |
Transaksi terdistribusi XA | Sumber data SQL Server, ODBC lainnya, dan JDBC yang mendukung XA | Ya (memerlukan versi 17.3 atau yang lebih tinggi) | Ya |
Transaksi terdistribusi di server tertaut | SQL Server | Ya | Tidak |
Untuk informasi selengkapnya, lihat Memahami Transaksi XA.
Langkah-langkah konfigurasi MSDTC
Ada tiga langkah untuk mengonfigurasi komunikasi dan fungsionalitas MSDTC. Jika langkah-langkah konfigurasi yang diperlukan tidak dilakukan, SQL Server tidak mengaktifkan fungsionalitas MSDTC.
- Konfigurasikan
network.rpcport
dandistributedtransaction.servertcpport
gunakan mssql-conf. - Konfigurasikan firewall untuk mengizinkan komunikasi pada
distributedtransaction.servertcpport
dan port 135. - Konfigurasikan perutean server Linux sehingga komunikasi RPC pada port 135 dialihkan ke SQL Server
network.rpcport
.
Bagian berikut ini memberikan instruksi terperinci untuk setiap langkah.
Mengonfigurasi port RPC dan MSDTC
Pertama, konfigurasikan network.rpcport
dan distributedtransaction.servertcpport
gunakan mssql-conf. Langkah ini jika khusus untuk SQL Server dan umum di semua distribusi yang didukung.
Gunakan mssql-conf untuk mengatur
network.rpcport
nilai. Contoh berikut mengaturnya ke 13500.sudo /opt/mssql/bin/mssql-conf set network.rpcport 13500
Atur
distributedtransaction.servertcpport
nilai . Contoh berikut mengaturnya ke 51999.sudo /opt/mssql/bin/mssql-conf set distributedtransaction.servertcpport 51999
Mulai ulang SQL Server.
sudo systemctl restart mssql-server
Mengonfigurasi firewall
Langkah kedua adalah mengonfigurasi firewall untuk memungkinkan komunikasi pada servertcpport
dan port 135. Ini memungkinkan proses pemetaan titik akhir RPC dan proses MSDTC untuk berkomunikasi secara eksternal ke manajer transaksi dan koordinator lainnya. Langkah-langkah aktual untuk ini bervariasi tergantung pada distribusi Linux dan firewall Anda.
Contoh berikut menunjukkan cara membuat aturan ini di 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
Contoh berikut menunjukkan bagaimana hal ini dapat dilakukan di 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
Penting untuk mengonfigurasi firewall sebelum mengonfigurasi perutean port di bagian berikutnya. Menyegarkan firewall dapat menghapus aturan perutean port dalam beberapa kasus.
Mengonfigurasi perutean port
Konfigurasikan tabel perutean server Linux sehingga komunikasi RPC pada port 135 dialihkan ke SQL Server network.rpcport
. Mekanisme konfigurasi untuk penerusan port pada distribusi yang berbeda mungkin berbeda. Bagian berikut memberikan panduan untuk Ubuntu, SUS Enterprise Linux (SLES), dan Red Hat Enterprise Linux (RHEL).
Perutean port di Ubuntu dan SLES
Ubuntu dan SLES tidak menggunakan layanan firewall , sehingga aturan iptable adalah mekanisme yang efisien untuk mencapai perutean port. Aturan iptable mungkin tidak bertahan selama mulai ulang, sehingga perintah berikut juga memberikan instruksi untuk memulihkan aturan setelah restart.
Buat aturan perutean untuk port 135. Dalam contoh berikut, port 135 diarahkan ke port RPC, 13500, yang ditentukan di bagian sebelumnya. Ganti
<ipaddress>
dengan alamat IP server Anda.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
Parameter
--comment RpcEndPointMapper
dalam perintah sebelumnya membantu mengelola aturan ini dalam perintah selanjutnya.Lihat aturan perutean yang Anda buat dengan perintah berikut:
sudo iptables -S -t nat | grep "RpcEndPointMapper"
Simpan aturan perutean ke file di komputer Anda.
sudo iptables-save > /etc/iptables.conf
Untuk memuat ulang aturan setelah menghidupkan ulang, tambahkan perintah berikut ke
/etc/rc.local
(untuk Ubuntu) atau ke/etc/init.d/after.local
(untuk SLES):iptables-restore < /etc/iptables.conf
Catatan
Anda harus memiliki hak istimewa pengguna super (sudo) untuk mengedit
rc.local
file atauafter.local
.
Perintah iptables-save dan iptables-restore, bersama dengan rc.local
/after.local
konfigurasi startup, menyediakan mekanisme dasar untuk menyimpan dan memulihkan entri iptables. Bergantung pada distribusi Linux Anda, mungkin ada opsi yang lebih canggih atau otomatis yang tersedia. Misalnya, alternatif Ubuntu adalah iptables-persistent
paket untuk membuat entri persisten.
Langkah-langkah sebelumnya mengasumsikan alamat IP tetap. Jika alamat IP untuk instans SQL Server Anda berubah (karena intervensi manual atau DHCP), Anda harus menghapus dan membuat ulang aturan perutean jika dibuat dengan iptable. Jika Anda perlu membuat ulang atau menghapus aturan perutean yang ada, Anda bisa menggunakan perintah berikut untuk menghapus aturan lama RpcEndPointMapper
:
sudo iptables -S -t nat | grep "RpcEndPointMapper" | sed 's/^-A //' | while read rule; do iptables -t nat -D $rule; done
Perutean port di RHEL
Pada distribusi yang menggunakan layanan firewall , seperti Red Hat Enterprise Linux, layanan yang sama dapat digunakan untuk membuka port di server dan penerusan port internal. Misalnya, di Red Hat Enterprise Linux, Anda harus menggunakan layanan firewalld (melalui utilitas konfigurasi firewall-cmd dengan -add-forward-port
atau opsi serupa) untuk membuat dan mengelola aturan penerusan port persisten alih-alih menggunakan iptable.
sudo firewall-cmd --permanent --add-forward-port=port=135:proto=tcp:toport=13500
sudo firewall-cmd --reload
Verifikasi
Pada titik ini, SQL Server harus dapat berpartisipasi dalam transaksi terdistribusi. Untuk memverifikasi bahwa SQL Server mendengarkan, jalankan perintah netstat (jika Anda menggunakan RHEL, Anda mungkin harus terlebih dahulu menginstal paket net-tools ):
sudo netstat -tulpn | grep sqlservr
Anda harus melihat output yang mirip dengan berikut ini:
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
Namun, setelah menghidupkan ulang, SQL Server tidak mulai mendengarkan servertcpport
hingga transaksi terdistribusi pertama. Dalam hal ini, Anda tidak akan melihat SQL Server mendengarkan port 51999 dalam contoh ini hingga transaksi terdistribusi pertama.
Mengonfigurasi autentikasi pada komunikasi RPC untuk MSDTC
MSDTC untuk SQL Server di Linux tidak menggunakan autentikasi pada komunikasi RPC secara default. Namun, ketika komputer host bergabung ke domain Direktori Aktif, dimungkinkan untuk mengonfigurasi MSDTC untuk menggunakan komunikasi RPC terautentikasi menggunakan pengaturan mssql-conf berikut:
Pengaturan | Deskripsi |
---|---|
distributedtransaction.allowonlysecurerpccalls |
Konfigurasikan panggilan RPC yang aman hanya untuk transaksi terdistribusi. Nilai default-nya adalah 0. |
distributedtransaction.fallbacktounsecurerpcifnecessary |
Konfigurasikan panggilan RPC keamanan hanya untuk transaksi terdistribusi. Nilai default-nya adalah 0. |
distributedtransaction.turnoffrpcsecurity |
Mengaktifkan atau menonaktifkan keamanan RPC untuk transaksi terdistribusi. Nilai default-nya adalah 0. |
Panduan tambahan
Direktori aktif
Microsoft merekomendasikan penggunaan MSDTC dengan RPC diaktifkan jika SQL Server terdaftar ke konfigurasi Direktori Aktif. Jika SQL Server dikonfigurasi untuk menggunakan autentikasi Direktori Aktif, MSDTC menggunakan keamanan RPC autentikasi bersama secara default.
Windows dan Linux
Jika klien pada sistem operasi Windows perlu mendaftar ke dalam transaksi terdistribusi dengan SQL Server di Linux, klien harus memiliki versi minimum sistem operasi Windows berikut:
Sistem operasi | Versi minimum | OS Build |
---|---|---|
Windows Server | 1903 | 18362.30.190401-1528 |
Windows 10 | 1903 | 18362.267 |