現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge ドキュメントを表示する。
症状
マルチリージョン展開中にデータを複製すると、CassandraDataReplication ステータスにエラー状態が表示され、データ レプリケーションが失敗する可能性があります。
エラー メッセージ
kubectl を使用して再ビルド ステータスを表示するには:
kubectl -n apigee get apigeeds \
-o jsonpath="{.items[].status.cassandraDataReplication}{'\n'}"
1 つ以上の 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 ハイブリッド |
| ネットワーク接続に関する問題 | 異なるデータセンターにある Cassandra Pod 間でネットワーク接続の問題が発生している可能性があります。 | Apigee ハイブリッド |
共通の診断手順
- データ レプリケーションのステータスを取得します。
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 のいずれか 1 つから実際の
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
- 次のコマンドを実行し、ポート
7001を使用して、最初のデータセンター(dc-1)にある最初の Cassandra Pod から、2 つ目のデータセンター(dc-2)にある最初の Cassandra Pod に telnet 接続します。k debug -it apigee-cassandra-default-0 -n apigee --image=nginx -- sh 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 ハイブリッドのデプロイが GKE にある場合、あるデータセンターから別のデータセンターへのトラフィックをブロックするファイアウォール ルールが設定されているかどうかを確認し、VPC ファイアウォール ルールの概要を参照してネットワーク接続の問題を分析します。
- この Apigee ハイブリッド デプロイメントが GKE On-Prem 上にある場合は、関連するネットワーキング チームと連携して、ネットワーク接続性の問題を分析します。
問題が解決しない場合は、診断情報の収集が必要な場合をご覧ください。
診断情報の収集が必要な場合
前述の手順を踏んでも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアにご連絡ください。
- Google Cloud プロジェクト ID。
- Apigee ハイブリッド組織。
- ソースと新しいリージョンの両方の
overrides.yamlファイル。機密情報をマスキングします。 CassandraDataReplicationYAML ファイル。- 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