Memecahkan masalah

Halaman ini menjelaskan berbagai skenario error, pesan error untuk skenario tersebut, dan langkah-langkah pemecahan masalah untuk mengatasi error.

Skenario error konektivitas

Jika instance Anda mengalami masalah konektivitas, periksa skenario di bagian ini untuk melihat apakah salah satu skenario tersebut yang menyebabkan masalah.

Jika tidak, Telnet ke salah satu node Redis Anda dan jalankan beberapa perintah Redis sederhana untuk melihat apakah instance responsif atau tidak.

Error koneksi yang disebabkan oleh resource yang disediakan di jaringan VPC yang berbeda

Agar terhubung ke instance Memorystore dari resource Google Cloud, seperti VM Compute Engine, resource harus disediakan pada jaringan VPC resmi yang sama dengan instance Redis.

Mencoba melakukan Telnet ke instance Memorystore dari resource di region atau jaringan VPC yang berbeda akan menghasilkan pesan error berikut:

telnet: Unable to connect to remote host: Connection timed out

Error koneksi disebabkan oleh peering jaringan VPC yang dihapus

Membuat instance Memorystore for Redis akan menghasilkan peering VPC antara jaringan VPC Anda dan jaringan VPC internal Google.

Peering jaringan menggunakan format berikut:

redis-peer-############

Jika peering jaringan ini dihapus, upaya melakukan Telnet ke instance Redis akan menghasilkan pesan error berikut:

telnet: Unable to connect to remote host: Connection timed out

Cara termudah untuk membangun kembali peering jaringan yang dihapus adalah dengan membuat instance Memorystore baru untuk Redis. Membuat instance Redis baru akan membangun kembali peering jaringan yang dihapus, sehingga Anda dapat menghapusnya dan instance Redis asli Anda memiliki peering jaringan yang dibutuhkan.

Aturan firewall memblokir alamat IP instance Anda

Masalah konektivitas dapat muncul jika Anda membuat aturan firewall keluar yang memblokir port Redis (6379) atau alamat IP instance.

Pastikan Anda tidak membuat aturan firewall jaringan yang memblokir rentang IP instance Redis Anda.

Skenario error penggunaan CPU tinggi

Ketidakresponsifan instance Redis yang disebabkan oleh penggunaan perintah Redis yang mahal dan tidak tepat

Jika instance Redis Anda mengalami latensi tinggi, tidak responsif, atau masalah konektivitas, masalah tersebut mungkin disebabkan oleh penggunaan perintah Redis yang berat dan tidak tepat berikut:

Perintah ini dapat memberikan tekanan CPU yang berat pada instance Anda. Redis open source mencegah agar KEYS tidak dijalankan di lingkungan produksi, tetapi Anda dapat menggunakan SCAN, yang merupakan alternatif lebih aman untuk perintah KEYS. Menggunakan LRANGE untuk mengueri semua atau sebagian besar ruang kunci dapat menuntut resource CPU yang tinggi. Menggunakan skrip Lua yang kompleks dengan EVAL dapat menyebabkan penggunaan CPU yang tinggi.

HGETALL dan ZRANGE juga dapat menampilkan kunci dalam jumlah yang sangat besar, yang berdampak buruk pada performa server Anda.

Sebelum menjalankan perintah yang mahal, Anda harus memeriksa ukuran struktur data yang dikueri oleh kueri perintah untuk memastikan bahwa ukuran tersebut tidak menyebabkan latensi.

Jika instance Anda mengalami latensi tinggi atau tidak responsif, periksa log sisi klien untuk menemukan apakah ada perintah yang mahal yang telah dijalankan. Jika ya, catat waktunya. Selanjutnya, gunakan Cloud Monitoring untuk melihat metrik redis.googleapis.com/stats/cpu_utilization. Lihat apakah periode penggunaan CPU yang tinggi bertepatan dengan periode yang sama saat perintah yang mahal dijalankan.

Sebaiknya jangan gunakan perintah KEYS di lingkungan production. Untuk EVAL, gunakan skrip Lua yang tidak terlalu kompleks. Untuk LRANGE, kurangi jumlah kunci dalam keyset yang dikueri dalam satu operasi.

Skenario error jaringan

Rentang IP yang dialokasikan habis atau terdapat rute yang bertentangan

Saat membuat resource dalam rentang alamat IP yang dikhususkan untuk Memorystore untuk Redis, Anda dapat menggunakan semua alamat, yang menyebabkan pesan error di bawah ini. Atau, mungkin ada rute yang bertentangan dengan alamat IP instance Redis yang Anda coba buat.

