问题排查

本页面介绍了各种错误场景、这些场景的错误消息以及解决这些错误的问题排查步骤。

网络错误场景

已用完分配的 IP 范围

Memorystore for Memcached 要求您使用专用服务访问连接以及与该连接关联的 IP 地址范围。可以用尽该范围内 Memcached 实例和其他 Google Cloud 资源可用的 IP 地址。

如果 IP 地址已用尽,则创建实例将返回以下错误消息:

ERROR: (gcloud.memcache.instances.create) { "code": 9, "message": "Unable to create instance. The allocated private IP address space is exhausted. For information on expanding the allocation, see https://cloud.google.com/vpc/docs/configure-private-services-access#modify-ip-range" }

您可以通过分配其他 IP 地址来解决此问题。如需详细了解如何执行此操作,请参阅 IP 地址范围用尽

您没有为网络建立专用服务访问连接

如果您尝试创建 Memorystore for Memcached 实例而不为项目的网络建立专用服务访问连接,则创建会失败并显示以下错误:

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

要成功创建实例,请按照建立专用服务访问连接中的专用服务访问设置说明进行操作。

已删除专用服务访问通道的网络对等互连

建立专用服务访问连接会创建一个名为 servicenetworking-googleapis-com 的网络对等互连连接,该连接显示在项目的 VPC 网络对等互连页面中。

如果删除此网络对等互连,您可能会收到以下错误:

  • telnet: Unable to connect to remote host: Connection timed out
  • Unable to create instance. Enable private service access for the authorized network and try again. For information on enabling private service access, see https://cloud.google.com/service-infrastructure/docs/enabling-private-services-access

为解决此问题,请按照建立专用服务访问连接中 gcloud 说明的最后一步进行操作。

防火墙规则会阻止您的实例 IP 地址

如果您创建的防火墙规则会阻止专用服务访问连接关联的已分配 IP 范围中的 IP 地址,则可能会遇到连接问题。

切勿创建会阻止 Memcached 实例 IP 范围的网络防火墙规则。

从其他 Google Cloud 资源连接到 Memcached 实例时出错

从 App Engine 标准环境或 Cloud Functions 连接到实例时出错

如果您无法使用 App Engine 标准环境或 Cloud Functions 连接到 Memcached 实例,可能的原因是您没有为环境设置无服务器 VPC 访问通道连接器。

如需了解如何为 App Engine 标准环境设置无服务器 VPC 访问通道,请参阅连接到 VPC 网络

如需了解如何为 Cloud Functions 设置无服务器 VPC 访问通道,请参阅连接到 VPC 网络

使用 Google Kubernetes Engine 集群连接到实例时出错

如果您的集群上未启用 VPC 原生/IP 别名,则您无法从 GKE 集群连接到 Memorystore for Memcached 实例。在 GKE 集群创建期间启用 VPC 原生/IP 别名最为简单。创建集群时,请选择高级选项下的 VPC 原生。如需了解详情,请参阅创建 VPC 原生集群

使用 App Engine 柔性环境或 Compute Engine 虚拟机连接到到实例时出错

如果您的实例遇到连接问题,请按照以下问题排查步骤进行操作:

  1. 确保已将 Memcached 实例预配在与尝试访问它的客户端所在的同一区域和网络中。

  2. 确保您的项目没有任何网络防火墙规则会阻止 Memcached 实例的节点 IP。

    • 如需查看节点的 IP 地址,请在 Google Cloud Console 中查看 Memcached 实例的节点标签页。
  3. 使用 telnet 连接到您的某个 Memcached 节点,然后运行一些简单的 Memcached setget 命令以查看实例是否响应。

Identity and Access Management (IAM) 错误场景

恢复已删除的服务帐号

Memorystore for Memcached 使用以下服务帐号管理 Memcached 实例:

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

删除这些服务帐号的政策绑定会导致您无法创建新实例。

如果您尝试在此场景中使用 gcloud 创建 Memcached 实例,则可能会收到以下错误消息:

ERROR: (gcloud.memcache.instances.create) { "code": 13, "message": "an internal error has occurred" }

要为这些服务帐号重新建立政策绑定,请运行以下命令之一,并将 variables 替换为适当的值。运行与已删除服务帐号相关联的命令。

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-memcache-sa.iam.gserviceaccount.com' --role='roles/memcache.serviceAgent'

操作超时错误

以下错误场景会导致 Memcached 实例无响应和/或实例/节点操作超时。

网络分区错误

有时,由于 Google Cloud 服务器中发生网络分区错误,导致 Google Cloud 资源无法在某个区域内的各地区之间进行通信。这可能会导致实例失去连接,从而造成超时错误。

在 Google Cloud 解决预配了实例的区域或地区的网络分区错误后,连接应该恢复正常。

在此场景中,您可能会看到类似如下所示的连接错误消息:

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

如果您无法确定超时错误的原因,请与 Google Cloud 支持团队联系。

应用对节点 IP 的引用不当

如果客户端在尝试连接到节点时遇到超时,则有一个潜在问题是您的应用可能未指定您尝试连接的节点的正确 IP 地址。请验证您的应用是否指向集群中的节点的 IP 地址。

在此场景中,您可能会看到类似如下所示的连接错误消息:

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

要解决此问题,请查找节点的 IP 地址,并确保您的应用准确指向节点地址。

其他错误场景

不受支持的 Compute Engine IP 地址范围

您无法从 IP 地址在 172.17.0.0/16 范围内的 Compute Engine 虚拟机访问 Memorystore for Memcached,因为该范围是为内部组件预留的。

节点在区域内的各地区间分布不均衡

如果在预配 Memcached 实例时 Google Cloud 区域内的某个地区不可用,则会在可用地区中创建节点。这可能导致 Memached 节点在区域内的各地区间分布不均衡。

这不会对您的应用性能产生明显影响。但是,理想情况下,您的节点应该分布在区域的所有地区中,以免数据受到地区中断的影响。

如果您在创建实例时对各地区间的节点分布不满意,则可以等到该地区重新联网后再创建实例,您也可以随时使用以下策略尝试在各地区间重新分布节点:

要在某地区的可用节点中重新分布 Memcached 节点,请扩展实例,然后缩减回所需的节点数量。如果所需的地区重新联网,则扩缩程序将在各个可用地区之间均匀分布节点。另请注意,扩缩会导致 Memcached 实例中的数据缓存被清空。