Tentang replika baca

Tingkat Standar Memorystore for Redis memberikan kemampuan untuk menskalakan kueri baca aplikasi Anda menggunakan replika baca. Halaman ini mengasumsikan bahwa Anda sudah memahami berbagai kemampuan tingkat Redis Memorystore.

Replika baca memungkinkan Anda menskalakan beban kerja baca dengan membuat kueri pada replika. Endpoint baca disediakan untuk memudahkan aplikasi mendistribusikan kueri di seluruh replika. Untuk mengetahui informasi selengkapnya, lihat Menskalakan operasi baca dengan endpoint baca.

Untuk petunjuk tentang cara mengelola instance Redis dengan replika baca, lihat Mengelola replika baca.

Kasus penggunaan untuk replika baca

Penyimpanan sesi, papan peringkat, mesin rekomendasi, dan kasus penggunaan lainnya mengharuskan instance memiliki ketersediaan tinggi. Untuk kasus penggunaan ini, ada lebih banyak pembacaan daripada penulisan, dan kasus penggunaan ini umumnya dapat menoleransi beberapa pembacaan yang sudah tidak berlaku. Dalam kasus seperti ini, sebaiknya manfaatkan replika baca untuk meningkatkan ketersediaan dan skalabilitas instance.

Perilaku replika baca

  • Replika baca tidak diaktifkan di instance Tingkat Standar secara default.
  • Setelah diaktifkan di instance, replika baca tidak dapat lagi dinonaktifkan untuk instance tersebut.
  • Instance Tingkat Standar dapat memiliki 1 hingga 5 replika baca.
  • Endpoint baca menyediakan satu endpoint untuk mendistribusikan kueri di seluruh node replika.
  • Replika baca dikelola menggunakan replikasi asinkron Redis.

Peringatan dan batasan

  • Replika baca hanya didukung untuk ukuran instance dengan node >= 5 GB.
  • Replika baca hanya dapat diaktifkan pada instance yang menggunakan Redis versi 5.0 atau yang lebih tinggi.
  • Jika Anda menetapkan zona dan zona alternatif untuk menyediakan node, Memorystore akan menggunakan zona tersebut untuk node pertama dan kedua di instance. Setelah itu, Memorystore akan memilih zona untuk semua node yang tersisa yang disediakan untuk instance.
  • Anda harus menyediakan instance dengan rentang alamat IP CIDR /28 atau yang lebih besar. Ukuran rentang yang lebih besar seperti /27 dan /26 valid. Rentang yang lebih kecil seperti /29 tidak didukung untuk fitur ini.

Arsitektur

Saat Mengaktifkan replika baca, Anda menentukan jumlah replika yang diinginkan dalam instance. Memorystore secara otomatis mendistribusikan node replika utama dan baca di seluruh zona yang tersedia di region.

Setiap instance memiliki endpoint utama dan endpoint baca. Endpoint utama selalu mengarahkan traffic ke node utama, sedangkan endpoint baca otomatis melakukan load balancing kueri baca di seluruh replika yang tersedia.

Layanan pemantauan kesehatan Memorystore for Redis memantau instance dan bertanggung jawab untuk mendeteksi kegagalan node utama, serta memilih replika sebagai node utama baru dan memulai failover otomatis ke node utama baru.

Failover untuk instance dengan replika baca

Jika instance utama gagal, layanan pemantauan status Memorystore akan memulai failover dan instance utama baru akan tersedia untuk operasi baca dan tulis. Failover biasanya selesai dalam waktu kurang dari 30 detik.

Saat terjadi failover, endpoint utama akan otomatis mengalihkan traffic ke endpoint utama yang baru. Namun, semua koneksi klien ke endpoint utama akan terputus selama failover. Aplikasi dengan logika percobaan ulang koneksi akan otomatis terhubung kembali setelah utama baru online. Beberapa koneksi klien ke endpoint baca juga mengalami pemutusan koneksi dari replika baca yang dipromosikan menjadi utama selama failover. Koneksi ke replika yang tersisa akan terus ditayangkan selama failover. Saat dicoba lagi, koneksi akan dialihkan ke replika baru.

