Tentang replika baca

Paket Standar Memorystore for Redis menyediakan kemampuan untuk menskalakan kueri baca aplikasi Anda menggunakan replika baca. Halaman ini mengasumsikan bahwa Anda sudah terbiasa dengan berbagai kemampuan tingkat Redis Memorystore.

Dengan replika baca, Anda dapat 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 mengetahui petunjuk tentang cara mengelola instance Redis dengan replika baca, lihat Mengelola replika baca.

Kasus penggunaan untuk replika baca

Penyimpanan sesi, papan peringkat, mesin pemberi saran, dan kasus penggunaan lainnya mengharuskan instance memiliki ketersediaan tinggi. Untuk kasus penggunaan ini, jumlah operasi baca lebih banyak daripada operasi tulis, dan kasus penggunaan ini umumnya dapat menoleransi beberapa pembacaan yang sudah tidak berlaku. Dalam kasus seperti ini, sebaiknya gunakan replika baca untuk meningkatkan ketersediaan dan skalabilitas instance.

Perilaku replika baca

  • Secara default, replika baca tidak diaktifkan pada instance Tingkat Standar.
  • Setelah replika baca diaktifkan pada sebuah instance, replika baca tidak lagi dapat dinonaktifkan untuk instance tersebut.
  • Instance Tingkat Standar dapat memiliki 1 hingga 5 replika baca.
  • Endpoint baca menyediakan endpoint tunggal 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 menentukan zona dan zona alternatif untuk penyediaan node, Memorystore akan menggunakan zona tersebut untuk node pertama dan kedua dalam instance. Setelah itu, Memorystore akan memilih zona untuk semua node tersisa yang disediakan untuk instance.
  • Anda harus menyediakan instance dengan rentang alamat IP CIDR sebesar /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 membaca di seluruh zona yang tersedia dalam suatu region.

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

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

Failover untuk instance dengan replika baca

Saat primer gagal, layanan pemantauan kondisi Memorystore akan memulai failover dan layanan utama baru akan tersedia untuk pembacaan dan penulisan. Failover biasanya selesai dalam waktu kurang dari 30 detik.

Saat failover terjadi, endpoint primer akan otomatis mengalihkan traffic ke endpoint utama yang baru, tetapi semua koneksi klien ke endpoint primer terputus selama failover. Aplikasi dengan logika percobaan ulang koneksi akan otomatis terhubung kembali setelah jaringan utama baru online. Beberapa koneksi klien ke endpoint baca juga mengalami pemutusan 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 failover terjadi, karena sifat replikasi yang asinkron, replika dapat memiliki jeda replikasi yang berbeda. Namun, proses failover melakukan upaya terbaik untuk menggagalkan replika dengan jeda paling sedikit. Hal ini membantu meminimalkan jumlah kehilangan dan pengurangan data throughput baca selama failover. Domain utama yang baru dipromosikan dapat berada di zona yang sama atau zona berbeda dengan zona primer sebelumnya. Replika dipilih untuk menjadi primer baru jika berada di zona yang sama dengan zona sebelumnya dan memiliki jeda paling sedikit. Jika tidak, replika dari zona lain dapat menjadi zona utama yang baru.

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

Redis melakukan upaya terbaik 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 operasi tulis dan ukuran set data yang sedang direplikasi. Selama waktu ini, replika yang menjalani sinkronisasi penuh tidak tersedia untuk dibaca. Setelah sinkronisasi selesai, replika dapat diakses untuk dibaca.

Mode kegagalan untuk replika baca

Instance dengan replika baca dapat mengalami berbagai kegagalan dan kondisi tidak responsif yang memengaruhi aplikasi. Perilaku ini 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 Compute Engine atau kegagalan zona, replika tidak akan dipulihkan hingga kondisinya diatasi.

Kegagalan zona

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

  • Jika zona tempat satu atau beberapa replika berada gagal, replika tersebut tidak akan tersedia selama durasi kegagalan zona. Jika ada dua kegagalan zona dan ada dua replika atau lebih, replika dengan jeda paling sedikit di zona yang tersisa akan dipromosikan ke replika utama. Replika apa pun yang tersisa di zona yang tidak terpengaruh tersedia untuk dibaca.

Partisi jaringan

Partisi jaringan adalah skenario saat node tetap berjalan, tetapi tidak dapat menjangkau semua klien, zona, atau node pembanding. Memorystore menggunakan sistem berbasis kuorum untuk mencegah node terisolasi menyajikan penulisan. Dalam kasus partisi jaringan, setiap primer dalam partisi minoritas akan didemosikan sendiri. Partisi mayoritas (jika ada) akan memilih primer baru jika belum memilikinya. Replika terisolasi akan terus menayangkan pembacaan. Namun, metode ini mungkin menjadi tidak berlaku jika tidak dapat disinkronkan dari utama.

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

