Operasi O&M seperti switchover pada instans ApsaraDB RDS for MySQL Anda dapat menyebabkan putusnya koneksi yang berdampak pada aplikasi Anda. Fitur persistent connection mencegah gangguan tersebut dengan menjaga koneksi tetap aktif selama operasi semacam itu, sehingga meningkatkan ketersediaan dan mengurangi biaya O&M.
Overview
Fitur persistent connection dari database proxy untuk ApsaraDB RDS for MySQL memastikan bahwa koneksi antara aplikasi Anda dan proxy tetap aktif selama event seperti switchover instans. Hal ini mencegah aplikasi yang terhubung melalui database proxy endpoint menerima pesan error koneksi, sebagaimana diilustrasikan pada gambar berikut.


How it works
Database proxy menggunakan dua jenis koneksi: koneksi frontend antara proxy dan client Anda, serta koneksi backend antara proxy dan database. Selama switchover instans, proxy mempertahankan koneksi frontend meskipun koneksi backend terputus. Mekanisme ini memungkinkan proxy menyediakan persistent connections.
Untuk koneksi backend ke instans ApsaraDB RDS for MySQL, kunci persistensi adalah memulihkan status koneksi setelah terjadi gangguan.
Status koneksi untuk ApsaraDB RDS for MySQL biasanya mencakup variabel sistem, variabel yang ditentukan pengguna, tabel temporary, encoding set karakter, status transaksi, dan informasi prepared statement. Topik ini menggunakan set names utf8mb4 sebagai contoh untuk menjelaskan cara kerja fitur persistent connection untuk ApsaraDB RDS for MySQL.
Switchover
Selama switchover, database proxy untuk ApsaraDB RDS for MySQL mempertahankan persistent connection dalam tiga langkah:
Operasi O&M yang melibatkan switchover mencakup:
Switchover primary/secondary
Pembaruan versi engine minor
Perubahan parameter yang memerlukan restart instans
Perubahan konfigurasi instans utama
Mulai switchover: Blokir koneksi dan permintaan baru
Proxy tidak dapat mempertahankan transaksi. Oleh karena itu, proxy menangani session secara berbeda berdasarkan statusnya:
Untuk session dengan transaksi aktif selama periode pemblokiran, proxy meneruskan permintaan ke instans utama backend untuk dieksekusi.
Untuk session yang memulai transaksi baru selama periode pemblokiran, proxy memblokir permintaan tersebut. Client kemudian menunggu respons dari server.
Untuk session dengan transaksi yang masih aktif setelah periode pemblokiran berakhir, proxy menghentikan koneksi. Database backend kemudian melakukan rollback terhadap transaksi yang belum dikomit.

Saat switchover: Alihkan koneksi yang ada
Selama switchover, status koneksi yang ada dimodifikasi:
Untuk koneksi yang tidak dapat dipertahankan, proxy menghentikan seluruh koneksi.
Untuk koneksi yang dapat dipertahankan, proxy mengalihkannya ke instans database baru.
Proxy membersihkan koneksi ke instans utama asli dari connection pool.

Setelah switchover: Pulihkan koneksi
Untuk koneksi yang berhasil dipertahankan, proxy membuat koneksi ke instans utama baru dan memulihkan status koneksi.

