이 주제에서는 GKE의 Apigee Hybrid, 온프렘, Microsoft® Azure Kubernetes Service(AKS), Amazon Elastic Kubernetes Service(EKS), RedHat OpenShift에 배포된 Anthos GKE의 멀티 리전 배포를 설명합니다. 기본 요건과 절차에서 플랫폼을 선택합니다.
멀티 리전 배포를 위한 토폴로지는 다음과 같습니다.
- 활성-활성: 애플리케이션이 여러 지리적 위치에 배포되고 배포에 대한 지연 시간이 짧은 API 응답이 필요한 경우. 클라이언트와 가장 가까운 여러 지리적 위치에 하이브리드를 배포할 수 있는 옵션이 있습니다. 예를 들면 미국 서부 해안, 미국 동부 해안, 유럽, APAC이 있습니다.
- 활성-수동: 기본 리전과 장애 조치 또는 재해 복구 리전이 있는 경우.
다음 이미지와 같이 멀티 리전 하이브리드 배포의 리전은 Cassandra를 통해 통신합니다.
기본 요건
여러 지역에 하이브리드를 구성하기 전에 다음 기본 요건을 만족해야 합니다.
GKE
- 여러 네트워크(예: 다양한 클라우드 제공업체, 다른 VPC 네트워크, 클라우드 및 온프렘) 간에 멀티 리전 Apigee 배포를 설치할 때는 Cassandra가 노드 간 통신을 위해 사용할 수 있는 이러한 개별 네트워크 간에 내부 연결을 제공해야 합니다. 이는 VPN 또는 클라우드별 연결 솔루션으로 수행할 수 있습니다.
- 워크로드 아이덴티티를 사용하여 단일 클러스터에서 서비스 계정을 인증하는 경우 확장하려는 모든 클러스터에 대해 워크로드 아이덴티티를 사용하는 것이 좋습니다. Apigee Hybrid로 워크로드 아이덴티티 사용 설정을 참조하세요.
- 다양한 CIDR 블록으로 복수의 리전에 Kubernetes 클러스터 설정
- 각 클러스터에 cert-manager가 설치되어 있는지 확인
- 리전 간 통신 설정
- 모든 Cassandra 포드에서 자체 호스트 이름을 확인할 수 있는지 확인합니다. hostNetwork가 false로 설정된 경우 호스트 이름은 Cassandra 포드 이름입니다. hostNetwork가 true로 설정된 경우 호스트 이름은 Cassandra 포드를 실행하는 Kubernetes 노드 호스트 이름입니다.
- Cassandra 멀티 리전 요구사항:
- 포드 네트워크 네임스페이스에 방화벽, VPN, VPC 피어링, vNet 피어링을 비롯한 리전 간 연결이 있는지 확인합니다. 이는 대부분의 GKE 설치에 해당됩니다.
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면('섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
cassandra.hostNetwork: true
를 설정하여 KuberneteshostNetwork
기능을 사용 설정하세요.hostNetwork
의 필요성에 대한 자세한 내용은 아래의 섬(island) 모드 클러스터 및 hostNetwork를 참조하세요. - 멀티 리전 구성을 새 리전으로 확장하기 전 기존 클러스터에서
hostNetwork
를 사용 설정합니다. hostNetwork
가 사용 설정되었으면 워커 노드가 호스트 이름의 정방향 DNS 조회를 수행할 수 있는지 확인합니다. Apigee Cassandra는 정방향 DNS 조회를 사용하여 시작 중에 호스트 IP를 획득합니다.- 모든 리전의 Kubernetes 클러스터 간에 TCP 포트 7001을 열어 리전 및 데이터 센터 간의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호에 대한 자세한 내용은 포트 구성을 참조하세요.
자세한 내용은 Kubernetes 문서를 참조하세요.
GKE On-Prem
- 여러 네트워크(예: 다양한 클라우드 제공업체, 다른 VPC 네트워크, 클라우드 및 온프렘) 간에 멀티 리전 Apigee 배포를 설치할 때는 Cassandra가 노드 간 통신을 위해 사용할 수 있는 이러한 개별 네트워크 간에 내부 연결을 제공해야 합니다. 이는 VPN 또는 클라우드별 연결 솔루션으로 수행할 수 있습니다.
- 다양한 CIDR 블록으로 복수의 리전에 Kubernetes 클러스터 설정
- 각 클러스터에 cert-manager가 설치되어 있는지 확인
- 리전 간 통신 설정
- 모든 Cassandra 포드에서 자체 호스트 이름을 확인할 수 있는지 확인합니다. hostNetwork가 false로 설정된 경우 호스트 이름은 Cassandra 포드 이름입니다. hostNetwork가 true로 설정된 경우 호스트 이름은 Cassandra 포드를 실행하는 Kubernetes 노드 호스트 이름입니다.
- Cassandra 멀티 리전 요구사항:
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면(GKE On-Prem 설치의 기본 사례인 '섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
cassandra.hostNetwork: true
를 설정하여 KuberneteshostNetwork
기능을 사용 설정하세요.hostNetwork
의 필요성에 대한 자세한 내용은 아래의 섬(island) 모드 클러스터 및 hostNetwork를 참조하세요. - 멀티 리전 구성을 새 리전으로 확장하기 전 기존 클러스터에서
hostNetwork
를 사용 설정합니다. hostNetwork
가 사용 설정되었으면 워커 노드가 호스트 이름의 정방향 DNS 조회를 수행할 수 있는지 확인합니다. Apigee Cassandra는 정방향 DNS 조회를 사용하여 시작 중에 호스트 IP를 획득합니다.- 모든 리전의 Kubernetes 클러스터 간에 Cassandra 포트를 열어 리전과 데이터 센터 사이의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호는 포트 구성을 참조하세요.
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면(GKE On-Prem 설치의 기본 사례인 '섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
자세한 내용은 Kubernetes 문서를 참조하세요.
AKS
- 여러 네트워크(예: 다양한 클라우드 제공업체, 다른 VPC 네트워크, 클라우드 및 온프렘) 간에 멀티 리전 Apigee 배포를 설치할 때는 Cassandra가 노드 간 통신을 위해 사용할 수 있는 이러한 개별 네트워크 간에 내부 연결을 제공해야 합니다. 이는 VPN 또는 클라우드별 연결 솔루션으로 수행할 수 있습니다.
- 클러스터 설정 단계로 이동하기 전에 Google Cloud 및 조직 구성과 같은 기본 요건을 충족할 수 있도록 하이브리드 설치 가이드를 따르세요.
- 각 클러스터에 cert-manager가 설치되어 있는지 확인
- 모든 Cassandra 포드에서 자체 호스트 이름을 확인할 수 있는지 확인합니다. hostNetwork가 false로 설정된 경우 호스트 이름은 Cassandra 포드 이름입니다. hostNetwork가 true로 설정된 경우 호스트 이름은 Cassandra 포드를 실행하는 Kubernetes 노드 호스트 이름입니다.
- Cassandra 멀티 리전 요구사항:
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면(AKS 설치의 기본 사례인 '섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
cassandra.hostNetwork: true
를 설정하여 KuberneteshostNetwork
기능을 사용 설정하세요.hostNetwork
의 필요성에 대한 자세한 내용은 아래의 섬(island) 모드 클러스터 및 hostNetwork를 참조하세요. - 멀티 리전 구성을 새 리전으로 확장하기 전 기존 클러스터에서
hostNetwork
를 사용 설정합니다. hostNetwork
가 사용 설정되었으면 워커 노드가 호스트 이름의 정방향 DNS 조회를 수행할 수 있는지 확인합니다. Apigee Cassandra는 정방향 DNS 조회를 사용하여 시작 중에 호스트 IP를 획득합니다.- 모든 리전의 Kubernetes 클러스터 간에 Cassandra 포트를 열어 리전과 데이터 센터 사이의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호는 포트 구성을 참조하세요.
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면(AKS 설치의 기본 사례인 '섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
자세한 내용은 Kubernetes 문서를 참조하세요.
EKS
- 여러 네트워크(예: 다양한 클라우드 제공업체, 다른 VPC 네트워크, 클라우드 및 온프렘) 간에 멀티 리전 Apigee 배포를 설치할 때는 Cassandra가 노드 간 통신을 위해 사용할 수 있는 이러한 개별 네트워크 간에 내부 연결을 제공해야 합니다. 이는 VPN 또는 클라우드별 연결 솔루션으로 수행할 수 있습니다.
- 클러스터 설정 단계로 이동하기 전에 Google Cloud 및 조직 구성과 같은 기본 요건을 충족할 수 있도록 하이브리드 설치 가이드를 따르세요.
- 각 클러스터에 cert-manager가 설치되어 있는지 확인
- 모든 Cassandra 포드에서 자체 호스트 이름을 확인할 수 있는지 확인합니다. hostNetwork가 false로 설정된 경우 호스트 이름은 Cassandra 포드 이름입니다. hostNetwork가 true로 설정된 경우 호스트 이름은 Cassandra 포드를 실행하는 Kubernetes 노드 호스트 이름입니다.
- Cassandra 멀티 리전 요구사항:
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면('섬(Island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
cassandra.hostNetwork: true
를 설정하여 KuberneteshostNetwork
기능을 사용 설정하세요. Amazon EKS는 기본적으로 완전 통합형 네트워크 모델을 사용합니다.hostNetwork
의 필요성에 대한 자세한 내용은 아래의 섬(island) 모드 클러스터 및 hostNetwork를 참조하세요. - 멀티 리전 구성을 새 리전으로 확장하기 전 기존 클러스터에서
hostNetwork
를 사용 설정합니다. hostNetwork
가 사용 설정되었으면 워커 노드가 호스트 이름의 정방향 DNS 조회를 수행할 수 있는지 확인합니다. Apigee Cassandra는 정방향 DNS 조회를 사용하여 시작 중에 호스트 IP를 획득합니다.- 모든 리전의 Kubernetes 클러스터 간에 Cassandra 포트를 열어 리전과 데이터 센터 사이의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호는 포트 구성을 참조하세요.
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면('섬(Island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
자세한 내용은 Kubernetes 문서를 참조하세요.
OpenShift
- 여러 네트워크(예: 다양한 클라우드 제공업체, 다른 VPC 네트워크, 클라우드 및 온프렘) 간에 멀티 리전 Apigee 배포를 설치할 때는 Cassandra가 노드 간 통신을 위해 사용할 수 있는 이러한 개별 네트워크 간에 내부 연결을 제공해야 합니다. 이는 VPN 또는 클라우드별 연결 솔루션으로 수행할 수 있습니다.
- 클러스터 설정 단계로 이동하기 전에 Google Cloud 및 조직 구성과 같은 기본 요건을 충족할 수 있도록 하이브리드 설치 가이드를 따르세요.
- 각 클러스터에 cert-manager가 설치되어 있는지 확인
- 모든 Cassandra 포드에서 자체 호스트 이름을 확인할 수 있는지 확인합니다. hostNetwork가 false로 설정된 경우 호스트 이름은 Cassandra 포드 이름입니다. hostNetwork가 true로 설정된 경우 호스트 이름은 Cassandra 포드를 실행하는 Kubernetes 노드 호스트 이름입니다.
- Cassandra 멀티 리전 요구사항:
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면(OpenShift 설치의 기본 사례인 '섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
cassandra.hostNetwork: true
를 설정하여 KuberneteshostNetwork
기능을 사용 설정하세요.hostNetwork
의 필요성에 대한 자세한 내용은 아래의 섬(island) 모드 클러스터 및 hostNetwork를 참조하세요. - 멀티 리전 구성을 새 리전으로 확장하기 전 기존 클러스터에서
hostNetwork
를 사용 설정합니다. hostNetwork
가 사용 설정되었으면 워커 노드가 호스트 이름의 정방향 DNS 조회를 수행할 수 있는지 확인합니다. Apigee Cassandra는 정방향 DNS 조회를 사용하여 시작 중에 호스트 IP를 획득합니다.- 모든 리전의 Kubernetes 클러스터 간에 Cassandra 포트를 열어 리전과 데이터 센터 사이의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호는 포트 구성을 참조하세요.
- 포드 네트워크 네임스페이스에 클러스터 간 연결이 없으면(OpenShift 설치의 기본 사례인 '섬(island) 네트워크 모드'로 실행되는 클러스터) Apigee Hybrid 멀티 리전 설치에서 모든 리전에 대한 재정의 파일에
자세한 내용은 Kubernetes 문서를 참조하세요.
섬(Island) 모드 클러스터 및 hostNetwork
Kubernetes 클러스터에는 완전 통합(플랫) 모드와 섬(island) 모드라는 두 가지 기본 네트워크 모델이 있습니다. Apigee는 멀티 리전 Cassandra 연결이 단순화되므로 가급적 플랫 네트워크 모델을 사용하도록 권장합니다. Kubernetes 클러스터가 섬(island) 모드로 구성되면 포드 네트워크가 격리됩니다. 포드는 포드 IP 주소를 사용하여 다른 클러스터에서 실행 중인 포드와 직접 통신할 수 없습니다. 이러한 두 네트워크 모델의 자세한 차이점과 각 모델의 예시는 일반적인 네트워크 모델 구현을 참조하세요.
Apigee Hybrid가 둘 이상의 Kubernetes 클러스터에서 섬(Island) 모드 네트워킹 모델을 사용하여 실행되는 경우, cassandra.hostNetwork 속성을 통해 Cassandra의 hostNetwork
설정을 사용 설정해야 합니다. 기본적으로 Kubernetes 포드는 Kubernetes 워커 노드 IP를 사용할 수 없도록 개별 네트워크 네임스페이스로 격리됩니다. hostNetwork
가 true
로 설정되면 포드가 자체 네트워크 네임스페이스 내에서 격리되지 않고 포드가 예약된 Kubernetes 워커 노드의 IP 주소와 호스트 이름을 대신 사용합니다. 이렇게 하면 Cassandra가 기본적으로 Kubernetes 워커 노드 IP를 해당 IP로 사용하므로 Cassandra가 섬(island) 모드로 실행되는 여러 클러스터의 모든 Cassandra 포드 간에 풀 메시를 설정할 수 있습니다.
Cassandra 호스트 이름 확인
Cassandra 포드는 다른 Cassandra 포드를 호스트 이름으로 확인하지 않지만 Cassandra는 시작 시 자체 호스트 이름이 DNS로 확인 가능한지 확인합니다. hostNetwork
이 true로 설정된 경우 포드 호스트 이름은 Kubernetes 워커 노드 호스트 이름과 동일하므로 워커 노드 호스트 이름은 클러스터 DNS 서비스를 통해 IP 주소로 확인 가능해야 합니다. Kubernetes 워커 노드 호스트 이름을 확인할 수 없는 경우 Cassandra 포드가 완전히 시작되지 않습니다. 따라서 hostNetwork
을 true
로 설정하는 경우 클러스터의 포드에서 Kubernetes 워커 노드 호스트 이름을 확인할 수 있어야 합니다.
멀티 리전에 Apigee Hybrid 구성
이 섹션에서는 멀티 리전에 Apigee Hybrid를 구성하는 방법을 설명합니다.
GKE
멀티 리전 시드 호스트 구성
이 섹션에서는 기존 Cassandra 클러스터를 새 리전으로 확장하는 방법을 설명합니다. 이 설정을 사용하면 새 리전에서 클러스터를 부트스트랩하고 기존 데이터 센터에 조인할 수 있습니다. 이 구성이 없으면 멀티 리전 Kubernetes 클러스터가 서로를 알지 못합니다.
Apigee Hybrid를 관리하고 설치하는 데 사용하는 도구의 절차를 따릅니다.
Helm 차트
-
첫 번째로 생성된 리전에 대해 apigee 네임스페이스에서 포드를 가져옵니다.
kubectl get pods -o wide -n apigee
- 이 리전에서 Cassandra의 멀티 리전 시드 호스트 주소를 식별합니다(예:
10.0.0.11
). -
두 번째 리전의
overrides.yaml
파일을 준비하고 다음과 같이 시드 호스트 IP 주소를 추가합니다.cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
다음을 바꿉니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
10.0.0.11
). - DATACENTER_NAME을 데이터 센터 이름으로 바꿉니다(예:
dc-2
). - RACK_NAME을 랙 이름으로 바꿉니다(예:
ra-1
). - CLUSTER_NAME을 Cassandra 클러스터 이름으로 바꿉니다. 기본값은
apigeecluster
입니다. 다른 클러스터 이름을 사용하는 경우 cassandra.clusterName의 값을 지정해야 합니다. 값은 원하는 대로 선택할 수 있지만 모든 리전에서 동일해야 합니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
두 번째 리전 구성
새 리전을 설정하려면 다음 안내를 따르세요.
-
리전 2에
cert-manager
를 설치합니다.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다.
새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다.
따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
-
컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context NEW_CLUSTER_NAME
-
네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 네임스페이스를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
-
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
단계에 따라 새 리전에 Apigee Hybrid CRD를 설치합니다.
-
이제 Helm 차트를 사용하여 리전 1에서와 같이 다음 Helm 차트 명령어로 새 리전에 Apigee Hybrid를 설치합니다.
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 클러스터에서
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 데이터 복제가 완료되고 확인되면 시드 호스트를 업데이트합니다.
-
overrides-DATACENTER_NAME.yaml
에서multiRegionSeedHost: 10.0.0.11
가 삭제됨 -
변경사항을 다시 적용하여 Apigee Datastore CR을 업데이트합니다.
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
apigeectl
- kubectl 컨텍스트를 원래 클러스터로 설정한 후에 시드 이름을 검색합니다.
kubectl config use-context original-cluster-name
다음
kubectl
명령어를 실행하여 현재 리전에서 Cassandra의 시드 호스트 주소를 식별합니다.시드 호스트 주소를 사용하면 새 리전 인스턴스가 클러스터의 토폴로지를 학습하도록 첫 번째 시작할 때 원래의 클러스터를 찾을 수 있습니다. 시드 호스트 주소는 클러스터의 연락 지점으로 지정됩니다.
kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
- 이전 명령어에서 반환된 IP 중 멀티 리전 시드 호스트가 될 IP를 결정합니다.
- 데이터 센터 2의 런타임 영역 구성요소 관리에
cassandra.multiRegionSeedHost
및cassandra.datacenter
를 구성합니다. 여기서multiRegionSeedHost
는 이전 명령어로 반환한 IP 중 하나입니다.cassandra: multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name hostNetwork: false clusterName: cluster_name # must be the same for all regions
예를 들면 다음과 같습니다.
cassandra: multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2" rack: "ra-1" hostNetwork: false clusterName: my-apigee-cluster
- 새 데이터 센터/리전에서 하이브리드를 설치하기 전에 첫 번째 리전에서 설정한 것과 동일하게 TLS 인증서와 사용자 인증 정보를
overrides.yaml
에 설정합니다.
새 리전 설정
시드 호스트를 구성한 후에 새 리전을 설정할 수 있습니다.
새 리전을 설정 절차:
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다. 새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다. 따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
- 컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context original-cluster-name
- 현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- 컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context new-cluster-name
- 네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 '네임스페이스'를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
- 컨텍스트를 원래 네임스페이스로 설정합니다.
- 새 리전에 하이브리드를 설치합니다. 이전 섹션의 설명대로
overrides-DC_name.yaml
파일에 첫 번째 리전에서 구성된 동일한 TLS 인증서가 포함되어 있는지 확인합니다.다음 두 명령어를 실행하여 새 리전에 하이브리드를 설치합니다.
apigeectl init -f overrides/overrides-DC_name.yaml
apigeectl apply -f overrides/overrides-DC_name.yaml
- 다음 명령어를 실행하여 하이브리드 설치가 성공하는지 확인합니다.
apigeectl check-ready -f overrides_DC_name.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 다음 명령어를 사용하여 클러스터에서
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- 시드 호스트를 업데이트합니다.
overrides-DC_name.yaml
에서multiRegionSeedHost: 10.0.0.11
을 삭제하고 다시 적용합니다.apigeectl apply -f overrides/overrides-DC_name.yaml
Cassandra 클러스터 상태 확인
다음 명령어는 두 데이터 센터에서 클러스터 설정이 성공했는지 여부를 확인하는 데 유용합니다. 이 명령어는 두 리전의 nodetool 상태를 확인합니다.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
GKE On-Prem
멀티 리전 시드 호스트 구성
이 섹션에서는 기존 Cassandra 클러스터를 새 리전으로 확장하는 방법을 설명합니다. 이 설정을 사용하면 새 리전에서 클러스터를 부트스트랩하고 기존 데이터 센터에 조인할 수 있습니다. 이 구성이 없으면 멀티 리전 Kubernetes 클러스터가 서로를 알지 못합니다.
Apigee Hybrid를 관리하고 설치하는 데 사용하는 도구의 절차를 따릅니다.
Helm 차트
-
첫 번째로 생성된 리전에 대해 apigee 네임스페이스에서 포드를 가져옵니다.
kubectl get pods -o wide -n apigee
- 이 리전에서 Cassandra의 멀티 리전 시드 호스트 주소를 식별합니다(예:
10.0.0.11
). -
두 번째 리전의
overrides.yaml
파일을 준비하고 다음과 같이 시드 호스트 IP 주소를 추가합니다.cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
다음을 바꿉니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
10.0.0.11
). - DATACENTER_NAME을 데이터 센터 이름으로 바꿉니다(예:
dc-2
). - RACK_NAME을 랙 이름으로 바꿉니다(예:
ra-1
). - CLUSTER_NAME을 Cassandra 클러스터 이름으로 바꿉니다. 기본값은
apigeecluster
입니다. 다른 클러스터 이름을 사용하는 경우 cassandra.clusterName의 값을 지정해야 합니다. 값은 원하는 대로 선택할 수 있지만 모든 리전에서 동일해야 합니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
두 번째 리전 구성
새 리전을 설정하려면 다음 안내를 따르세요.
-
리전 2에
cert-manager
를 설치합니다.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다.
새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다.
따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
-
컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context NEW_CLUSTER_NAME
-
네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 네임스페이스를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
-
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
단계에 따라 새 리전에 Apigee Hybrid CRD를 설치합니다.
-
이제 Helm 차트를 사용하여 리전 1에서와 같이 다음 Helm 차트 명령어로 새 리전에 Apigee Hybrid를 설치합니다.
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 클러스터에서
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 데이터 복제가 완료되고 확인되면 시드 호스트를 업데이트합니다.
-
overrides-DATACENTER_NAME.yaml
에서multiRegionSeedHost: 10.0.0.11
가 삭제됨 -
변경사항을 다시 적용하여 Apigee Datastore CR을 업데이트합니다.
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
apigeectl
- 원래 클러스터의
overrides.yaml
파일에서cassandra:hostNetwork
가true
로 설정되었는지 확인합니다. 예를 들면 다음과 같습니다.cassandra: hostNetwork: true
hostNetwork: true
설정 시기에 대한 자세한 내용은 기본 요건을 참조하세요. cassandra:hostNetwork
가true
로 설정되지 않은 경우 다음을 수행합니다.-
cassandra.hostNetwork
를true
로 변경합니다. -
다음 명령어를 사용하여
overrides.yaml
구성 파일을 적용합니다.apigeectl apply -f overrides.yaml --datastore
- Cassandra 포드가 순차적 재시작을 완료할 때까지 기다립니다.
-
다음 명령어를 사용하여 Cassandra 클러스터가 정상인지 확인합니다.
kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
nodetool -u
-pw APIGEE_JMX_PASSWORD status 출력의 모든 Cassandra 노드가 UN(작동/정상) 상태인지 확인합니다.
nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
출력에 연결할 수 없는 노드가 없는지 확인합니다.
-
- kubectl 컨텍스트를 원래 클러스터로 설정한 후에 시드 이름을 검색합니다.
kubectl config use-context original-cluster-name
다음
kubectl
명령어를 실행하여 현재 리전에서 Cassandra의 시드 호스트 주소를 식별합니다.시드 호스트 주소를 사용하면 새 리전 인스턴스가 클러스터의 토폴로지를 학습하도록 첫 번째 시작할 때 원래의 클러스터를 찾을 수 있습니다. 시드 호스트 주소는 클러스터의 연락 지점으로 지정됩니다.
kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
- 이전 명령어에서 반환된 IP 중 멀티 리전 시드 호스트가 될 IP를 결정합니다.
-
데이터 센터 2의 재정의 파일에
cassandra.multiRegionSeedHost
를 구성합니다. 여기서multiRegionSeedHost
는 이전 명령어에서 반환한 IP 중 하나입니다.cassandra: hostNetwork: true multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name clusterName: cluster_name # must be the same for all regions
예를 들면 다음과 같습니다.
cassandra: hostNetwork: true multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2" rack: "ra-1" clusterName: my-apigee-cluster
- 새 데이터 센터/리전에서 하이브리드를 설치하기 전에 첫 번째 리전에서 설정한 것과 동일하게 TLS 인증서와 사용자 인증 정보를
overrides.yaml
에 설정합니다.
새 리전 설정
시드 호스트를 구성한 후에 새 리전을 설정할 수 있습니다.
새 리전을 설정 절차:
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다. 새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다. 따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
- 컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context original-cluster-name
- 현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- 컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context new-cluster-name
- 네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 '네임스페이스'를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
- 컨텍스트를 원래 네임스페이스로 설정합니다.
- 새 리전에 하이브리드를 설치합니다. 이전 섹션의 설명대로
overrides-DC_name.yaml
파일에 첫 번째 리전에서 구성된 동일한 TLS 인증서가 포함되어 있는지 확인합니다.다음 두 명령어를 실행하여 새 리전에 하이브리드를 설치합니다.
apigeectl init -f overrides/overrides-DC_name.yaml
apigeectl apply -f overrides/overrides-DC_name.yaml
- 다음 명령어를 실행하여 하이브리드 설치가 성공하는지 확인합니다.
apigeectl check-ready -f overrides_DC_name.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 다음 명령어를 사용하여 클러스터에서
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- 시드 호스트를 업데이트합니다.
overrides-DC_name.yaml
에서multiRegionSeedHost: 10.0.0.11
을 삭제하고 다시 적용합니다.apigeectl apply -f overrides/overrides-DC_name.yaml
Cassandra 클러스터 상태 확인
다음 명령어는 두 데이터 센터에서 클러스터 설정이 성공했는지 여부를 확인하는 데 유용합니다. 이 명령어는 두 리전의 nodetool 상태를 확인합니다.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
AKS
각 리전에 가상 네트워크 만들기
Azure 권장사항에 따라 여기에서 리전 간 통신을 설정합니다. VNet-to-VNet: Azure에서 여러 리전 간 가상 네트워크 연결.
다중 리전 클러스터 만들기
여러 가지 CIDR 블록을 사용하여 여러 리전에 Kubernetes 클러스터를 설정합니다. 1단계: 클러스터 만들기도 참조하세요. 앞에서 만든 위치 및 가상 네트워크 이름을 사용합니다.
모든 리전의 Kubernetes 클러스터 간에 Cassandra 포트를 열어 리전과 데이터 센터 사이의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호는 포트 구성을 참조하세요.
멀티 리전 시드 호스트 구성
이 섹션에서는 기존 Cassandra 클러스터를 새 리전으로 확장하는 방법을 설명합니다. 이 설정을 사용하면 새 리전에서 클러스터를 부트스트랩하고 기존 데이터 센터에 조인할 수 있습니다. 이 구성이 없으면 멀티 리전 Kubernetes 클러스터가 서로를 알지 못합니다.
Apigee Hybrid를 관리하고 설치하는 데 사용하는 도구의 절차를 따릅니다.
Helm 차트
-
첫 번째로 생성된 리전에 대해 apigee 네임스페이스에서 포드를 가져옵니다.
kubectl get pods -o wide -n apigee
- 이 리전에서 Cassandra의 멀티 리전 시드 호스트 주소를 식별합니다(예:
10.0.0.11
). -
두 번째 리전의
overrides.yaml
파일을 준비하고 다음과 같이 시드 호스트 IP 주소를 추가합니다.cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
다음을 바꿉니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
10.0.0.11
). - DATACENTER_NAME을 데이터 센터 이름으로 바꿉니다(예:
dc-2
). - RACK_NAME을 랙 이름으로 바꿉니다(예:
ra-1
). - CLUSTER_NAME을 Cassandra 클러스터 이름으로 바꿉니다. 기본값은
apigeecluster
입니다. 다른 클러스터 이름을 사용하는 경우 cassandra.clusterName의 값을 지정해야 합니다. 값은 원하는 대로 선택할 수 있지만 모든 리전에서 동일해야 합니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
두 번째 리전 구성
새 리전을 설정하려면 다음 안내를 따르세요.
-
리전 2에
cert-manager
를 설치합니다.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다.
새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다.
따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
-
컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context NEW_CLUSTER_NAME
-
네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 네임스페이스를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
-
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
단계에 따라 새 리전에 Apigee Hybrid CRD를 설치합니다.
-
이제 Helm 차트를 사용하여 리전 1에서와 같이 다음 Helm 차트 명령어로 새 리전에 Apigee Hybrid를 설치합니다.
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 클러스터에서
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 데이터 복제가 완료되고 확인되면 시드 호스트를 업데이트합니다.
-
overrides-DATACENTER_NAME.yaml
에서multiRegionSeedHost: 10.0.0.11
가 삭제됨 -
변경사항을 다시 적용하여 Apigee Datastore CR을 업데이트합니다.
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
apigeectl
- 원래 클러스터의
overrides.yaml
파일에서cassandra:hostNetwork
가true
로 설정되었는지 확인합니다. 예를 들면 다음과 같습니다.cassandra: hostNetwork: true
hostNetwork: true
설정 시기에 대한 자세한 내용은 기본 요건을 참조하세요. cassandra:hostNetwork
가true
로 설정되지 않은 경우 다음을 수행합니다.-
cassandra.hostNetwork
를true
로 변경합니다. -
다음 명령어를 사용하여
overrides.yaml
구성 파일을 적용합니다.apigeectl apply -f overrides.yaml --datastore
- Cassandra 포드가 순차적 재시작을 완료할 때까지 기다립니다.
-
다음 명령어를 사용하여 Cassandra 클러스터가 정상인지 확인합니다.
kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
nodetool -u
-pw APIGEE_JMX_PASSWORD status 출력의 모든 Cassandra 노드가 UN(작동/정상) 상태인지 확인합니다.
nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
출력에 연결할 수 없는 노드가 없는지 확인합니다.
-
- kubectl 컨텍스트를 원래 클러스터로 설정한 후에 시드 이름을 검색합니다.
kubectl config use-context original-cluster-name
다음
kubectl
명령어를 실행하여 현재 리전에서 Cassandra의 시드 호스트 주소를 식별합니다.시드 호스트 주소를 사용하면 새 리전 인스턴스가 클러스터의 토폴로지를 학습하도록 첫 번째 시작할 때 원래의 클러스터를 찾을 수 있습니다. 시드 호스트 주소는 클러스터의 연락 지점으로 지정됩니다.
kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
apigee-cassandra-default-0 1/1 Running 0 4d17h 120.38.1.9 aks-agentpool-21207753-vmss000000
-
이전 명령어에서 반환된 IP 중 멀티 리전 시드 호스트가 될 IP를 결정합니다. 단일 노드 cassandra 클러스터만 실행 중인 이 예시에서 시드 호스트는
120.38.1.9
입니다. - 데이터 센터 2에서 재정의 파일을 클러스터 이름이 포함된 새 파일로 복사합니다. 예:
overrides_your_cluster_name.yaml
. - 데이터 센터 2에서
overrides_your_cluster_name.yaml
에cassandra.multiRegionSeedHost
및cassandra.datacenter
를 구성합니다. 여기서multiRegionSeedHost
는 이전 명령어에서 반환한 IP 중 하나입니다. clusterName: cluster_name #이 모든 리전에서 동일해야 함cassandra: multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name hostNetwork: true
예를 들면 다음과 같습니다.
cassandra: multiRegionSeedHost: 120.38.1.9 datacenter: "centralus" rack: "ra-1" hostNetwork: true clusterName: my-apigee-cluster
- 새 데이터 센터/리전에서 하이브리드를 설치하기 전에 첫 번째 리전에서 설정한 것과 동일하게 TLS 인증서와 사용자 인증 정보를
overrides_your_cluster_name.yaml
에 설정합니다.
새 리전 설정
시드 호스트를 구성한 후에 새 리전을 설정할 수 있습니다.
새 리전을 설정 절차:
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다. 새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다. 따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
- 컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context original-cluster-name
- 현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- 컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context new-cluster-name
- 네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 '네임스페이스'를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
- 컨텍스트를 원래 네임스페이스로 설정합니다.
- 새 리전에 하이브리드를 설치합니다. 이전 섹션의 설명대로
overrides_your_cluster_name.yaml
파일에 첫 번째 리전에서 구성된 동일한 TLS 인증서가 포함되어 있는지 확인합니다.다음 두 명령어를 실행하여 새 리전에 하이브리드를 설치합니다.
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- 다음 명령어를 실행하여 하이브리드 설치가 성공하는지 확인합니다.
apigeectl check-ready -f overrides_your_cluster_name.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 다음 명령어를 사용하여 클러스터에서
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- 시드 호스트를 업데이트합니다.
overrides-DC_name.yaml
에서multiRegionSeedHost: 10.0.0.11
을 삭제하고 다시 적용합니다.apigeectl apply -f overrides/overrides-DC_name.yaml
Cassandra 클러스터 상태 확인
다음 명령어는 두 데이터 센터에서 클러스터 설정이 성공했는지 여부를 확인하는 데 유용합니다. 이 명령어는 두 리전의 nodetool 상태를 확인합니다.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
EKS
각 리전에 가상 네트워크 만들기
VPC 피어링이란 무엇인가요?에 설명된 대로 리전 간 통신을 설정하기 위한 AWS 권장사항을 따르세요. 다른 리전을 사용하는 AWS 용어는 리전 간 VPC 피어링입니다.
다중 리전 클러스터 만들기
여러 가지 CIDR 블록을 사용하여 여러 리전에 Kubernetes 클러스터를 설정합니다. 1단계: 클러스터 만들기도 참조하세요. 앞에서 만든 위치 및 가상 네트워크 이름을 사용합니다.
모든 리전의 Kubernetes 클러스터 간에 Cassandra 포트를 열어 리전과 데이터 센터 사이의 워커 노드가 통신하도록 사용 설정합니다. Cassandra 포트 번호는 포트 구성을 참조하세요.
멀티 리전 시드 호스트 구성
이 섹션에서는 기존 Cassandra 클러스터를 새 리전으로 확장하는 방법을 설명합니다. 이 설정을 사용하면 새 리전에서 클러스터를 부트스트랩하고 기존 데이터 센터에 조인할 수 있습니다. 이 구성이 없으면 멀티 리전 Kubernetes 클러스터가 서로를 알지 못합니다.
Apigee Hybrid를 관리하고 설치하는 데 사용하는 도구의 절차를 따릅니다.
Helm 차트
-
첫 번째로 생성된 리전에 대해 apigee 네임스페이스에서 포드를 가져옵니다.
kubectl get pods -o wide -n apigee
- 이 리전에서 Cassandra의 멀티 리전 시드 호스트 주소를 식별합니다(예:
10.0.0.11
). -
두 번째 리전의
overrides.yaml
파일을 준비하고 다음과 같이 시드 호스트 IP 주소를 추가합니다.cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
다음을 바꿉니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
10.0.0.11
). - DATACENTER_NAME을 데이터 센터 이름으로 바꿉니다(예:
dc-2
). - RACK_NAME을 랙 이름으로 바꿉니다(예:
ra-1
). - CLUSTER_NAME을 Cassandra 클러스터 이름으로 바꿉니다. 기본값은
apigeecluster
입니다. 다른 클러스터 이름을 사용하는 경우 cassandra.clusterName의 값을 지정해야 합니다. 값은 원하는 대로 선택할 수 있지만 모든 리전에서 동일해야 합니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
두 번째 리전 구성
새 리전을 설정하려면 다음 안내를 따르세요.
-
리전 2에
cert-manager
를 설치합니다.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다.
새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다.
따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
-
컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context NEW_CLUSTER_NAME
-
네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 네임스페이스를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
-
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
단계에 따라 새 리전에 Apigee Hybrid CRD를 설치합니다.
-
이제 Helm 차트를 사용하여 리전 1에서와 같이 다음 Helm 차트 명령어로 새 리전에 Apigee Hybrid를 설치합니다.
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 클러스터에서
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 데이터 복제가 완료되고 확인되면 시드 호스트를 업데이트합니다.
-
overrides-DATACENTER_NAME.yaml
에서multiRegionSeedHost: 10.0.0.11
가 삭제됨 -
변경사항을 다시 적용하여 Apigee Datastore CR을 업데이트합니다.
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
apigeectl
- 원래 클러스터의
overrides.yaml
파일에서cassandra:hostNetwork
가true
로 설정되었는지 확인합니다. 예를 들면 다음과 같습니다.cassandra: hostNetwork: true
hostNetwork: true
설정 시기에 대한 자세한 내용은 기본 요건을 참조하세요. cassandra:hostNetwork
가true
로 설정되지 않은 경우 다음을 수행합니다.-
cassandra.hostNetwork
를true
로 변경합니다. -
다음 명령어를 사용하여
overrides.yaml
구성 파일을 적용합니다.apigeectl apply -f overrides.yaml --datastore
- Cassandra 포드가 순차적 재시작을 완료할 때까지 기다립니다.
-
다음 명령어를 사용하여 Cassandra 클러스터가 정상인지 확인합니다.
kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
nodetool -u
-pw APIGEE_JMX_PASSWORD status 출력의 모든 Cassandra 노드가 UN(작동/정상) 상태인지 확인합니다.
nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
출력에 연결할 수 없는 노드가 없는지 확인합니다.
-
- kubectl 컨텍스트를 원래 클러스터로 설정한 후에 시드 이름을 검색합니다.
kubectl config use-context original-cluster-name
다음
kubectl
명령어를 실행하여 현재 리전에서 Cassandra의 시드 호스트 주소를 식별합니다.시드 호스트 주소를 사용하면 새 리전 인스턴스가 클러스터의 토폴로지를 학습하도록 첫 번째 시작할 때 원래의 클러스터를 찾을 수 있습니다. 시드 호스트 주소는 클러스터의 연락 지점으로 지정됩니다.
kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
apigee-cassandra-default-0 1/1 Running 0 4d17h 120.38.1.9 aks-agentpool-21207753-vmss000000
-
이전 명령어에서 반환된 IP 중 멀티 리전 시드 호스트가 될 IP를 결정합니다. 단일 노드 cassandra 클러스터만 실행 중인 이 예시에서 시드 호스트는
120.38.1.9
입니다. - 데이터 센터 2에서 재정의 파일을 클러스터 이름이 포함된 새 파일로 복사합니다. 예:
overrides_your_cluster_name.yaml
. - 데이터 센터 2에서
overrides_your_cluster_name.yaml
에cassandra.multiRegionSeedHost
및cassandra.datacenter
를 구성합니다. 여기서multiRegionSeedHost
는 이전 명령어에서 반환한 IP 중 하나입니다. clusterName: cluster_name #이 모든 리전에서 동일해야 함cassandra: multiRegionSeedHost: seed_host_IP datacenter: data_center_name rack: rack_name hostNetwork: true
예를 들면 다음과 같습니다.
cassandra: multiRegionSeedHost: 120.38.1.9 datacenter: "centralus" rack: "ra-1" hostNetwork: true clusterName: my-apigee-cluster
- 새 데이터 센터/리전에서 하이브리드를 설치하기 전에 첫 번째 리전에서 설정한 것과 동일하게 TLS 인증서와 사용자 인증 정보를
overrides_your_cluster_name.yaml
에 설정합니다.
새 리전 설정
시드 호스트를 구성한 후에 새 리전을 설정할 수 있습니다.
새 리전을 설정 절차:
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다. 새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다. 따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
- 컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context original-cluster-name
- 현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- 컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context new-cluster-name
- 네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 '네임스페이스'를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
- 컨텍스트를 원래 네임스페이스로 설정합니다.
- 새 리전에 하이브리드를 설치합니다. 이전 섹션의 설명대로
overrides_your_cluster_name.yaml
파일에 첫 번째 리전에서 구성된 동일한 TLS 인증서가 포함되어 있는지 확인합니다.다음 두 명령어를 실행하여 새 리전에 하이브리드를 설치합니다.
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- 다음 명령어를 실행하여 하이브리드 설치가 성공하는지 확인합니다.
apigeectl check-ready -f overrides_your_cluster_name.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 다음 명령어를 사용하여 클러스터에서
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- 시드 호스트를 업데이트합니다.
overrides-DC_name.yaml
에서multiRegionSeedHost: 10.0.0.11
을 삭제하고 다시 적용합니다.apigeectl apply -f overrides/overrides-DC_name.yaml
Cassandra 클러스터 상태 확인
다음 명령어는 두 데이터 센터에서 클러스터 설정이 성공했는지 여부를 확인하는 데 유용합니다. 이 명령어는 두 리전의 nodetool 상태를 확인합니다.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
OpenShift
멀티 리전 시드 호스트 구성
이 섹션에서는 기존 Cassandra 클러스터를 새 리전으로 확장하는 방법을 설명합니다. 이 설정을 사용하면 새 리전에서 클러스터를 부트스트랩하고 기존 데이터 센터에 조인할 수 있습니다. 이 구성이 없으면 멀티 리전 Kubernetes 클러스터가 서로를 알지 못합니다.
Apigee Hybrid를 관리하고 설치하는 데 사용하는 도구의 절차를 따릅니다.
Helm 차트
-
첫 번째로 생성된 리전에 대해 apigee 네임스페이스에서 포드를 가져옵니다.
kubectl get pods -o wide -n apigee
- 이 리전에서 Cassandra의 멀티 리전 시드 호스트 주소를 식별합니다(예:
10.0.0.11
). -
두 번째 리전의
overrides.yaml
파일을 준비하고 다음과 같이 시드 호스트 IP 주소를 추가합니다.cassandra: multiRegionSeedHost: "SEED_HOST_IP_ADDRESS" datacenter: "DATACENTER_NAME" rack: "RACK_NAME" hostNetwork: false clusterName: CLUSTER_NAME
다음을 바꿉니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
10.0.0.11
). - DATACENTER_NAME을 데이터 센터 이름으로 바꿉니다(예:
dc-2
). - RACK_NAME을 랙 이름으로 바꿉니다(예:
ra-1
). - CLUSTER_NAME을 Cassandra 클러스터 이름으로 바꿉니다. 기본값은
apigeecluster
입니다. 다른 클러스터 이름을 사용하는 경우 cassandra.clusterName의 값을 지정해야 합니다. 값은 원하는 대로 선택할 수 있지만 모든 리전에서 동일해야 합니다.
- SEED_HOST_IP_ADDRESS를 시드 호스트 IP 주소로 바꿉니다(예:
두 번째 리전 구성
새 리전을 설정하려면 다음 안내를 따르세요.
-
리전 2에
cert-manager
를 설치합니다.kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.1/cert-manager.yaml
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다.
새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다.
따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
-
컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context ORIGINAL_CLUSTER_NAME
-
현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace apigee -o yaml > apigee-namespace.yaml
-
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
-
컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context NEW_CLUSTER_NAME
-
네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 네임스페이스를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
-
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
-
-
단계에 따라 새 리전에 Apigee Hybrid CRD를 설치합니다.
-
이제 Helm 차트를 사용하여 리전 1에서와 같이 다음 Helm 차트 명령어로 새 리전에 Apigee Hybrid를 설치합니다.
helm upgrade operator apigee-operator \ --install \ --create-namespace \ --namespace apigee-system \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade datastore apigee-datastore \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade telemetry apigee-telemetry \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade redis apigee-redis \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ingress-manager apigee-ingress-manager \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
helm upgrade ORG_NAME apigee-org \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env mentioned on the overrideshelm upgrade ENV_NAME apigee-env/ \ --install \ --namespace apigee \ --atomic \ --set env=ENV_NAME \ -f overrides-DATACENTER_NAME.yaml
# repeat the below command for each env group mentioned on the overrideshelm upgrade apigee-virtualhost-ENV_GROUP_NAME apigee-virtualhost/ \ --install \ --namespace apigee \ --atomic \ --set envgroup=ENV_GROUP_NAME \ -f overrides-DATACENTER_NAME.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 클러스터에서
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 데이터 복제가 완료되고 확인되면 시드 호스트를 업데이트합니다.
-
overrides-DATACENTER_NAME.yaml
에서multiRegionSeedHost: 10.0.0.11
가 삭제됨 -
변경사항을 다시 적용하여 Apigee Datastore CR을 업데이트합니다.
helm upgrade datastore apigee-datastore/ \ --install \ --namespace apigee \ --atomic \ -f overrides-DATACENTER_NAME.yaml
-
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
apigeectl
- 원래 클러스터의
overrides.yaml
파일에서cassandra:hostNetwork
가true
로 설정되었는지 확인합니다. 예를 들면 다음과 같습니다.cassandra: hostNetwork: true
hostNetwork: true
설정 시기에 대한 자세한 내용은 기본 요건을 참조하세요. cassandra:hostNetwork
가true
로 설정되지 않은 경우 다음을 수행합니다.-
cassandra.hostNetwork
를true
로 변경합니다. -
다음 명령어를 사용하여
overrides.yaml
구성 파일을 적용합니다.apigeectl apply -f overrides.yaml --datastore
- Cassandra 포드가 순차적 재시작을 완료할 때까지 기다립니다.
-
다음 명령어를 사용하여 Cassandra 클러스터가 정상인지 확인합니다.
kubectl exec -it -n apigee apigee-cassandra-default-0 -- /bin/bash
nodetool -u
-pw APIGEE_JMX_PASSWORD status 출력의 모든 Cassandra 노드가 UN(작동/정상) 상태인지 확인합니다.
nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD describecluster
출력에 연결할 수 없는 노드가 없는지 확인합니다.
-
- kubectl 컨텍스트를 원래 클러스터로 설정한 후에 시드 이름을 검색합니다.
kubectl config use-context original-cluster-name
다음
kubectl
명령어를 실행하여 현재 리전에서 Cassandra의 시드 호스트 주소를 식별합니다.시드 호스트 주소를 사용하면 새 리전 인스턴스가 클러스터의 토폴로지를 학습하도록 첫 번째 시작할 때 원래의 클러스터를 찾을 수 있습니다. 시드 호스트 주소는 클러스터의 연락 지점으로 지정됩니다.
kubectl get pods -o wide -n apigee -l app=apigee-cassandra --field-selector status.phase=Running
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE apigee-cassandra-default-0 1/1 Running 0 5d 10.0.0.11 gke-k8s-dc-2-default-pool-a2206492-p55d apigee-cassandra-default-1 1/1 Running 0 5d 10.0.2.4 gke-k8s-dc-2-default-pool-e9daaab3-tjmz apigee-cassandra-default-2 1/1 Running 0 5d 10.0.3.5 gke-k8s-dc-2-default-pool-e589awq3-kjch
-
멀티 리전 시드 호스트로 사용할 소스 Cassandra 호스트의 IP 주소를 선택합니다. 이 예시에서는
apigee-cassandra-default-0
클러스터가 실행 중이고 시드 호스트는10.0.0.11
입니다. - 데이터 센터 2에서 재정의 파일을 클러스터 이름이 포함된 새 파일로 복사합니다. 예:
overrides_your_cluster_name.yaml
. - 데이터 센터 2에서
overrides_your_cluster_name.yaml
에cassandra.multiRegionSeedHost
및cassandra.datacenter
를 구성합니다. 여기서multiRegionSeedHost
는 이전 명령어에서 반환한 IP 중 하나입니다.cassandra: hostNetwork: true multiRegionSeedHost: seed_host_IP # Cassandra pod IP address from the source region. datacenter: data_center_name rack: rack_name clusterName: cluster_name # must be the same for all regions
예를 들면 다음과 같습니다.
cassandra: hostNetwork: true multiRegionSeedHost: 10.0.0.11 datacenter: "dc-2" rack: "ra-1" clusterName: my-apigee-cluster
- 새 데이터 센터/리전에서 하이브리드를 설치하기 전에 첫 번째 리전에서 설정한 것과 동일하게 TLS 인증서와 사용자 인증 정보를
overrides_your_cluster_name.yaml
에 설정합니다.
새 리전 설정
시드 호스트를 구성한 후에 새 리전을 설정할 수 있습니다.
새 리전을 설정 절차:
- 기존 클러스터에서 새 클러스터로 인증서를 복사합니다. 새 CA 루트는 Cassandra 및 mTLS용 기타 하이브리드 구성요소에서 사용됩니다. 따라서 클러스터 간에 일관된 인증서가 있어야 합니다.
- 컨텍스트를 원래 네임스페이스로 설정합니다.
kubectl config use-context original-cluster-name
- 현재 네임스페이스 구성을 파일로 내보냅니다.
kubectl get namespace namespace -o yaml > apigee-namespace.yaml
apigee-ca
보안 비밀을 파일로 내보냅니다.kubectl -n cert-manager get secret apigee-ca -o yaml > apigee-ca.yaml
- 컨텍스트를 새 리전의 클러스터 이름으로 설정합니다.
kubectl config use-context new-cluster-name
- 네임스페이스 구성을 새 클러스터로 가져옵니다. 새 리전에서 다른 네임스페이스를 사용하는 경우 파일의 '네임스페이스'를 업데이트해야 합니다.
kubectl apply -f apigee-namespace.yaml
보안 비밀을 새 클러스터로 가져옵니다.
kubectl -n cert-manager apply -f apigee-ca.yaml
- 컨텍스트를 원래 네임스페이스로 설정합니다.
- 새 리전에 하이브리드를 설치합니다. 이전 섹션의 설명대로
overrides_your_cluster_name.yaml
파일에 첫 번째 리전에서 구성된 동일한 TLS 인증서가 포함되어 있는지 확인합니다.다음 두 명령어를 실행하여 새 리전에 하이브리드를 설치합니다.
apigeectl init -f overrides_your_cluster_name.yaml
apigeectl apply -f overrides_your_cluster_name.yaml
- 다음 명령어를 실행하여 하이브리드 설치가 성공하는지 확인합니다.
apigeectl check-ready -f overrides_your_cluster_name.yaml
- 다음 명령어를 실행하여 Cassandra 클러스터 설정을 확인합니다. 기존 데이터 센터와 새로운 데이터 센터 모두 출력에 표시되어야 합니다.
kubectl exec apigee-cassandra-default-0 -n apigee \ -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음은 성공적인 설정을 보여주는 예시입니다.
Datacenter: dc-1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.87.93 68.07 GiB 256 ? fb51465c-167a-42f7-98c9-b6eba1de34de c UN 10.132.84.94 69.9 GiB 256 ? f621a5ac-e7ee-48a9-9a14-73d69477c642 b UN 10.132.84.105 76.95 GiB 256 ? 0561086f-e95b-4232-ba6c-ad519ff30336 d Datacenter: dc-2 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 10.132.0.8 71.61 GiB 256 ? 8894a98b-8406-45de-99e2-f404ab10b5d6 c UN 10.132.9.204 75.1 GiB 256 ? afa0ffa3-630b-4f1e-b46f-fc3df988092e a UN 10.132.3.133 68.08 GiB 256 ? 25ae39ab-b39e-4d4f-9cb7-de095ab873db b
- 새 데이터 센터의 모든 포드에 Cassandra를 설정합니다.
- 다음 명령어를 사용하여 클러스터에서
apigeeorg
를 가져옵니다.kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
예를 들면 다음과 같습니다.
Ex: kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name" "rg-hybrid-b7d3b9c"
- Cassandra 데이터 복제 커스텀 리소스(
YAML
) 파일을 만듭니다. 파일 이름에는 제한이 없습니다. 다음 예시에서 파일 이름은datareplication.yaml
입니다.파일에는 다음이 포함되어야 합니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: REGION_EXPANSION namespace: NAMESPACE spec: organizationRef: APIGEEORG_VALUE force: false source: region: SOURCE_REGION
각 항목의 의미는 다음과 같습니다.
- REGION_EXPANSION은 이 메타데이터에 지정할 이름입니다. 이름에는 제한이 없습니다.
- NAMESPACE는
overrides.yaml
에 제공된 네임스페이스와 동일합니다. 일반적으로 'apigee
'입니다. - APIGEEORG_VALUE는 이전 단계의
kubectl get apigeeorg -n apigee -o json | jq ".items[].metadata.name"
명령어에서 출력된 값입니다. 예를 들면rg-hybrid-b7d3b9c
입니다. - SOURCE_REGION은 소스 리전이며 소스 리전 overrides.yaml의 cassandra 섹션 아래에 있는 데이터 센터 값입니다.
예를 들면 다음과 같습니다.
apiVersion: apigee.cloud.google.com/v1alpha1 kind: CassandraDataReplication metadata: name: region-expansion namespace: apigee spec: organizationRef: rg-hybrid-b7d3b9c force: false source: region: "dc-1"
- 다음 명령어를 사용하여
CassandraDataReplication
을 적용합니다.kubectl apply -f datareplication.yaml
- 다음 명령어를 사용하여 다시 빌드 상태를 확인합니다.
kubectl -n apigee get apigeeds -o json | jq ".items[].status.cassandraDataReplication"
다음과 같은 결과가 표시됩니다.
{ "rebuildDetails": { "apigee-cassandra-default-0": { "state": "complete", "updated": 1623105760 }, "apigee-cassandra-default-1": { "state": "complete", "updated": 1623105765 }, "apigee-cassandra-default-2": { "state": "complete", "updated": 1623105770 } }, "state": "complete", "updated": 1623105770 }
- 다음 명령어를 사용하여 클러스터에서
- 로그에서 재빌드 프로세스를 확인합니다. 또한
nodetool status
명령어를 사용하여 데이터 크기를 확인합니다.kubectl logs apigee-cassandra-default-0 -f -n apigee
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status
다음 예시는 로그 항목의 예시를 보여줍니다.
INFO 01:42:24 rebuild from dc: dc-1, (All keyspaces), (All tokens) INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Executing streaming plan for Rebuild INFO 01:42:24 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.1.45 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.432KiB), sending 0 files(0.000KiB) INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.1.45 is complete INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.4.36 INFO 01:42:25 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Starting streaming to /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 1 files(0.693KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.4.36 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889, ID#0] Beginning stream session with /10.12.5.22 INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889 ID#0] Prepare completed. Receiving 3 files(0.720KiB), sending 0 files(0.000KiB) INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] Session with /10.12.5.22 is complete INFO 01:42:26 [Stream #3a04e810-580d-11e9-a5aa-67071bf82889] All sessions completed
- 시드 호스트를 업데이트합니다.
overrides-DC_name.yaml
에서multiRegionSeedHost: 10.0.0.11
을 삭제하고 다시 적용합니다.apigeectl apply -f overrides/overrides-DC_name.yaml
Cassandra 클러스터 상태 확인
다음 명령어는 두 데이터 센터에서 클러스터 설정이 성공했는지 여부를 확인하는 데 유용합니다. 이 명령어는 두 리전의 nodetool 상태를 확인합니다.
kubectl exec apigee-cassandra-default-0 -n apigee -- nodetool -u APIGEE_JMX_USER -pw APIGEE_JMX_PASSWORD status Datacenter: dc-1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.12.1.45 112.09 KiB 256 100.0% 3c98c816-3f4d-48f0-9717-03d0c998637f ra-1 UN 10.12.4.36 95.27 KiB 256 100.0% 0a36383d-1d9e-41e2-924c-7b62be12d6cc ra-1 UN 10.12.5.22 88.7 KiB 256 100.0% 3561f4fa-af3d-4ea4-93b2-79ac7e938201 ra-1 Datacenter: us-west1 ==================== Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns (effective) Host ID Rack UN 10.0.4.33 78.69 KiB 256 100.0% a200217d-260b-45cd-b83c-182b27ff4c99 ra-1 UN 10.0.0.21 78.68 KiB 256 100.0% 9f3364b9-a7a1-409c-9356-b7d1d312e52b ra-1 UN 10.0.1.26 15.46 KiB 256 100.0% 1666df0f-702e-4c5b-8b6e-086d0f2e47fa ra-1
문제 해결
Cassandra 데이터 복제 실패를 참조하세요.