Saat terjadi failover, karena sifat replikasi yang asinkron, replika dapat memiliki jeda replikasi yang berbeda. Namun, proses failover melakukan upaya terbaik untuk melakukan failover ke replika dengan jeda paling sedikit. Hal ini membantu meminimalkan jumlah kehilangan data dan pengurangan throughput baca selama failover. Utama yang baru dipromosikan dapat berada di zona yang sama atau zona yang berbeda dengan utama sebelumnya. Replika dipilih sebagai utama baru jika berada di zona yang sama dengan utama sebelumnya dan memiliki latensi paling sedikit. Jika tidak, replika dari zona yang berbeda dapat menjadi primer baru.

Karena replikasi bersifat asinkron, selalu ada kemungkinan untuk membaca data yang sudah tidak berlaku selama failover. Selain itu, saat primer baru sedang dipromosikan, beberapa operasi tulis ke instance mungkin akan hilang. Aplikasi harus dapat menangani perilaku ini.

Redis berusaha semaksimal mungkin untuk menghindari replika lain yang memerlukan sinkronisasi penuh selama failover, tetapi hal ini dapat terjadi dalam skenario yang jarang terjadi. Sinkronisasi penuh dapat memerlukan waktu beberapa menit hingga satu jam, bergantung pada kecepatan tulis dan ukuran set data yang direplikasi. Selama waktu ini, replika yang menjalani sinkronisasi penuh tidak tersedia untuk operasi baca. Setelah sinkronisasi selesai, replika dapat diakses untuk operasi baca.

Mode kegagalan untuk replika baca

Instance dengan replika baca dapat mengalami berbagai kegagalan dan kondisi buruk yang memengaruhi aplikasi. Perilakunya bervariasi bergantung pada apakah instance memiliki satu replika, atau dua replika atau lebih. Bagian ini menguraikan beberapa mode kegagalan umum dan menguraikan perilaku instance selama kondisi ini.

Replika tidak tersedia

  • Jika replika gagal karena alasan apa pun, replika akan ditandai sebagai tidak tersedia dan semua koneksi ke replika akan dihentikan setelah waktu tunggu tertentu. Setelah replika dipulihkan, koneksi baru akan dirutekan ke replika yang dipulihkan. Waktu untuk memulihkan replika bervariasi bergantung pada mode kegagalan.

  • Jika terjadi kehabisan stok atau kegagalan zona Compute Engine, replika tidak akan pulih hingga kondisi tersebut teratasi.

Kegagalan zona

  • Jika zona tempat primary berada gagal, primary akan otomatis gagal ke replika di zona lain. Jika instance hanya memiliki satu replika, endpoint baca tidak akan tersedia selama pemadaman layanan zona. Jika instance memiliki lebih dari satu replika, replika di luar zona yang terpengaruh tersedia untuk operasi baca

  • Jika zona tempat satu atau beberapa replika berada gagal, replika tersebut tidak akan tersedia selama durasi kegagalan zona. Jika terjadi kegagalan dua zona dan ada dua replika atau lebih, replika dengan jeda paling sedikit di zona yang tersisa akan dipromosikan menjadi replika utama. Semua replika yang tersisa di zona yang tidak terpengaruh tersedia untuk operasi baca.

Partisi jaringan

Partisi jaringan adalah skenario saat node tetap berjalan, tetapi tidak dapat menjangkau semua klien, zona, atau node peer. Memorystore menggunakan sistem berbasis quorum untuk mencegah node terisolasi menayangkan operasi tulis. Dalam kasus partisi jaringan, setiap node utama dalam partisi minoritas akan diturunkan secara otomatis. Partisi mayoritas (jika ada) memilih primary baru jika belum memilikinya. Replika terisolasi terus menayangkan operasi baca. Namun, data tersebut mungkin menjadi tidak berlaku jika tidak dapat disinkronkan dari data utama.

Untuk menentukan apakah link rusak, pantau metrik master_link_down_since_seconds dan offset_diff untuk mengidentifikasi node yang terisolasi.

Kehabisan stok

Terkadang resource Compute Engine yang diperlukan oleh Memorystore tidak tersedia di zona, yang menyebabkan kehabisan stok. Jika terjadi kehabisan stok di region tempat Anda mencoba menyediakan instance, operasi untuk membuat instance akan gagal.

Sinkronisasi penuh