Skenario ini menyebabkan pesan error berikut:

The IP ranges for the connection do not have enough available IPs. Allocate a new range or expand existing range and try again.

Anda dapat mengatasi masalah ini dengan mengalokasikan alamat IP tambahan, atau menghapus perbedaan konflik rute. Untuk informasi selengkapnya tentang cara melakukannya, lihat Kehabisan rentang alamat IP.

Anda tidak memiliki koneksi akses layanan pribadi yang dibuat untuk jaringan Anda

Jika instance Redis menggunakan mode koneksi akses layanan pribadi dan koneksi akses layanan pribadi tidak ada untuk jaringan Anda, Anda mungkin akan menerima error berikut:

Google private service access is not enabled. Enable private service access and try again

Untuk mengatasi masalah ini, buat koneksi akses layanan pribadi.

Peering jaringan untuk akses layanan pribadi dihapus

Membuat koneksi akses layanan pribadi akan menghasilkan koneksi peering jaringan yang disebut servicenetworking-googleapis-com, yang akan muncul di halaman Peering Jaringan VPC project Anda.

Menghapus peering jaringan akan menyebabkan Anda menerima error berikut untuk instance Redis yang ada:

  • telnet: Unable to connect to remote host: Connection timed out

Menghapus peering jaringan akan menyebabkan Anda menerima error berikut saat membuat instance Redis:

  • Private services access is not configured correctly. For steps on how to verify the connection, check the documentation.

Untuk mengatasi masalah ini, ikuti langkah terakhir petunjuk gcloud di Membuat koneksi akses layanan pribadi.

Tanda jaringan yang bertentangan selama pembuatan instance Redis

Jika menggunakan parameter --reserved-ip-range dan parameter --connect-mode=private-service-access, Anda akan menerima error berikut:

Reserved IP range is not supported for --connect-mode private services access

Untuk mengatasi masalah ini, gunakan --reserved-ip-range dengan --connect-mode=direct-peering atau gunakan --connect-mode=PRIVATE_SERVICE_ACCESS.

Anda tidak dapat menggunakan keduanya sekaligus, karena parameter --reserved-ip-range tidak didukung untuk mode koneksi akses layanan pribadi.

Melebihi kuota subjaringan untuk project Anda

Terdapat batas jumlah subjaringan yang dapat dibuat dalam project Anda. Jika melebihi kuota ini, Anda akan menerima pesan error berikut:

Internal network quota exceeded. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8 atau

Unable to create instance. Network quota limit has been reached. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8

Untuk mengatasi masalah ini, isi formulir dalam pesan error atau hubungi Dukungan Google Cloud.

Project layanan tidak dilampirkan ke project host

Jika Anda menggunakan VPC Bersama, project layanan Anda tidak akan dikaitkan ke project host jika error berikut terjadi:

Invalid network name <network-name>. Project <project-name> referenced is not the host project for <service-project-name>.

Untuk mengatasi masalah ini, lampirkan project layanan ke project host Anda.

Penggunaan mode koneksi peering langsung dan jaringan VPC Bersama tidak kompatibel selama pembuatan instance

Anda tidak dapat membuat instance Redis dalam project layanan dengan mode koneksi peering langsung saat menentukan jaringan VPC Bersama dari project host untuk instance tersebut.

Mode koneksi ditetapkan ke direct-peering secara default jika Anda tidak menetapkan nilai untuk --connection-mode. Jika Anda mencoba menggunakan mode koneksi peering langsung selama pembuatan instance dan juga memilih jaringan VPC Bersama dari project host sebagai nilai untuk --network, Anda akan menerima error berikut:

Authorized_network must exist in the same project as redis instance

Untuk mengatasi masalah ini, pastikan Anda menentukan --connect-mode=PRIVATE_SERVICE_ACCESS dalam perintah pembuatan instance Redis, atau memilih jaringan VPC resmi dalam project yang sama dengan instance Redis Anda.

Rentang alamat IP Compute Engine tidak didukung

Anda tidak dapat mengakses Memorystore for Redis dari VM Compute Engine yang memiliki alamat IP dalam rentang 172.17.0.0/16, karena rentang tersebut dicadangkan untuk komponen internal.

Terjadi error saat menghubungkan ke instance Redis dari resource Google Cloud lainnya

