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 memahami berbagai kemampuan tingkat Redis Memorystore.

Replika baca memungkinkan Anda menskalakan workload baca dengan mengkueri replika. Endpoint baca disediakan untuk memudahkan aplikasi mendistribusikan kueri di seluruh replika. Untuk mengetahui informasi selengkapnya, lihat Menskalakan pembacaan 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 pemberi saran, dan kasus penggunaan lainnya mengharuskan instance memiliki ketersediaan tinggi. Untuk kasus penggunaan ini, ada lebih banyak operasi baca daripada operasi tulis, dan kasus penggunaan ini umumnya dapat menoleransi beberapa stale read. Dalam kasus seperti ini, sebaiknya manfaatkan replika baca untuk meningkatkan ketersediaan dan skalabilitas instance.

Perilaku replika baca

  • Replika baca tidak diaktifkan di instance Paket Standar secara default.
  • Untuk membantu melindungi data Anda dan memberikan tingkat persistensi dasar, snapshot RDB diaktifkan secara default saat Anda membuat instance Memorystore for Redis menggunakan konsol Google Cloud .
  • Setelah replika baca diaktifkan pada suatu instance, replika baca tidak dapat lagi dinonaktifkan untuk instance tersebut.
  • Instance Paket 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 baru.
  • Jika Anda menetapkan zona dan zona alternatif untuk menyediakan node, Memorystore akan menggunakan zona tersebut untuk node pertama dan kedua dalam 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 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 utama dan replika baca di seluruh zona yang tersedia di suatu region.

Diagram arsitektur yang menunjukkan Memorystore for Redis Paket Standar dengan replika baca

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. Dalam diagram, traffic baca dan tulis ke endpoint utama ditampilkan dengan warna biru, dan traffic baca ke endpoint baca dan replika ditampilkan dengan warna hijau.

Layanan pemantauan kondisi 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 kondisi 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 instance utama baru online. Beberapa koneksi klien ke endpoint baca juga mengalami pemutusan koneksi dari replika baca yang dipromosikan ke utama selama failover. Koneksi ke replika yang tersisa terus dilayani 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. Instance utama yang baru dipromosikan dapat berada di zona yang sama atau berbeda dengan instance utama sebelumnya. Replika dipilih untuk menjadi replika utama baru jika berada di zona yang sama dengan replika utama sebelumnya dan memiliki jeda paling sedikit. Jika tidak, replika dari zona lain dapat menjadi replika utama baru.

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

Redis berupaya 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 pembacaan. Setelah sinkronisasi selesai, replika dapat diakses untuk pembacaan.

Mode kegagalan untuk replika baca

Instance dengan replika baca dapat mengalami berbagai kegagalan dan kondisi tidak responsif 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 instance utama berada gagal, instance utama akan otomatis gagal beralih 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 pembacaan

  • 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. Setiap replika 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 peer. Memorystore menggunakan sistem berbasis kuorum untuk mencegah node yang terisolasi melayani penulisan. Jika terjadi partisi jaringan, setiap primer dalam partisi minoritas akan mendemosi dirinya sendiri. Partisi mayoritas (jika ada) memilih primer baru jika belum memilikinya. Replika yang terisolasi akan terus menyajikan pembacaan. Namun, data tersebut dapat menjadi usang jika tidak dapat disinkronkan dari database utama.

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

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 mulai dari 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 pembacaan dan replika 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 secara tidak terduga menerima error -READONLY You can't write against a read only replica.. 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 pembacaan 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 dihubungkan oleh aplikasi Anda. Proxy 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 Paket Standar yang mengaktifkan replika baca memiliki endpoint baca. Untuk mengetahui petunjuk cara melihat endpoint baca instance, lihat Melihat informasi replika baca untuk instance Anda.

Perilaku endpoint baca

  • Endpoint baca otomatis mendistribusikan koneksi ke semua replika yang tersedia. Koneksi tidak diarahkan ke instance utama.
  • Replika dianggap tersedia selama dapat melayani traffic klien. Hal ini tidak termasuk saat replika sedang menjalani sinkronisasi penuh dengan replika utamanya.
  • Replika dengan jeda replikasi yang tinggi akan terus menyalurkan traffic. Aplikasi dengan volume penulisan tinggi dapat membaca data yang tidak berlaku dari replika yang melayani penulisan tinggi.
  • Jika node replika menjadi node 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 pembacaan

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

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

Menetapkan TTL pada kunci di instance utama memastikan kunci yang sudah tidak berlaku tidak dibaca dari instance utama atau 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) 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 terletak 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, 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 replika utama saat 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 menyajikan pembacaan. Menghapus replika akan menutup semua 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

Manajemen memori

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

Jika Memorystore sedang menjalani operasi BGSAVE karena ekspor atau replikasi 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 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 agar 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%.

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 ulang 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 dialihkan, tetapi koneksi baru akan dirutekan ke node baru. Klien dapat menghentikan koneksi secara berkala untuk memastikan koneksi diseimbangkan di seluruh node yang tersedia.

Pengelolaan jeda replikasi

Replika mungkin tertinggal, terutama jika rasio penulisan sangat tinggi. Dalam skenario tersebut, replika akan terus tersedia untuk pembacaan. Dalam keadaan ini, pembacaan dari replika dapat menjadi usang dan aplikasi harus dapat menangani hal ini, atau tingkat penulisan yang tinggi harus diatasi.

Mengaktifkan replika baca di instance yang ada

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

Langkah berikutnya