您正在查看 Apigee 和 Apigee Hybrid 文档。
查看 Apigee Edge 文档。
症状
在多区域扩展期间复制数据时,CassandraDataReplication
状态可能会显示错误状态,并且数据复制可能会失败。
错误消息
当您使用
kubectl
查看重新构建状态时:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
您会看到一个或多个 Cassandra pod 显示错误状态以及一条说明重新构建失败的消息。例如:
{ "rebuildDetails": { "apigee-cassandra-default-0": { "message": "failed to rebuild from us-west1: java.lang.IllegalStateException : Unable to find sufficient sources for streaming range (-8567285182390470134,-8567154549835592965] in keyspace system_distributed", "state": "error", "updated": 1641581899 }, … } }
可能的原因
原因 | 说明 | 适用的问题排查说明 |
---|---|---|
来源区域不正确 | 为 Cassandra 数据复制 YAML 文件中的 source.region 指定的值不正确。 |
Apigee Hybrid |
网络连接问题 | 不同数据中心的 Cassandra pod 之间存在网络连接问题 | Apigee Hybrid |
常见诊断步骤
- 提取数据复制的状态:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}" - 如果您看到的消息错误类似于错误消息中指定的错误,则表示您正在观察此问题。
原因:来源区域不正确
如果您在数据复制 YAML 文件中指定的源区域 (datacenter
) 与实际来源 datacenter
不同,则数据复制将失败。执行诊断中的步骤来分析此场景,并执行解决方法中的步骤进行更正。
诊断
- 列出来源区域中的所有 Cassandra pod:
kubectl -n apigee get pods -l app=apigee-cassandra
- 从第 1 步中返回的任一 Cassandra pod 获取实际
datacenter
值:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- 获取您在多区域部署中创建的 Cassandra 数据复制自定义资源 (YAML) 文件中用于
source.region
的值。如果您使用的是多区域部署文档中的示例文件名,则文件应命名为datareplication.yaml
。cat datareplication.yaml
示例结果如下:
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "us-west1"
检查
nodetool status
输出的结果并验证datacenter
值是否与source.region
值匹配:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u jmxuser -pw iloveapis123 status
示例结果如下:
Datacenter: dc-1 ================ Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.104.13.2 491.84 KiB 256 100.0% 7254711c-fe0a-4b34-b50f-861109f97936 ra-1 UN 10.104.11.3 527.36 KiB 256 100.0% 5ec389f0-fd67-4de6-9f21-172d5899ff78 ra-1 UN 10.104.12.7 838.46 KiB 256 100.0% 7a88be82-1f81-4117-86e3-2cda434c0878 ra-1
- 请注意,
datareplication.yaml
文件中的source.region
(us-west1
) 与nodetool
状态输出中的实际datacenter
值 (dc-1
) 不匹配。按照解决方法中的步骤更正配置。
解决方法
如需更正数据复制,您需要删除数据复制作业,并使用正确的 datacenter
名称创建。执行以下步骤:
- 删除当前数据复制过程。如果使用多区域部署文档中的示例文件名,则文件应命名为
datareplication.yaml
。kubectl delete -f datareplication.yaml
- 将 YAML 文件中的区域名称更新为正确的
datacenter
值,例如dc-1
:apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: apigee-hybrid-example-org force: false source: region: "dc-1"
- 应用更新后的数据复制:
kubectl apply -f datareplication.yaml
- 使用以下命令检查重新构建状态,并验证您不会再看到之前报告的错误状态:
kubectl -n apigee get apigeeds \ -o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
- 如果问题仍然存在,请继续执行原因:网络连接问题。
原因:网络连接问题
数据复制错误也可能是 Cassandra 节点之间的连接问题导致的。
诊断
请按照以下步骤分析此场景:
- 列出所有 Cassandra pod:
# list cassandra pods kubectl -n=apigee get pods -l app=apigee-cassandra
- 执行以下
curl
命令,并通过 telnet 使用端口7001
从第一个数据中心的第一个 Cassandra pod (dc-1
) 连接到第二个数据中心的第一个 (dc-2
):kubectl -n apigee exec -it apigee-cassandra-default-0 bash -- curl -v telnet://DC_2_APIGEE_CASSANDRA_DEFAULT_0_POD_IP:7001
- 如果 telnet 成功,则会显示类似如下所示的输出:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * Connected to 10.0.4.10 (10.0.4.10) port 7001 (#0)
- 否则会显示类似如下所示的错误:
* Rebuilt URL to: telnet://10.0.4.10:7001/ * Trying 10.0.4.10... * TCP_NODELAY set * connect to 10.0.4.10 port 7001 failed: Connection refused * Failed to connect to 10.0.4.10 port 7001: Connection refused * Closing connection 0 curl: (7) Failed to connect to 10.0.4.10 port 7001: Connection refused
一个数据中心的 Cassandra pod 到另一个数据中心的 Cassandra pod 连接失败,表明存在防火墙限制或某种网络连接问题。
解决方法
- 如果此 Apigee Hybrid 部署是在 GKE 上,请检查是否设置了阻止一个数据中心到另一个数据中心的流量的防火墙规则,并参阅 VPC 防火墙规则概览来分析网络连接问题。
- 如果此 Apigee Hybrid 部署是在 GKE On-Prem 上,请与相关网络团队合作分析网络连接问题。
如果问题仍然存在,请转到必须收集诊断信息。
必须收集的诊断信息
如果按照上述说明操作后问题仍然存在,请收集以下诊断信息,然后与 Google Cloud Customer Care 联系:
- Google Cloud 项目 ID。
- Apigee Hybrid 组织。
- 来自来源和新区域的
overrides.yaml
文件,遮盖了任何敏感信息。 CassandraDataReplication
YAML 文件。- Cassandra
nodetool status
输出:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password status
- Cassandra
nodetool describecluster
输出:kubectl -n apigee exec -it apigee-cassandra-default-0 -- \ nodetool -u JMX_user -pw JMX_password describecluster