Error saat terhubung ke instance Anda dari lingkungan serverless yang memerlukan konektor Akses VPC Serverless

Jika Anda tidak dapat terhubung ke instance Redis menggunakan salah satu lingkungan serverless yang memerlukan konektor Akses VPC Serverless, mungkin Anda belum menyiapkan konektor Akses VPC Serverless untuk lingkungan Anda.

Lihat Persyaratan konektor Akses VPC Serverless untuk mengetahui detail selengkapnya.

Terjadi error saat terhubung ke instance Anda menggunakan cluster Google Kubernetes Engine

Anda tidak dapat terhubung ke instance Memorystore for Redis dari cluster GKE tanpa mengaktifkan aliasing IP/native VPC pada cluster Anda. Cara paling mudah untuk mengaktifkan VPC-native/aliasing IP selama pembuatan cluster GKE. Saat membuat cluster, pilih VPC Native di bagian opsi lanjutan. Untuk detail selengkapnya, lihat Membuat cluster VPC native.

Skenario error Identity and Access Management ( IAM)

Memulihkan binding kebijakan yang telah dihapus untuk akun layanan

Memorystore for Redis menggunakan akun layanan berikut untuk mengelola instance Redis Anda:

  • service-project-number@service-networking.iam.gserviceaccount.com
  • service-project-number@cloud-redis.iam.gserviceaccount.com

Jika binding kebijakan untuk akun layanan ini dihapus, Anda tidak dapat membuat instance baru.

Jika Anda mencoba membuat instance Redis menggunakan gcloud dalam skenario ini, Anda mungkin akan menerima pesan error berikut:

(gcloud.redis.instances.create) FAILED_PRECONDITION: A required IAM policy might be missing. Please run this command:"gcloud projects add-iam-policy-binding <YOUR-PROJECT-ID> --member='serviceAccount:service-<YOUR-PROJECT-NUMBER>@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'" and try again.

Untuk membuat kembali binding kebijakan untuk akun layanan ini, jalankan salah satu perintah berikut, dengan mengganti variables dengan nilai yang sesuai. Jalankan perintah yang terkait dengan akun layanan yang dihapus.

gcloud projects add-iam-policy-binding project-id --member='serviceAccount:service-project-number@service-networking.iam.gserviceaccount.com' --role='roles/servicenetworking.serviceAgent'
gcloud projects add-iam-policy-binding project-id --member='serviceAccount:service-project-number@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'

Error waktu tunggu operasi

Skenario error berikut menyebabkan instance Redis dan/atau waktu tunggu operasi instance/node tidak responsif.

Error partisi jaringan

Terkadang, resource Google Cloud tidak dapat berkomunikasi lintas zona dalam satu region karena terjadi error partisi jaringan pada server Google Cloud. Hal ini dapat menyebabkan instance Anda kehilangan koneksi, sehingga akan menyebabkan error waktu tunggu.

Setelah Google Cloud menyelesaikan error partisi jaringan untuk region atau zona tempat instance Anda disediakan, konektivitas akan dilanjutkan secara normal.

Dalam skenario ini, Anda mungkin melihat pesan error konektivitas seperti berikut:

telnet: Unable to connect to remote host: Connection timed out

Jika Anda tidak dapat mengidentifikasi penyebab error waktu tunggu habis, hubungi Dukungan Google Cloud.

Project layanan dan project host tidak berada dalam perimeter kontrol layanan VPC yang sama

Jika Anda menggunakan VPC Bersama dan perimeter kontrol layanan VPC, dan waktu operasi pembuatan instance Redis Anda habis, hal ini mungkin menunjukkan bahwa project layanan dan project host Anda tidak berada dalam perimeter layanan yang sama. Project layanan dan project host Anda harus berada dalam perimeter yang sama agar instance Redis dapat berkomunikasi dengan klien yang terhubung melalui jaringan VPC Bersama.

Untuk mengetahui apakah Anda mengalami masalah ini, periksa log audit instance Redis Anda untuk menemukan error berikut:

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Untuk mengatasi masalah ini, tempatkan jaringan host dan jaringan layanan Anda di perimeter layanan yang sama.

Memecahkan masalah impor dan ekspor

Bagian ini menjelaskan beberapa masalah umum yang mungkin Anda alami saat menggunakan impor dan ekspor untuk Memorystore for Redis.

Tombol impor dan ekspor dinonaktifkan di Konsol Google Cloud