Stok habis

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

Sinkronisasi penuh

Jika replika terlalu jauh di belakang yang utama, replika akan memicu sinkronisasi penuh yang menyalin seluruh snapshot dari utama ke replika. Operasi ini dapat berlangsung dari menit hingga satu jam dalam kasus terburuk. Sinkronisasi penuh tidak menyebabkan kegagalan instance, tetapi selama waktu ini replika yang menjalani sinkronisasi penuh tidak tersedia untuk pembacaan dan mengalami penggunaan CPU dan memori yang lebih tinggi.

Endpoint primer menampilkan HANYA BACA

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

Menskalakan pembacaan dengan endpoint operasi baca

Replika baca memungkinkan aplikasi menskalakan operasi bacanya 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 secara merata di seluruh replika dalam instance tersebut. Koneksi ke replika baca dapat mengirim kueri baca, tetapi tidak dapat menulis kueri. Setiap instance Tingkat Standar yang telah mengaktifkan replika baca memiliki endpoint baca. Untuk mendapatkan petunjuk tentang cara melihat endpoint baca instance Anda, 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 yang utama.
  • Replika dianggap tersedia selama dapat menayangkan traffic klien. Ini tidak termasuk saat replika menjalani sinkronisasi penuh dengan utamanya.
  • Replika dengan jeda replikasi yang tinggi akan terus melayani traffic. Aplikasi dengan volume tulis tinggi dapat membaca data lama dari replika yang menyajikan 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 masa aktif koneksi. Koneksi yang berbeda dari host klien yang sama tidak dijamin akan menargetkan node replika yang sama.

Konsistensi pembacaan

Replika baca dikelola menggunakan replikasi asinkron OSS Redis native. Karena sifat replikasi asinkron, replika ini mungkin tertinggal di belakang replika utama. Aplikasi dengan penulisan konstan yang juga membaca dari replika harus dapat menoleransi pembacaan yang tidak konsisten.

Jika aplikasi memerlukan konsistensi "baca penulisan Anda", sebaiknya gunakan endpoint utama untuk operasi tulis dan baca. Menggunakan endpoint primer akan memastikan bahwa pembacaan selalu diarahkan ke primer. Bahkan dalam kasus ini, pembacaan yang tidak berlaku mungkin terjadi setelah failover.

Menetapkan TTL pada kunci pada kunci utama akan memastikan kunci yang habis masa berlakunya tidak dibaca dari kunci utama atau replika. Hal ini karena Redis memastikan kunci yang sudah habis masa berlakunya tidak dapat dibaca dari replika.

Perilaku mengaktifkan replika baca pada instance yang ada

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

  • Jika replika baca diaktifkan pada instance Redis yang ada, Anda harus mengalokasikan rentang alamat IP tambahan yang valid dengan ukuran /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 mengizinkan Memorystore otomatis memilih rentang untuk Anda.
  • Alamat IP baca/tulis untuk instance Anda tidak berubah saat mengaktifkan replika baca. Alamat IP endpoint baca berada di 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 juga mengubah ukuran node:

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

Menambahkan replika baru akan menyebabkan pemuatan tambahan pada replika utama, sementara replika melakukan sinkronisasi penuh. Saat menambahkan node, koneksi yang ada tidak akan terpengaruh atau ditransfer. Setelah tersedia, replika baru akan mulai menerima koneksi dari endpoint dan menyalurkan pembacaan. Menghapus replika akan menutup semua koneksi aktif yang dirutekan ke replika tersebut. Aplikasi klien harus dikonfigurasi agar otomatis terhubung kembali ke endpoint baca untuk menghubungkan kembali koneksi ke replika yang tersisa.

Praktik terbaik

Manajemen memori

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

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

Untuk menjamin replikasi dan pembuatan 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.

Pengelolaan CPU

Memorystore menyediakan metrik tentang penggunaan CPU dan jumlah koneksi untuk setiap node. Sebaiknya alokasikan overhead yang cukup sehingga hilangnya satu zona ketersediaan dapat ditoleransi. 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 dapat 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 secara berkala agar Memorystore dapat menyeimbangkan kembali koneksi secara otomatis. Memorystore tidak menyeimbangkan kembali koneksi terbuka.

Pengelolaan saldo koneksi

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

Pengelolaan jeda replikasi

Replika dapat tertinggal, terutama jika kecepatan operasi tulis sangat tinggi. Dalam skenario seperti ini, replika akan terus tersedia untuk dibaca. Dalam situasi ini, operasi baca dari replika bisa jadi sudah tidak berlaku dan aplikasi harus dapat menangani hal ini, atau tingkat operasi tulis yang tinggi harus diatasi.

Langkah selanjutnya