Jika replika tertinggal terlalu jauh dari replika utama, replika akan memicu sinkronisasi penuh yang menyalin seluruh snapshot dari replika utama ke replika. Operasi ini dapat memerlukan waktu dari beberapa menit hingga satu jam dalam kasus terburuk. Sinkronisasi penuh tidak menyebabkan kegagalan instance, tetapi selama waktu ini, replika yang sedang melakukan sinkronisasi penuh tidak tersedia untuk operasi baca dan instance utama mengalami penggunaan CPU dan memori yang lebih tinggi.

Endpoint utama menampilkan READONLY

Operasi tulis Anda ke endpoint utama instance Memorystore for Redis dengan replika baca mungkin menerima error -READONLY You can't write against a read only replica. secara tidak terduga. Sebaiknya tutup dan buat ulang koneksi ke instance. Pada umumnya, memulai ulang aplikasi klien dapat mengurangi masalah. Jika opsi ini tidak memungkinkan atau perilaku tersebut berlanjut, hubungi tim Dukungan Google Cloud.

Menskalakan operasi baca dengan endpoint baca

Replika baca memungkinkan aplikasi menskalakan operasi baca dengan membaca dari replika. Aplikasi dapat terhubung ke replika baca melalui endpoint baca.

Membaca endpoint

Endpoint baca adalah alamat IP yang terhubung ke aplikasi Anda. Load balancing ini melakukan load balancing koneksi secara merata di seluruh replika dalam instance. Koneksi ke replika baca dapat mengirim kueri baca, tetapi tidak dapat mengirim kueri tulis. Setiap instance Tingkat Standar yang mengaktifkan replika baca memiliki endpoint baca. Untuk petunjuk tentang cara melihat endpoint baca instance, lihat Melihat informasi replika baca untuk instance Anda.

Perilaku endpoint baca

  • Endpoint baca secara otomatis mendistribusikan koneksi ke semua replika yang tersedia. Koneksi tidak diarahkan ke akun utama.
  • Replika dianggap tersedia selama dapat menayangkan traffic klien. Ini tidak termasuk waktu saat replika sedang melakukan sinkronisasi penuh dengan replika utamanya.
  • Replika dengan jeda replikasi tinggi terus menyalurkan traffic. Aplikasi dengan volume operasi tulis yang tinggi dapat membaca data yang sudah tidak berlaku dari replika yang melayani operasi tulis yang tinggi.
  • Jika node replika menjadi node utama, koneksi ke node tersebut akan dihentikan dan koneksi baru akan dialihkan ke node replika baru.
  • Setiap koneksi ke endpoint baca menargetkan replika yang sama selama lifetime koneksi. Koneksi yang berbeda dari host klien yang sama tidak dijamin akan menargetkan node replika yang sama.

Konsistensi operasi baca

Replika baca dikelola menggunakan replikasi asinkron OSS Redis native. Karena sifat replikasi asinkron, ada kemungkinan replika tertinggal dari replika utama. Aplikasi dengan operasi tulis konstan yang juga membaca dari replika harus dapat mentoleransi operasi baca yang tidak konsisten.

Jika aplikasi memerlukan konsistensi "baca tulis", sebaiknya gunakan endpoint utama untuk operasi tulis dan baca. Menggunakan endpoint utama memastikan bahwa pembacaan selalu diarahkan ke primary. Bahkan dalam hal ini, mungkin ada pembacaan yang sudah tidak berlaku setelah failover.

Menetapkan TTL pada kunci di primary memastikan kunci yang sudah tidak berlaku tidak dibaca dari primary atau replika. Hal ini karena Redis memastikan kunci yang telah berakhir masa berlakunya tidak dapat dibaca dari replika.

Perilaku pengaktifan replika baca pada instance yang ada

  • Mengaktifkan replika baca di instance Redis yang ada adalah operasi eksklusif, yang berarti Anda tidak dapat melakukan modifikasi instance operasi update lain sebagai bagian dari operasi yang sama yang mengaktifkan replika baca.

  • Mengaktifkan replika baca di instance Redis yang ada mengharuskan Anda mengalokasikan rentang alamat IP valid tambahan berukuran /28, terlepas dari ukuran rentang alamat IP yang ada yang dialokasikan ke Memorystore for Redis.

    • Anda harus memberikan rentang IP tambahan saat mengaktifkan replika baca untuk instance Redis. Anda dapat memilih rentang tertentu, atau membiarkan Memorystore memilihnya secara otomatis untuk Anda.
  • Alamat IP baca/tulis untuk instance Anda tidak berubah saat mengaktifkan replika baca. Alamat IP endpoint baca berada dalam rentang asli yang dialokasikan untuk instance Memorystore, bukan rentang tambahan yang Anda berikan saat mengaktifkan replika baca.

  • Untuk menemukan endpoint baca baru, Lihat informasi replika baca untuk instance Anda setelah operasi untuk mengaktifkan replika baca selesai.

