Tentang replika baca

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

Replika baca memungkinkan Anda menskalakan beban kerja baca dengan membuat kueri 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 rekomendasi, dan kasus penggunaan lainnya memerlukan instance yang sangat tersedia. Untuk kasus penggunaan ini, ada lebih banyak operasi baca daripada operasi tulis, dan kasus penggunaan ini umumnya dapat mentoleransi beberapa operasi baca yang tidak terbaru. Dalam kasus seperti ini, sebaiknya manfaatkan replika baca untuk meningkatkan ketersediaan dan skalabilitas instance.

Perilaku replika baca

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 node penyediaan, 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 baca dan utama di seluruh zona yang tersedia di suatu region.

Setiap instance memiliki endpoint utama dan endpoint baca. Endpoint utama selalu mengarahkan traffic ke node utama, sedangkan endpoint baca secara otomatis menyeimbangkan beban 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 utama baru dan memulai failover otomatis ke utama baru.

Failover untuk instance dengan replika baca

Jika utama gagal, layanan pemantauan kesehatan Memorystore akan memulai failover dan 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 utama baru. Namun, semua koneksi klien ke endpoint utama akan terputus selama failover. Aplikasi dengan logika coba lagi 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 mencoba 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 akan berupaya sebaik mungkin untuk melakukan failover ke replika dengan jeda terkecil. 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 untuk menjadi utama baru jika berada di zona yang sama dengan utama sebelumnya dan memiliki jeda terkecil. Jika tidak, replika dari zona yang berbeda dapat menjadi utama baru.

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

Redis berupaya sebaik 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 tidak sehat 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 kegagalan zona, Memorystore for Redis tidak akan memulihkan replika hingga zona tersedia.

Kegagalan zona

  • Jika zona tempat utama berada gagal, utama akan otomatis melakukan failover 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 akan tersedia untuk operasi baca

  • Jika zona tempat satu atau beberapa replika berada gagal, replika tersebut tidak akan tersedia selama kegagalan zona. Jika terjadi kegagalan dua zona dan ada dua replika atau lebih, replika dengan jeda terkecil di zona yang tersisa akan dipromosikan menjadi utama. 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 kuorum untuk mencegah node terisolasi menayangkan operasi tulis. Jika terjadi partisi jaringan, utama di partisi minoritas akan melakukan demosi sendiri. Partisi mayoritas (jika ada) akan memilih utama baru jika belum memilikinya. Replika terisolasi akan terus menayangkan operasi baca. Namun, replika tersebut mungkin tidak terbaru jika tidak dapat disinkronkan dari utama.

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

Sinkronisasi penuh

Jika replika tertinggal terlalu jauh dari utama, replika akan memicu sinkronisasi penuh yang menyalin seluruh snapshot dari utama ke replika. Operasi ini dapat memerlukan waktu beberapa 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 operasi baca dan 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 akan menerima error -READONLY You can't write against a read only replica. secara tidak terduga. Sebaiknya tutup dan buat ulang koneksi ke instance. Dalam sebagian besar kasus, memulai ulang aplikasi klien dapat mengurangi masalah ini. Jika opsi ini tidak memungkinkan atau perilaku tetap terjadi, 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.

Endpoint baca

Endpoint baca adalah alamat IP yang terhubung dengan aplikasi Anda. Endpoint ini menyeimbangkan beban 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 mengetahui petunjuk tentang cara melihat endpoint baca instance, lihat Melihat informasi replika baca untuk instance Anda.

Perilaku endpoint baca

  • Endpoint baca secara otomatis mendistribusikan koneksi di seluruh replika yang tersedia. Koneksi tidak diarahkan ke utama.
  • Replika dianggap tersedia selama dapat menayangkan traffic klien. Hal ini tidak mencakup waktu saat replika menjalani sinkronisasi penuh dengan utamanya.
  • Replika dengan jeda replikasi yang tinggi akan terus menayangkan traffic. Aplikasi dengan volume tulis yang tinggi dapat membaca data yang tidak terbaru dari replika yang menayangkan operasi tulis yang tinggi.
  • Jika node replika menjadi utama, koneksi ke node tersebut akan dihentikan dan koneksi baru akan dialihkan ke node replika baru.
  • Koneksi individual 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 baca

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

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

Menetapkan TTL pada kunci di utama memastikan kunci yang sudah tidak berlaku tidak dibaca dari utama maupun replika. Hal ini karena Redis memastikan kunci yang sudah tidak berlaku tidak dapat dibaca dari replika.

Perilaku pengaktifan replika baca pada instance yang ada

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

  • Mengaktifkan replika baca pada instance Redis yang ada mengharuskan Anda mengalokasikan rentang alamat IP sekunder yang valid untuk penempatan node. Rentang ini harus berupa rentang Classless Inter-Domain Routing (CIDR) 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 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 Anda, 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 Anda, dan Anda juga dapat mengubah ukuran node:

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

Menambahkan replika baru akan menghasilkan beban tambahan pada utama saat replika melakukan sinkronisasi penuh. Saat menambahkan node, koneksi yang ada tidak terpengaruh atau ditransfer. Setelah replika baru tersedia, replika 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 membuat ulang koneksi ke replika yang tersisa.

Praktik terbaik

Pengelolaan memori

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

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

Untuk menjamin replikasi dan pembuatan snapshot dalam segala 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 mempertahankan penggunaan CPU replika di bawah 50%.

Node individual 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 menyeimbangkan kembali koneksi secara otomatis. Memorystore tidak menyeimbangkan kembali koneksi yang terbuka.

Pengelolaan keseimbangan koneksi

Setiap kali koneksi node ditutup, klien harus terhubung kembali, biasanya dengan mengaktifkan koneksi 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 tulis sangat tinggi. Dalam skenario seperti itu, replika akan terus tersedia untuk operasi baca. Dalam situasi ini, operasi baca dari replika mungkin tidak terbaru dan aplikasi harus dapat menanganinya, atau kecepatan tulis yang tinggi harus diatasi.

Mengaktifkan replika baca pada instance yang ada

Sebelum mengaktifkan replika baca pada instance Memorystore for Redis yang ada, sebaiknya kurangi traffic tulis ke node utama. Dengan begitu, node utama dapat menyinkronkan data ke replika sepenuhnya. Jika Anda tidak mengurangi traffic tulis, Anda mungkin tidak dapat mengaktifkan replika baca.

Langkah berikutnya