Setiap titik akhir proxy database untuk ApsaraDB RDS for MySQL memiliki dua pengaturan yang mengontrol pengarahan lalu lintas SQL: read/write attribute (node mana yang menangani operasi tulis versus baca) dan read weight (bagaimana lalu lintas baca didistribusikan ke node tersebut). Mengonfigurasi pengaturan ini dengan benar memungkinkan Anda meningkatkan throughput baca, mengisolasi beban kerja pelaporan, serta melakukan pemeliharaan secara aman tanpa gangguan layanan.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Mengaktifkan database proxy untuk instans RDS Anda
Memiliki instans yang menjalankan Edisi Ketersediaan Tinggi atau Edisi Kluster
Edisi Ketersediaan Tinggi: Buat setidaknya satu instansi hanya baca untuk mengaktifkan pemisahan baca/tulis
Edisi Kluster: Node primary dan secondary menangani pemisahan baca/tulis secara native
Atribut baca/tulis
Pilih mode
Mode | Paling cocok untuk | Permintaan tulis | Permintaan baca |
Read/Write | Menambah throughput baca melalui instans primary dan instansi hanya baca | Selalu diarahkan ke instans primary | Didistribusikan ke node yang dikonfigurasi berdasarkan bobot |
Read-only | Mengisolasi beban kerja hanya baca seperti laporan | Tidak diterima — klien menerima error koneksi | Didistribusikan ke instansi hanya baca secara round-robin |
Mode Read/Write memerlukan setidaknya satu instans primary dan satu instans hanya baca dalam kebijakan akses proxy. Mode ini mendukung transaction splitting dan connection pools.
Mode Read-only memerlukan setidaknya satu instans hanya baca. Instans primary tidak terlibat dalam pengarahan, dan transaction splitting tidak didukung. Setiap koneksi klien dipetakan ke satu koneksi pada satu instans hanya baca. Kapasitas koneksi total sama dengan jumlah koneksi dari semua instans hanya baca yang dikonfigurasi.
Untuk instans Edisi Kluster, mode Read/Write hanya mengirim permintaan tulis ke node primary, sedangkan mode Read-only mengarahkan permintaan baca ke node secondary secara round-robin. Daftar putih IP untuk database proxy tetap disinkronkan secara otomatis dengan daftar putih instans primary.
Perilaku pengarahan dalam kasus khusus
Tabel berikut menunjukkan apa yang terjadi dalam mode Read/Write ketika instans hanya baca tidak tersedia, dan dalam mode Read-only di semua skenario bobot.
Mode | Metode bobot | Bobot Utama | Operasi normal | Instansi hanya baca terakhir dihapus | Semua instansi hanya baca gagal |
Read-only | System-assigned atau Custom | Tidak dapat diatur | Primary: tidak ada baca atau tulis (tidak diteruskan). Proxy: dapat dibaca, tidak dapat ditulis | Primary: tidak ada baca atau tulis. Proxy: error koneksi | Primary: tidak ada baca atau tulis. Proxy: error koneksi |
Read/Write | System-assigned | 0 (default) | Primary: hanya tulis, tidak baca. Proxy: baca dan tulis | Primary: baca dan tulis. Proxy: baca dan tulis | Primary: baca dan tulis. Proxy: baca dan tulis |
Read/Write | Custom | Lebih besar dari 0 | Primary: baca dan tulis. Proxy: baca dan tulis | Primary: baca dan tulis. Proxy: baca dan tulis | Primary: baca dan tulis. Proxy: baca dan tulis |
Read/Write | Custom | 0 | Primary: hanya tulis, tidak baca. Proxy: baca dan tulis | Primary: baca dan tulis. Proxy: baca dan tulis | Primary: baca dan tulis. Proxy: baca dan tulis |
Dalam mode Read-only, "tidak diteruskan" berarti instans primary tidak menerima permintaan baca. Jika proxy tidak memiliki instans yang dapat dibaca, klien akan menerima error koneksi.
Dalam mode Read/Write dengan bobot primary diatur ke 0, permintaan baca tidak dikirim ke instans primary secara default. Permintaan baca hanya dikirim ke instans primary jika node read-only tidak sehat, petunjuk memaksa pengarahan ke sana, atau transaction splitting diaktifkan.
Algoritma load balancing
Proxy mendukung dua algoritma untuk mendistribusikan permintaan baca ke node-node.
Versi sebelum 2.25.4: Hanya load balancing berbasis bobot yang tersedia.
Versi 2.25.4 dan lebih baru: Kedua algoritma tersedia. Gunakan load balancing berbasis active requests kecuali Anda memiliki alasan khusus untuk memilih distribusi berbasis bobot yang ketat — algoritma ini memberikan performa puncak lebih baik untuk kluster dan mengurangi dampak kegagalan satu node.
Load balancing berbasis active requests (direkomendasikan)
Mengarahkan setiap permintaan ke node dengan rasio (Active Requests / Node Weight) terendah. Ini menyesuaikan secara real time terhadap beban yang tidak merata dan kurang terpengaruh oleh node yang lambat.
Contoh dengan bobot primary 100, bobot node read-only 1 sebesar 200, dan bobot node read-only 2 sebesar 200:
Putaran | Permintaan Aktif Utama | Permintaan aktif node read-only 1 | Permintaan aktif node read-only 2 | Diarahkan ke |
1 | 1 (rasio: 0,01) | 5 (rasio: 0,025) | 6 (rasio: 0,03) | Node primary |
2 | 2 | 4 | 6 | Node read-only 1 |
3 | 2 | 5 | 3 | Node read-only 2 |
4 | 1 | 2 | 3 | Node read-only 1 |
5 | 1 | 2 | 1 | Node read-only 2 |
6 | 0 | 3 | 3 | Node primary |
Load balancing berbasis bobot
Mendistribusikan permintaan baca secara ketat berdasarkan rasio bobot menggunakan algoritma round-robin. Setiap ronde penjadwalan memilih node dengan nilai current_weight tertinggi, lalu menyesuaikan bobot sebagai berikut:
Seleksi: Node dengan
current_weighttertinggi dipilih. Jika seri, urutan dalam daftar konfigurasi menentukan pemenangnya.Akumulasi: Setelah setiap ronde,
current_weightsetiap node bertambah sebesar bobotnya sendiri.Reset:
current_weightnode yang dipilih dikurangi dengan jumlah bobot semua node.
Contoh dengan bobot primary 100, bobot node read-only 1 sebesar 200, dan bobot node read-only 2 sebesar 200:
Round | Primary | Node read-only 1 | Node read-only 2 | Diarahkan ke |
1 | 0 | 0 | 0 | Node primary |
2 | −400 | 200 | 200 | Node read-only 1 |
3 | −300 | −100 | 400 | Node read-only 2 |
4 | −200 | 100 | 100 | Node read-only 1 |
5 | −100 | −200 | 300 | Node read-only 2 |
6 | 0 | 0 | 0 | Node primary |
Konfigurasi atribut baca/tulis dan bobot baca
Buka halaman RDS Instances. Di bilah navigasi atas, pilih wilayah, lalu klik ID instans target.
Di panel navigasi kiri, klik Database Proxy.
Di bagian Connection Information, temukan titik akhir proxy target dan klik Modify Configuration di kolom Actions.
Di dialog tersebut, atur Read/Write Attributes ke salah satu opsi berikut:
Read/Write (Read/Write Splitting)
Read-only (Primary Instance Not Connected to Receive Write Requests)
Di bagian Read Weight Allocation, pilih metode bobot:
Metode
Perilaku
Kapan digunakan
Automatic Distribution
Sistem menetapkan bobot berdasarkan tipe instans. Instans hanya baca baru secara otomatis disertakan dengan system-assigned weights — tidak perlu pembaruan manual.
Kluster homogen di mana kapasitas instans serupa
Custom
Tetapkan bobot eksplisit (0–10.000) untuk setiap instans. Instans hanya baca baru secara default bernilai 0 dan harus dikonfigurasi secara manual.
Kluster heterogen di mana Anda ingin kontrol presisi atas distribusi trafik
Cara kerja bobot: Bobot yang lebih tinggi berarti lebih banyak permintaan baca. Misalnya, jika primary memiliki bobot 0 dan tiga instans hanya baca memiliki bobot 100, 200, dan 200, permintaan baca didistribusikan dalam rasio 1:2:2. Primary tetap menerima semua permintaan tulis.
Bobot baca mengontrol cara proxy mendistribusikan permintaan baca ke database backend dan bersifat independen dari fitur nearest access. Gunakan keduanya bersamaan untuk meminimalkan latensi.
Instans yang telah dikonfigurasi dengan replication delay tidak dapat diatur bobotnya.
Menghapus instans hanya baca akan menghapus bobotnya secara otomatis. Bobot instans lain tidak berubah.
Perubahan bobot langsung berlaku tanpa gangguan layanan. Koneksi yang sudah ada tidak diputus; baik koneksi baru maupun yang sudah ada diarahkan berdasarkan bobot yang diperbarui.
Sebelum menghapus instans hanya baca dari proxy: Atur bobotnya ke 0 terlebih dahulu, tunggu sesi aktif selesai, lalu hapus instans tersebut. Lihat Matikan instans hanya baca tanpa gangguan layanan untuk prosedur lengkapnya.
Dampak perubahan bobot terhadap sesi yang sedang berjalan
Perilaku perubahan bobot terhadap sesi aktif bergantung pada versi mesin database proxy. Untuk memeriksa atau meningkatkan versi Anda, lihat Lihat versi mesin minor database proxy dan Tingkatkan versi mesin minor database proxy.
Skenario | Versi mesin 2.8.41 dan lebih baru | Versi sebelum 2.8.41 |
Sesi baru terhubung ke node dengan bobot 0? | Tidak | Tidak |
Bobot diubah dari non-nol ke 0: apakah node dihapus dari sesi yang sedang berjalan? | Tidak | Tidak |
Bobot diubah dari non-nol ke 0: apakah sesi yang sedang berjalan diarahkan berdasarkan bobot baru? | Tidak | Protokol PS (Prepared Statement): Tidak. Protokol berbasis teks: Ya |
Bobot diubah dari 0 ke non-nol: apakah node ditambahkan ke sesi yang sedang berjalan? | Tidak | Ya |
Bobot diubah dari 0 ke non-nol: apakah sesi yang sedang berjalan diarahkan berdasarkan bobot baru? | Tidak | Protokol PS: Tidak. Protokol berbasis teks: Ya |
Menghapus node read-only dengan bobot non-nol menyebabkan koneksi transient? | Tidak. Proxy memiliki mekanisme | Ya |
Menghapus node read-only dengan bobot 0 menyebabkan koneksi transient? | Tidak | Ya jika permintaan sedang dieksekusi di node tersebut saat dihapus; jika tidak, Tidak |
Menghentikan koneksi di node read-only dengan bobot 0: apakah koneksi dihentikan? | Ya | Proxy versi 1.x: dihentikan hanya jika ada sesi aktif; jika tidak, koneksi tidak dihentikan dan secara otomatis dibuat ulang |
Menghentikan koneksi di node read-only dengan bobot non-nol: apakah koneksi dihentikan? | — | — |
Praktik terbaik
Matikan instans hanya baca tanpa gangguan layanan
Untuk menghapus instans hanya baca (misalnya, instans C dalam kluster dengan primary A dan instans hanya baca B dan C) tanpa mengganggu lalu lintas:
Buka halaman RDS Instances, pilih wilayah, lalu klik ID instans primary A.
Di panel navigasi kiri, klik Database Proxy. Di bagian Connection Topology Management, klik Modify Configuration.
Di dialog Modify Proxy Endpoint (Terminal) Configuration, atur bobot baca untuk node read-only C menjadi 0.
Buka halaman Monitoring and Alerts untuk instans hanya baca C. Di bagian Session Connection, pantau metrik
active_sessiondan tunggu hingga nilainya turun ke 0.Jika
active_sessiontidak mencapai 0 setelah menunggu cukup lama, hentikan sesi yang tersisa secara manual.Di tab Database Proxy untuk instans primary A, hapus instans hanya baca C dari titik akhir proxy.
Arahkan pernyataan SQL tertentu dengan petunjuk
Gunakan petunjuk SQL untuk memaksa pernyataan dijalankan di node tertentu — berguna untuk operasi tulis di dalam SELECT atau kueri yang harus selalu menggunakan instans hanya baca.
Instans Edisi Ketersediaan Tinggi:
/*FORCE_MASTER*/— mengarahkan pernyataan ke instans primary, bahkan jika bobot baca-nya 0/*FORCE_SLAVE*/— mengarahkan pernyataan ke instans hanya baca
Instans Edisi Kluster:
/*FORCE_MASTER*/— mengarahkan pernyataan ke node primary, bahkan jika bobot baca-nya 0/*FORCE_SLAVE*/— mengarahkan pernyataan ke node secondary
Tambahkan petunjuk di awal pernyataan:
/*FORCE_MASTER*/ SELECT * FROM table_name;Kurangi latensi lintas zona
Untuk menghindari single point of failure, buat setidaknya dua instans hanya baca untuk instans primary dan sebarkan di zona berbeda. Aktifkan fitur nearest access untuk meminimalkan latensi jaringan akibat lalu lintas lintas zona. Fitur nearest access mengontrol cara aplikasi terhubung ke proxy; bobot baca mengontrol cara proxy mengarahkan permintaan ke database backend. Konfigurasikan keduanya bersamaan untuk performa optimal.
FAQ
Apakah instans primary tetap dapat dibaca setelah saya menambahkan instans hanya baca?
Setelah instans hanya baca ditambahkan, instans primary tetap dapat dibaca dan ditulis kapan saja. Menambahkan instans hanya baca tidak memengaruhi kemampuan baca atau tulis instans primary.
Instans primary memiliki titik akhir koneksi langsungnya sendiri. Titik akhir ini terhubung langsung ke instans primary tanpa melewati database proxy, sehingga instans primary selalu dapat dibaca dan ditulis melalui titik akhir ini terlepas dari konfigurasi bobot baca.
Titik akhir database proxy digunakan untuk pemisahan baca/tulis. Saat terhubung melalui titik akhir proxy, permintaan baca dan tulis diarahkan berdasarkan bobot baca yang dikonfigurasi. Ketika bobot baca instans primary diatur ke 0, proxy tidak meneruskan permintaan baca ke instans primary secara default. Namun, instans primary itu sendiri tetap dapat dibaca dan ditulis melalui titik akhir koneksi langsungnya. Ketika semua instans hanya baca mengalami latensi melebihi ambang batas atau tidak tersedia, permintaan baca secara otomatis dialihkan kembali ke instans primary untuk menjamin kelangsungan bisnis.
Untuk mengontrol pengarahan baca/tulis melalui titik akhir proxy, sesuaikan bobot baca di konfigurasi Database Proxy.
Referensi API
Operasi API | Deskripsi |
Kueri detail database proxy untuk instans RDS | |
Kueri kebijakan akses titik akhir database proxy | |
Ubah kebijakan akses titik akhir database proxy |
Langkah selanjutnya
Konfigurasi nearest access — kurangi latensi dengan mengarahkan koneksi aplikasi ke node proxy terdekat
Gunakan fitur transaction splitting — tingkatkan throughput baca untuk transaksi campuran baca/tulis
Atur tipe connection pool — kurangi overhead koneksi untuk beban kerja konkurensi tinggi
Aturan alokasi bobot baca default — pahami cara sistem menetapkan bobot dalam mode Automatic Distribution