Masalah: pengguna yang login ke konsol tidak memiliki izin redis.instances.import dan/atau redis.instances.export yang diperlukan untuk mengimpor dan/atau mengekspor file RDB.

Solusi: berikan izin kepada pengguna, lalu muat ulang halaman detail instance.

Operasi impor selesai, tetapi data tidak dipulihkan

Jika operasi impor selesai tetapi data tidak dipulihkan, periksa pesan error di Google Cloud Console atau command line terlebih dahulu, dan selesaikan semua masalah yang dijelaskan oleh pesan error tersebut.

Jika terjadi kegagalan selama proses impor, instance akan dipulihkan menggunakan file RDB kosong. Anda dapat mencoba memulihkan data dengan mengimpor lagi file RDB yang sama, atau menggunakan file RDB yang berbeda.

Impor gagal karena file RDB terlalu besar

Jika Anda menerima pesan error "Import RDB file gs://bucket/object.rdb size exceeds max memory 10GB", Anda harus meningkatkan skala instance dan mencoba impor. Anda juga dapat mencoba mengimpor file RDB yang lebih kecil ke instance.

Memecahkan masalah Google Cloud CLI

Jika Anda mengalami masalah di mana perintah gcloud CLI tidak tersedia, atau jika perintah berperilaku berbeda dengan yang didokumentasikan, coba update gcloud CLI:

gcloud components update

Menghentikan semua perintah dan koneksi yang sedang berlangsung untuk instance Redis

Karena Memorystore for Redis adalah produk terkelola Google, ada beberapa perintah yang diblokir di instance Redis Anda untuk memberikan lingkungan yang aman dan andal. Salah satu perintah yang dibatasi adalah CLIENT, yang menyertakan CLIENT KILL, digunakan untuk menghentikan perintah.

Jika perintah Redis menggunakan banyak pemakaian CPU/RAM dan memengaruhi lingkungan produksi, Anda perlu memulai ulang instance (untuk konfigurasi Tingkat Dasar), atau melakukan failover ke replika (untuk konfigurasi Tingkat Standar). Operasi mulai ulang/kegagalan ini menghentikan semua perintah yang berjalan di server Redis, dan mengakhiri semua koneksi yang sedang berlangsung.

Di bawah ini, Anda akan menemukan perintah untuk memulai ulang atau failover setiap konfigurasi Memorystore for Redis.

Menghentikan perintah di instance Memorystore for Redis tingkat Standar

gcloud redis instances failover INSTANCE_NAME --data-protection-mode=limited-data-loss

Menghentikan perintah pada instance Memorystore for Redis tingkat Dasar

Satu-satunya cara untuk memulai ulang dalam instance Memorystore for Redis adalah mengubah konfigurasinya, seperti meningkatkan skala instance. Contoh perintah yang dapat Anda jalankan untuk memulai ulang instance dapat dilihat di bawah ini.

gcloud redis instances update INSTANCE_NAME --region REGION_ID --size NUMBER_GB

Setelah menskalakan instance ke ukuran yang berbeda, Anda dapat menjalankan operasi penskalaan lain untuk mengembalikannya ke ukuran aslinya.

Masalah terkait kebijakan organisasi berbagi yang dibatasi domain

Bergantung pada kapan instance Anda dibuat, Memorystore for Redis menggunakan salah satu dari dua format akun layanan yang berbeda. Untuk mengidentifikasi format akun layanan mana yang digunakan instance Anda, lihat Format akun layanan Memorystore untuk Redis.

Ada masalah umum saat kebijakan organisasi iam.allowedPolicyMemberDomains menyebabkan error saat digunakan dengan instance Memorystore for Redis yang menggunakan format akun layanan [PROJECT_NUMBER]-compute@developer.gserviceaccount.com.

Dalam skenario berikut, Anda mungkin mengalami error ini: One or more users named in the policy do not belong to a permitted customer.

Ada dua opsi untuk mengatasi masalah ini.

Opsi 1

Anda dapat membuat instance baru. Instance yang baru dibuat memiliki format akun layanan yang sesuai dan kompatibel dengan kebijakan organisasi. Jika sangat penting untuk mempertahankan konten cache, Anda dapat melakukan ekspor untuk mencadangkan data yang ada dan impor ke instance baru. Perhatikan bahwa instance yang baru dibuat memiliki alamat IP layanan baru yang perlu dikonfigurasi dalam aplikasi Anda.

Opsi 2

Jika instance Memorystore tidak dapat dibuat, ikuti solusi Memaksa akses akun.