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 하이브리드 |
네트워크 연결 문제 | 여러 데이터 센터에 있는 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 중 하나에서 실제
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에서 두 번째 데이터 센터(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 Customer Care에 문의하세요.
- 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