Failover
Failover adalah event tak terencana di mana kegagalan sistem menyebabkan instans ApsaraDB RDS secara otomatis mempromosikan instans secondary menjadi instans utama baru.
Proxy menyimpan cache pernyataan SQL yang sedang dieksekusi di database atau akan diteruskan. Ketika terjadi kegagalan database, koneksi backend antara proxy dan database terputus. Setelah proxy mendeteksi failover, proxy tidak langsung memutus koneksi dari client. Sebaliknya, proxy meneruskan permintaan baca yang gagal ke instans database yang tersedia dan memulihkan status koneksi.
Untuk permintaan tulis yang gagal, proxy tidak dapat menentukan apakah penulisan ke database berhasil atau tidak. Oleh karena itu, persistensi sesi selama failover tidak mendukung permintaan tulis.
Aktifkan persistent connections
Sejak 9 Januari 2024, fitur persistent connection diaktifkan secara default untuk instans ApsaraDB RDS for MySQL yang memenuhi syarat saat Anda mengaktifkan database proxy. Anda dapat menonaktifkan fitur ini kapan saja.
Prasyarat
Persistent connections untuk switchover
Instans ApsaraDB RDS memenuhi persyaratan berikut:
Versi engine: MySQL 5.6, 5.7, 8.0, atau 8.4
Edition: RDS High-availability Edition atau RDS Cluster Edition
Jenis penyimpanan: cloud disk atau Premium Local SSDs
Jenis proxy: general-purpose atau dedicated
database proxy diaktifkan, dan versi proxy adalah 1.14.5_20231207 atau lebih baru.
Persistent connections untuk failover
Instans ApsaraDB RDS memenuhi persyaratan berikut:
Versi engine: MySQL 5.6, 5.7, atau 8.0
Edition: RDS High-availability Edition atau RDS Cluster Edition
Jenis penyimpanan: cloud disk atau Premium Local SSDs
Jenis proxy: dedicated
CatatanDatabase proxy general-purpose hanya mendukung persistent connections untuk switchover. Database proxy dedicated mendukung persistent connections baik untuk switchover maupun failover.
database proxy diaktifkan, dan versi proxy adalah 2.9.1 atau lebih baru.
Prosedur
Buka halaman ApsaraDB RDS Instances. Di bilah navigasi atas, pilih wilayah tempat instans berada. Lalu, temukan instans tersebut dan klik ID-nya.
Di panel navigasi kiri, klik Database Proxy.
Di bagian Basic Information, klik Enable di samping Persistent Connection.
CatatanJika teks 'persistent connection' tidak ditampilkan, artinya instans Anda tidak memenuhi persyaratan untuk mengaktifkan persistent connections.
Gunakan persistent connections
Prasyarat
Database proxy diaktifkan.
Fitur persistent connection diaktifkan untuk database proxy.
Prosedur
Buka halaman ApsaraDB RDS Instances. Di bilah navigasi atas, pilih wilayah tempat instans berada. Lalu, temukan instans tersebut dan klik ID-nya.
Di panel navigasi kiri, klik Database Proxy.
Konfigurasikan kebijakan akses untuk database proxy endpoint target sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Konfigurasikan kebijakan akses untuk database proxy endpoint. Atur Read/Write Attributes menjadi Read/Write (Read/Write Splitting).
Ajukan endpoint internal atau publik untuk database proxy sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Setel database proxy endpoint.
Dalam aplikasi Anda, gunakan endpoint internal atau publik beserta nomor port database proxy untuk terhubung ke database.
Ketika terjadi operasi O&M yang melibatkan switchover pada instans database, database proxy secara otomatis mempertahankan koneksi. Koneksi aplikasi Anda ke proxy tidak terputus selama Anda menggunakan database proxy endpoint.
Batasan
Selama switchover, fitur persistent connection tidak dapat mempertahankan koneksi dalam skenario berikut:
Koneksi dengan set hasil yang belum lengkap, di mana server MySQL belum selesai mengirimkan semua data.
Koneksi dengan transaksi yang belum dikomit.
Koneksi yang telah menggunakan pernyataan
change user.Koneksi yang telah menggunakan pernyataan
LOAD DATA.Koneksi dengan tabel temporary.
Koneksi yang digunakan untuk berlangganan binary logs melalui database proxy endpoint.
Pemanggilan fungsi
FOUND_ROWS(),ROW_COUNT(), danLAST_INSERT_ID()tidak didukung. Meskipun fungsi-fungsi ini dapat dipanggil, akurasi hasil yang dikembalikan tidak dapat dijamin. MySQL tidak lagi merekomendasikan penggunaanSELECT FOUND_ROWS(). Kami menyarankan Anda menggantiSELECT FOUND_ROWS()denganSELECT COUNT(*) FROM tb1untuk kueri. Untuk informasi lebih lanjut, lihat FOUND_ROWS().
Catatan penggunaan
Karena koneksi dapat terhubung ulang, ID thread dari koneksi saat ini yang dikembalikan oleh kueri
select connection_id()mungkin berubah.Karena koneksi dibuat ulang, alamat IP dan port yang ditampilkan di
show processlistatau SQL Explorer mungkin tidak sesuai dengan alamat IP dan port aktual client.Jika suatu koneksi memiliki variabel yang ditentukan pengguna, koneksi tersebut dapat dipertahankan, tetapi variabelnya menjadi tidak valid.
Nonaktifkan persistent connections
Buka halaman ApsaraDB RDS Instances. Di bilah navigasi atas, pilih wilayah tempat instans berada. Lalu, temukan instans tersebut dan klik ID-nya.
Di panel navigasi kiri, klik Database Proxy.
Di bagian Basic Information, klik Disable di samping Persistent Connection.
Pengujian fitur
Topik ini hanya menyediakan hasil pengujian untuk skenario switchover.
Lingkungan pengujian
Instans uji ApsaraDB RDS for MySQL:
MySQL 8.0, RDS High-availability Edition
Tipe instans: mysql.x2.xlarge.2c (dedicated, 8 vCPU, memori 16 GB)
Tool pengujian: Sysbench
Data pengujian:
100 tabel, masing-masing berisi 40.000 baris.
Jumlah thread konkuren: 128.
Metode pengujian
Uji retensi koneksi instans ApsaraDB RDS for MySQL dalam berbagai skenario O&M. Retensi koneksi adalah persentase koneksi yang tetap aktif setelah operasi O&M.
Jalankan perintah pengujian berikut:
sysbench --db-driver=mysql --mysql-host=127.X.X.1 --mysql-port=3306 --mysql-user=username --mysql-password='' --tables=100 --table-size=40000 --threads=128 --mysql-db=sbtest --report-interval=5 --time=600 oltp_read_write runTabel berikut menjelaskan parameter utama dalam perintah pengujian.
db-driver: Menentukan engine database.
mysql-host: Menentukan database proxy endpoint.
tables: Menentukan jumlah tabel dalam database.
table-size: Menentukan jumlah catatan dalam setiap tabel.
threads: Menentukan jumlah thread konkuren.
time: Menentukan durasi pengujian dalam detik.
Hasil pengujian
Dalam skenario O&M yang diuji, instans ApsaraDB RDS for MySQL mencapai retensi koneksi 100%.
Switchover scenario | Retention |
Minor engine version update | 100% |
Primary/secondary switchover | 100% |
Primary instance configuration change | 100% |
Parameter change that requires a restart | 100% |
Referensi API
API | Description |
Memodifikasi fitur database proxy untuk instans ApsaraDB RDS. | |
Menanyakan detail database proxy untuk instans ApsaraDB RDS. |