Atribut baca/tulis dan bobot baca dari titik akhir proxy database untuk ApsaraDB RDS for MySQL menentukan cara permintaan diproses. Anda dapat menyesuaikan pengaturan ini sesuai kebutuhan bisnis Anda. Topik ini menjelaskan logika pemrosesan atribut baca/tulis serta memberikan petunjuk cara mengonfigurasikannya beserta bobot baca yang sesuai melalui Konsol ApsaraDB RDS dan dengan memanggil operasi API.
Prasyarat
-
Instans Anda harus berupa Edisi Ketersediaan Tinggi atau Edisi Kluster.
Catatan-
Edisi Ketersediaan Tinggi: Anda dapat membuat instansi read-only ApsaraDB RDS for MySQL untuk menerapkan pemisahan baca/tulis.
-
Edisi Kluster: Anda dapat langsung menggunakan node primary dan secondary dari instans untuk menerapkan pemisahan baca/tulis.
-
Atribut baca/tulis
Atribut baca/tulis dapat diatur menjadi Read/Write atau Read-only.
-
Read/Write: Gunakan mode ini untuk mengaktifkan pemisahan baca/tulis dan melakukan penskalaan layanan secara linear.
Dalam mode ini, kebijakan akses untuk titik akhir proxy database (sebelumnya dikenal sebagai terminal proxy) harus mencakup setidaknya satu instans utama dan satu instansi hanya baca. Semua permintaan tulis dikirim ke instans utama. Mode ini mendukung fitur pemisahan baca/tulis seperti pemisahan transaksi dan kolam koneksi.
-
Read-only: Gunakan mode ini untuk beban kerja hanya baca, seperti pelaporan.
Dalam mode ini, kebijakan akses untuk titik akhir proxy database harus mencakup setidaknya satu instansi hanya baca. Instans utama tidak berpartisipasi dalam perutean permintaan, dan pemisahan transaksi tidak didukung.
Ketika atribut baca/tulis untuk kebijakan akses titik akhir proxy database diatur ke Read-only, ApsaraDB RDS mengalokasikan koneksi secara round-robin di antara instansi hanya baca yang ditentukan dalam kebijakan akses titik akhir tersebut. Setiap koneksi client dipetakan ke koneksi pada satu instansi hanya baca. Instans utama tidak berpartisipasi dalam alokasi ini. Jumlah total koneksi yang tersedia adalah jumlah koneksi dari semua instansi hanya baca yang dikonfigurasi.
-
Untuk instans ApsaraDB RDS for MySQL Edisi Kluster, jika atribut baca/tulis diatur ke Read/Write, permintaan tulis hanya dikirim ke node utama. Jika atribut baca/tulis diatur ke Read-only, node utama tidak berpartisipasi dalam perutean, dan ApsaraDB RDS mengalokasikan koneksi secara round-robin ke node secondary yang ditentukan dalam kebijakan akses titik akhir.
-
Daftar putih IP proksi database disinkronkan dengan daftar putih IP instans utama.
-
Untuk mencegah single point of failure, buat setidaknya dua instansi hanya baca untuk satu instans utama dan sebarkan di zona ketersediaan yang berbeda. Untuk mengurangi latensi jaringan akibat akses lintas zona, Anda dapat mengaktifkan fitur akses terdekat. Untuk informasi selengkapnya, lihat Konfigurasikan akses terdekat.
Logika pemrosesan atribut baca/tulis
|
Atribut baca/tulis |
Metode alokasi bobot |
Bobot instans utama |
Operasi normal |
Instansi hanya baca terakhir dihapus |
Semua instansi hanya baca gagal |
|
Read-only |
distribusi otomatis atau kustom |
Bobot baca instans utama tidak dapat diatur. |
|
|
|
|
Read/Write |
distribusi otomatis |
Sama dengan 0 Untuk informasi selengkapnya, lihat Aturan alokasi bobot baca default. |
|
|
|
|
kustom |
Lebih besar dari 0 |
|
|
|
|
|
Sama dengan 0 |
|
|
|
-
Tidak ada penerusan: Dalam mode Read-only, instans utama tidak berpartisipasi dalam penerusan permintaan baca.
-
Kesalahan koneksi: Dalam mode Read-only, jika kebijakan akses proxy tidak dapat dibaca atau ditulis, koneksi akan gagal dengan kesalahan.
-
Dalam mode Read/Write, ketika bobot baca instans utama diatur ke 0, permintaan baca secara default tidak diteruskan ke instans utama. Namun, permintaan baca akan diteruskan ke instans utama jika semua instansi hanya baca menjadi tidak sehat, digunakan petunjuk untuk memaksa perutean, atau pemisahan transaksi diaktifkan.
Dampak perubahan bobot terhadap operasi
Untuk melihat versi mesin minor proksi database, lihat Lihat versi mesin minor proksi database. Untuk meningkatkan versi mesin minor, lihat Tingkatkan versi mesin minor proksi database.
|
Tindakan |
Versi engine 2.8.41 atau lebih baru |
Versi engine sebelum 2.8.41 |
|
Ketika sesi baru dimulai, apakah terhubung ke node dengan bobot baca 0? |
Tidak |
Tidak |
|
Jika bobot baca node diubah dari nilai bukan nol menjadi 0, apakah node tersebut dihapus dari sesi yang sudah ada? |
Tidak |
Tidak |
|
Jika bobot baca node diubah dari nilai bukan nol menjadi 0, apakah permintaan dalam sesi yang sudah ada dirutekan berdasarkan bobot baru? |
Tidak |
|
|
Jika bobot baca node diubah dari 0 menjadi nilai bukan nol, apakah node tersebut ditambahkan ke sesi yang sudah ada? |
Tidak |
Ya |
|
Jika bobot baca node diubah dari 0 menjadi nilai bukan nol, apakah permintaan dalam sesi yang sudah ada dirutekan berdasarkan bobot baru? |
Tidak |
|
|
Apakah menghapus node hanya baca dengan bobot baca bukan nol menyebabkan koneksi transient untuk sesi yang sudah ada? |
Tidak Catatan
Meskipun versi proksi database seri 2.x menyediakan mekanisme |
Ya |
|
Apakah menghapus node hanya baca dengan bobot baca 0 menyebabkan koneksi transient untuk sesi yang sudah ada? |
Tidak |
Koneksi transient terjadi hanya jika node tersebut sedang memproses permintaan aktif. |
|
Jika Anda menghentikan koneksi pada node hanya baca dengan bobot baca 0, apakah koneksi tersebut dihentikan? |
Ya |
Untuk versi proksi database seri 1.x, koneksi dihentikan jika jumlah sesi aktif (active_session) tidak turun ke 0. Jika tidak, koneksi tidak dihentikan, dan koneksi yang dihentikan secara otomatis dibuat ulang. |
|
Jika Anda menghentikan koneksi pada node hanya baca dengan bobot baca bukan nol, apakah koneksi tersebut dihentikan? |
Algoritma load balancing
Versi sebelum 2.25.4: Hanya load balancing berbasis bobot yang didukung.
Versi 2.25.4 dan lebih baru menambahkan dukungan untuk load balancing berdasarkan jumlah permintaan aktif. Kebijakan perutean berikut didukung:
-
Load balancing berdasarkan jumlah permintaan aktif (versi 2.25.4 dan lebih baru)
-
Load balancing berbasis bobot (semua versi)
Kami merekomendasikan Anda menggunakan load balancing berdasarkan jumlah permintaan aktif karena memberikan performa puncak yang lebih baik dan mengurangi dampak kegagalan satu node terhadap seluruh kluster.
Load balancing berbasis bobot
Permintaan baca didistribusikan berdasarkan rasio bobot node. Metode ini menggunakan algoritma weighted round-robin yang halus dan nilai current_weight setiap node untuk mendistribusikan permintaan baca berdasarkan bobotnya. Prosesnya sebagai berikut:
-
Aturan pemilihan: Pada setiap putaran penjadwalan, node dengan nilai
current_weighttertinggi dipilih. Jika beberapa node memiliki bobot tertinggi yang sama, node yang muncul lebih dulu dalam daftar konfigurasi diprioritaskan. -
Akumulasi bobot: Setelah setiap putaran penjadwalan, nilai
current_weightsetiap node bertambah sebesar bobot yang ditetapkan untuknya. -
Reset bobot: Jika sebuah node dipilih, nilai
current_weight-nya dikurangi dengan jumlah bobot semua node.
Contoh:
Bobot baca node utama adalah 100, bobot baca node hanya baca 1 adalah 200, dan bobot baca node hanya baca 2 adalah 200.
|
Putaran |
Node utama current_weight |
current_weight node hanya baca 1 |
current_weight node hanya baca 2 |
Node yang dirutekan |
|
1 |
0 |
0 |
0 |
Node utama |
|
2 |
-400 |
200 |
200 |
Node hanya baca 1 |
|
3 |
-300 |
-100 |
400 |
Node hanya baca 2 |
|
4 |
-200 |
100 |
100 |
Node hanya baca 1 |
|
5 |
-100 |
-200 |
300 |
Node hanya baca 2 |
|
6 |
0 |
0 |
0 |
Node utama |
Load balancing berdasarkan jumlah permintaan aktif
Permintaan diprioritaskan ke node dengan beban lebih rendah. Aturannya adalah merutekan permintaan ke node yang memiliki nilai (Jumlah permintaan aktif / Bobot node) terendah.
Contoh:
Bobot baca node utama adalah 100, bobot baca node hanya baca 1 adalah 200, dan bobot baca node hanya baca 2 adalah 200.
|
Putaran |
Permintaan Aktif Node Utama |
Permintaan aktif node hanya baca 1 |
Permintaan aktif node hanya baca 2 |
Node yang dirutekan |
|
1 |
1
|
5
|
6
|
Node utama |
|
2 |
2 |
4 |
6 |
Node hanya baca 1 |
|
3 |
2 |
5 |
3 |
Node hanya baca 2 |
|
4 |
1 |
2 |
3 |
Node hanya baca 1 |
|
5 |
1 |
2 |
1 |
Node hanya baca 2 |
|
6 |
0 |
3 |
3 |
Node utama |
Prosedur
-
Buka halaman RDS Instances, pilih wilayah di bilah navigasi atas, lalu klik ID instans target.
-
Di panel navigasi kiri, klik Database Proxy.
-
Pada bagian Connection Information, temukan titik akhir proxy database target, lalu klik Modify Configuration di kolom Actions.
-
Pada kotak dialog yang muncul, di samping Read/Write Attributes, pilih Read/Write (Read/Write Splitting) atau Read-only (Primary Instance Not Connected to Receive Write Requests).
-
Pada bagian Read Weight Allocation, pilih Automatic atau Custom.
-
Automatic: Sistem secara otomatis mengalokasikan bobot baca ke setiap instans berdasarkan spesifikasinya. Instansi hanya baca baru yang ditambahkan ke instans utama secara otomatis diberi bobot baca berdasarkan aturan alokasi sistem dan disertakan dalam konfigurasi pemisahan baca/tulis.
-
Custom: Atur secara manual bobot baca untuk setiap instans. Nilainya harus dalam rentang 0 hingga 10.000. Instansi hanya baca baru secara default memiliki bobot baca 0 dan harus dikonfigurasi secara manual.
-
Fitur akses terdekat memastikan permintaan diteruskan dari aplikasi Anda ke proksi database. Konfigurasi bobot baca memastikan permintaan diteruskan dari proksi database ke database backend, yang tidak dipengaruhi oleh fitur akses terdekat. Anda harus menggunakan kedua fitur ini bersamaan untuk meminimalkan latensi akses.
-
Semakin tinggi bobot baca suatu instans, semakin banyak permintaan baca yang diprosesnya. Misalnya, asumsikan bahwa sebuah instans utama memiliki tiga instansi hanya baca dengan bobot baca masing-masing 0, 100, 200, dan 200. Ini menunjukkan bahwa instans utama tidak memproses permintaan baca (permintaan tulis tetap dikirim secara otomatis ke instans utama). Ketiga instansi hanya baca tersebut memproses permintaan baca dengan rasio 1:2:2.
-
Saat Anda menghapus instansi hanya baca, bobot bacanya secara otomatis dihapus, sedangkan bobot instansi lain tetap tidak berubah.
-
Anda tidak dapat mengatur bobot baca untuk instans yang memiliki latensi replikasi yang dikonfigurasi.
-
Perubahan berlaku segera dan tidak menyebabkan gangguan layanan. Namun, bagaimana bobot baru memengaruhi koneksi yang sudah ada bergantung pada versi engine proksi database. Untuk detailnya, lihat bagian "Dampak perubahan bobot terhadap operasi".
API Terkait
|
API |
Deskripsi |
|
Menanyakan detail proksi database untuk instans RDS. |
|
|
Menanyakan konfigurasi titik akhir proxy database untuk instans ApsaraDB RDS. |
|
|
Memodifikasi konfigurasi titik akhir proxy database untuk instans ApsaraDB RDS. |
Lampiran 1: Merutekan pernyataan SQL dengan petunjuk
Selain menggunakan sistem alokasi bobot pemisahan baca/tulis, Anda dapat menggunakan petunjuk SQL untuk merutekan pernyataan SQL tertentu ke instans utama dan instansi hanya baca pada instans Edisi Ketersediaan Tinggi atau ke node utama dan node secondary pada instans Edisi Kluster.
Format petunjuk berikut didukung oleh pemisahan baca/tulis ApsaraDB RDS:
Untuk instans ApsaraDB RDS for MySQL Edisi Ketersediaan Tinggi:
-
/*FORCE_MASTER*/: Merutekan pernyataan SQL berikutnya ke instans utama. -
/*FORCE_SLAVE*/: Merutekan pernyataan SQL berikutnya ke instansi hanya baca.
Untuk instans ApsaraDB RDS for MySQL Edisi Kluster:
-
/*FORCE_MASTER*/: Merutekan pernyataan SQL berikutnya ke node utama. -
/*FORCE_SLAVE*/: Merutekan pernyataan SQL berikutnya ke node secondary.
-
Untuk instans ApsaraDB RDS for MySQL Edisi Ketersediaan Tinggi, jika Anda menggunakan petunjuk /*FORCE_MASTER*/, pernyataan SQL tersebut dirutekan ke instans utama meskipun bobot baca instans utama adalah 0.
-
Untuk instans ApsaraDB RDS for MySQL Edisi Kluster, jika Anda menggunakan petunjuk /*FORCE_MASTER*/, pernyataan SQL tersebut dirutekan ke node utama meskipun bobot baca node utama adalah 0.
Sebagai contoh, untuk instans ApsaraDB RDS for MySQL Edisi Ketersediaan Tinggi, jika Anda menambahkan petunjuk di awal pernyataan berikut, pernyataan tersebut akan dirutekan ke instans utama tanpa memperhatikan pengaturan bobot baca.
/*FORCE_MASTER*/ SELECT * FROM table_name;
Lampiran 2: Mengambil instansi hanya baca offline tanpa gangguan
Asumsikan Anda memiliki lingkungan pemisahan baca/tulis yang terdiri dari instans utama A dan dua instansi hanya baca B dan C. Untuk mengambil instansi hanya baca C offline tanpa gangguan layanan, ikuti langkah-langkah berikut:
-
Buka halaman RDS Instances, pilih wilayah, lalu klik ID instans A.
-
Di panel navigasi kiri, klik Database Proxy. Di bagian Connection Topology Management, klik Modify Configuration.
-
Pada kotak dialog Modify Proxy Endpoint (Terminal) Configuration, atur bobot baca instansi hanya baca C menjadi 0.
Pilih Custom untuk metode alokasi bobot baca dan atur bobot baca instansi hanya baca C menjadi
0. -
Di halaman Monitoring and Alerts untuk instansi hanya baca C, pantau grafik Session Connection dan tunggu hingga metrik
active_sessionturun ke 0.CatatanAnda hanya perlu memeriksa apakah
active_sessionbernilai 0. Jika nilainya tidak turun ke 0 setelah periode yang lama, Anda dapat menghentikan sesi tersebut. -
Di tab Database Proxy untuk instans utama A, hapus instansi hanya baca C dari titik akhir proxy database.