Menskalakan instance

Anda dapat menskalakan jumlah replika baca untuk instance, dan Anda juga dapat mengubah ukuran node:

Sebaiknya skalakan instance Anda selama periode traffic baca dan tulis yang rendah untuk meminimalkan dampak terhadap aplikasi.

Menambahkan replika baru akan menghasilkan beban tambahan pada replika utama saat replika melakukan sinkronisasi penuh. Saat menambahkan node, koneksi yang ada tidak terpengaruh atau ditransfer. Setelah tersedia, replika baru akan mulai menerima koneksi dari endpoint dan menayangkan operasi baca. Menghapus replika akan menutup koneksi aktif yang dirutekan ke replika tersebut. Aplikasi klien harus dikonfigurasi untuk otomatis terhubung kembali ke endpoint baca guna membangun ulang koneksi ke replika yang tersisa.

Praktik terbaik

Pengelolaan memori

Redis tidak mengizinkan penulisan klien melebihi batas maxmemory instance. Namun, overhead seperti fragmentasi, buffering replikasi, dan perintah mahal seperti EVAL dapat meningkatkan penggunaan memori melebihi batas ini. Dalam kasus ini, Memorystore akan gagal menulis hingga tekanan memori dikurangi. Lihat Praktik terbaik pengelolaan memori untuk mengetahui detail selengkapnya.

Jika Memorystore sedang menjalani operasi BGSAVE karena ekspor atau replika sinkronisasi penuh dan kondisi OOM terjadi, proses turunan akan dihentikan. Dalam hal ini, operasi BGSAVE akan gagal dan server node Redis tetap tersedia.

Untuk menjamin pembuatan replika dan snapshot dalam semua situasi, sebaiknya pertahankan penggunaan memori kurang dari 50% selama operasi penting seperti ekspor, penskalaan, dll. Anda dapat memicu ekspor atau failover secara manual untuk melihat dampak performa dari operasi ini.

Manajemen CPU

Memorystore menyediakan metrik tentang penggunaan CPU dan jumlah koneksi untuk setiap node. Sebaiknya Anda alokasikan overhead yang cukup sehingga hilangnya satu zona ketersediaan dapat diterima. Target ideal dapat bervariasi berdasarkan jumlah replika dan pola penggunaan, tetapi titik awal yang baik adalah menjaga penggunaan CPU replika di bawah 50%.

Setiap node mungkin mengalami penggunaan yang tinggi jika pola penggunaan klien tidak seimbang, atau jika operasi failover menghasilkan distribusi koneksi yang tidak seimbang. Dalam hal ini, sebaiknya tutup koneksi Anda secara berkala agar Memorystore dapat secara otomatis menyeimbangkan kembali koneksi. Memorystore tidak menyeimbangkan kembali koneksi terbuka.

Pengelolaan saldo koneksi

Setiap kali koneksi node ditutup, klien harus terhubung kembali, biasanya dengan mengaktifkan koneksi otomatis kembali di library klien pilihan Anda. Saat node diperkenalkan kembali, koneksi yang ada tidak akan dialihkan, tetapi koneksi baru akan dirutekan ke node baru. Klien dapat secara berkala menghentikan koneksi untuk memastikan koneksi tersebut diimbangi di seluruh node yang tersedia.

Pengelolaan jeda replikasi

Replika dapat tertinggal, terutama jika rasio penulisan sangat tinggi. Dalam skenario tersebut, replika akan terus tersedia untuk operasi baca. Dalam kondisi ini, operasi baca dari replika dapat menjadi usang dan aplikasi harus dapat menanganinya, atau kecepatan tulis yang tinggi harus diatasi.

Langkah selanjutnya