現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge ドキュメントを表示する
症状
マルチリージョンの Apigee ハイブリッド セットアップのいずれかで、Cassandra Pod の起動に失敗します。overrides.yaml
ファイルを適用すると、Cassandra Pod が正常に起動しません。
エラー メッセージ
- Cassandra Pod のログに次のエラー メッセージが記録されています。
Exception (java.lang.RuntimeException) encountered during startup: A node with address 10.52.18.40 already exists, cancelling join. use cassandra.replace_addrees if you want to replace this node.
Cassandra Pod のステータスで、次の警告が表示される場合があります。
考えられる原因
通常、この問題は次のような状況で発生します。
- いずれかのリージョンで Apigee ランタイム クラスタが削除されています。
- GKE と GKE On-Prem でのマルチリージョン デプロイで説明しているように、Apigee ランタイム クラスタの再インストールは、
overrides.yaml
ファイルで Cassandra シードホスト構成が使用されているリージョンで試行されます。 - Apigee ランタイム クラスタを削除しても、Cassandra クラスタ内の参照は削除されません。したがって、削除されたクラスタ内の Cassandra Pod の古い参照は保持されます。そのため、セカンダリ リージョンに Apigee ランタイム クラスタを再インストールしようとすると、特定の IP アドレスがすでに存在するというエラーが Cassandra Pod に表示されます。これは、IP アドレスが以前に使用したサブネットから割り当てられる可能性があるためです。
原因 | 説明 |
---|---|
Cassandra クラスタ内の削除されたセカンダリ リージョン Pod への古い参照 | セカンダリ リージョンで Apigee ランタイム クラスタを削除しても、セカンダリ リージョンに存在する Cassandra Pod の IP アドレスへの参照は削除されません。 |
原因: Cassandra クラスタ内の削除されたセカンダリ リージョン Pod への古い参照
診断
- Cassandra Pod のログ
A node with address 10.52.18.40 already exists
のエラー メッセージは、IP アドレス10.52.18.40
を持つセカンダリ リージョン Cassandra Pod の 1 つに古い参照が存在することを示しています。プライマリ リージョンでnodetool status
コマンドを実行して、これを検証します。出力例:
上の例では、セカンダリ リージョンの Cassandra Pod に関連付けられた IP アドレス
10.52.18.40
が、引き続き出力に一覧表示されます。 - 出力にセカンダリ リージョンの Cassandra Pod への古い参照が含まれている場合は、セカンダリ リージョンは削除されたものの、セカンダリ リージョンの Cassandra Pod の IP アドレスが削除されていないことを示しています。
解決策
削除済みクラスタの Cassandra Pod の古い参照を削除するには、次の操作を行います。
- クライアント コンテナを作成するの手順に沿って、コンテナにログインし、Cassandra コマンドライン インターフェースに接続します。
- コンテナにログインして Cassandra
cqlsh
インターフェースに接続したら、次の SQL クエリを実行して現在のkeyspace
定義を一覧表示します。select * from system_schema.keyspaces;
現在のキースペースを示す出力例:
次の出力で、
Primary-DC1
はプライマリ リージョン、Secondary-DC2
はセカンダリ リージョンを指しています。bash-4.4# cqlsh 10.50.112.194 -u admin_user -p ADMIN.PASSWORD --ssl Connected to apigeecluster at 10.50.112.194:9042. [cqlsh 5.0.1 | Cassandra 3.11.6 | CQL spec 3.4.4 | Native protocol v4] Use HELP for help. admin_user@cqlsh> Select * from system_schema.keyspaces; keyspace_name | durable_writes | replication -------------------------------------+----------------+-------------------------------------------------------------------------------------------------- system_auth | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} kvm_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} kms_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_schema | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} system_distributed | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system | True | {'class': 'org.apache.cassandra.locator.LocalStrategy'} perses | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} cache_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} rtc_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} quota_tsg1_apigee_hybrid_prod_hybrid | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} system_traces | True | {'Primary-DC1': '3', 'Secondary-DC2': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'} (11 rows)
ご覧のとおり、Apigee ランタイム クラスタがセカンダリ リージョンで削除されているにもかかわらず、
keyspaces
はPrimary-DC1
とSecondary-DC2
の両方を参照しています。Secondary-DC2
への古い参照を、keyspace
の各定義から削除する必要があります。 keyspace
の定義で古い参照を削除するには、その前に次のコマンドを使用して、ASM(Istio)とcert-manager
を除く Apigee のインストール全体をSecondary-DC2
から削除します。詳細については、ハイブリッド ランタイムをアンインストールするをご覧ください。apigeectl delete -f YOUR_OVERRIDES_FILE.yaml --all
keyspace
定義を変更して、各keyspaces
からSecondary-DC2
への古い参照を削除します。ALTER KEYSPACE system_auth WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kvm_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE kms_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE system_distributed WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE perses WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE cache_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE rtc_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE quota_tsg1_apigee_hybrid_prod_hybrid WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'}; ALTER KEYSPACE system_traces WITH replication = {'Primary-DC1': '3', 'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy'};
- 次のコマンドを実行して、
Secondary-DC2
リージョンへの古い参照がすべてのkeyspaces
から削除されていることを確認します。select * from system_schema.keyspaces;
Primary-DC1
の Cassandra Pod にログインし、Secondary-DC2
のすべての Cassandra Pod の UUID への参照を削除します。UUID は、前述の診断で説明されているようにnodetool status
コマンドで取得できます。kubectl exec -it -n apigee apigee-cassandra-default-0 -- bash nodetool -u admin_user -pw ADMIN.PASSWORD removenode UUID_OF_CASSANDRA_POD_IN_SECONDARY_DC2
nodetool status
コマンドを再度実行して、Secondary-DC2
の Cassandra Pod が存在しないことを確認します。- GKE と GKE On-Prem でのマルチリージョン デプロイの手順に沿って、セカンダリ ランタイム(
Secondary-DC2
)に Apigee ランタイム クラスタをインストールします。
診断情報の収集が必要な場合
前述の手順を踏んでも問題が解決しない場合は、次の診断情報を収集して Google Cloud カスタマーケアにご連絡ください。
- Google Cloud プロジェクト ID
- Apigee ハイブリッド組織の名前
- 機密情報をマスキングしているプライマリ リージョンとセカンダリ リージョンの両方の
overrides.yaml
ファイル - プライマリ リージョンとセカンダリ リージョンの両方のすべての名前空間における Kubernetes Pod のステータス:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- プライマリ リージョンとセカンダリ リージョンの両方からの Kubernetes
cluster-info
ダンプ:# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*
- プライマリ リージョンからの以下の
nodetool
コマンドの出力。export u=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.user}' | base64 -d` export pw=`kubectl -n apigee get secrets apigee-datastore-default-creds -o jsonpath='{.data.jmx\.password}' | base64 -d` kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw info 2>&1 | tee /tmp/k_nodetool_info_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw describecluster 2>&1 | tee /tmp/k_nodetool_describecluster_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw failuredetector 2>&1 | tee /tmp/k_nodetool_failuredetector_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw status 2>&1 | tee /tmp/k_nodetool_status_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gossipinfo 2>&1 | tee /tmp/k_nodetool_gossipinfo_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw netstats 2>&1 | tee /tmp/k_nodetool_netstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw proxyhistograms 2>&1 | tee /tmp/k_nodetool_proxyhistograms_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw tpstats 2>&1 | tee /tmp/k_nodetool_tpstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw gcstats 2>&1 | tee /tmp/k_nodetool_gcstats_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw version 2>&1 | tee /tmp/k_nodetool_version_$(date +%Y.%m.%d_%H.%M.%S).txt kubectl -n apigee exec -it apigee-cassandra-default-0 -- nodetool -u $u -pw $pw ring 2>&1 | tee /tmp/k_nodetool_ring_$(date +%Y.%m.%d_%H.%M.%S).txt
リファレンス
- Apigee ハイブリッドの GKE と GKE On-Prem でのマルチリージョン デプロイ
- Kubernetes のドキュメント
- Cassandra の
nodetool status
コマンド