現在、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
- 次の
curl
コマンドを実行し、7001
ポートを使用して、最初のデータセンター(dc-1
)にある最初の Cassandra Pod から、2 つめのデータセンター(dc-2
)にある最初の Cassandra Pod に telnet 接続します。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 ハイブリッドのデプロイが GKE にある場合、あるデータセンターから別のデータセンターへのトラフィックをブロックするファイアウォール ルールが設定されているかどうかを確認し、VPC ファイアウォール ルールの概要を参照してネットワーク接続の問題を分析します。
- この Apigee ハイブリッド デプロイメントが GKE On-Prem 上にある場合は、関連するネットワーキング チームと連携して、ネットワーク接続性の問題を分析します。
問題が解決しない場合は、診断情報の収集が必要な場合をご覧ください。
診断情報の収集が必要な場合
前述の手順を踏んでも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアにご連絡ください。
- Google Cloud プロジェクト ID。
- Apigee ハイブリッド組織。
- ソースと新しいリージョンの両方の
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