Private Service Connect로 멀티 리전 MongoDB Atlas 액세스

1. 소개

Private Service Connect (PSC)는 서비스가 안전하고 비공개로 사용되는 방식을 간소화합니다. 이 모델을 사용하면 서비스 소비자가 조직 간에 서비스 프로듀서에 비공개로 연결할 수 있으므로 네트워크 아키텍처가 크게 간소화되며 가상 프라이빗 클라우드 피어링이 필요하지 않습니다. 그림 1은 VPC 피어링 및 PSC 속성을 보여줍니다.

그림 1. 4f9551fc32ed83f5.png

서비스 소비자는 서비스에 비공개 IP를 할당하는 방법을 유연하게 선택할 수 있으며, 프로듀서 VPC의 서브넷 범위를 관리하는 부담을 덜 수 있습니다. 이제 서비스 연결을 사용하여 VPC에서 선택한 가상 IP를 이러한 서비스에 간단히 할당할 수 있습니다.

이 Codelab에서는 MongoDB Atlas와 함께 PSC 전역 액세스를 사용하는 방법을 보여주는 포괄적인 Private Service Connect 아키텍처를 빌드합니다.

전역 액세스를 사용하면 클라이언트가 리전 경계를 넘어 Private Service Connect (PSC)에 연결할 수 있습니다. 이는 여러 리전에서 호스팅되는 관리형 서비스 간에 고가용성을 제공하거나, 클라이언트와 동일한 리전에 있지 않은 서비스에 대해 클라이언트 액세스를 허용하는 데 유용합니다.

2. 전역 액세스 사용 설정

전역 액세스는 소비자 측 전달 규칙에서 구성되는 선택적 기능입니다. 다음 명령어는 구성 방법을 보여줍니다.

gcloud beta compute forwarding-rules create psc-west \
    --region=us-west1 \
    --network=consumer-vpc \
    --address=psc-west-address \
    --target-service-attachment=projects/.../serviceAttachments/sa-west \
    --allow-psc-global-access
  • --allow-psc-global-access 플래그는 Private Service Connect 엔드포인트에서 전역 액세스를 사용 설정합니다.
  • 전역 액세스를 사용하면 클라이언트가 Private Service Connect 전달 규칙과 다른 리전에 있을 수 있지만 전달 규칙은 연결된 서비스 연결과 동일한 리전에 있어야 합니다.
  • 전역 액세스를 사용 설정하기 위해 프로듀서의 서비스 연결에 필요한 구성은 없습니다. 소비자 측 옵션일 뿐입니다.

기존 엔드포인트에 대해 언제든지 전역 액세스를 사용 설정 또는 사용 중지할 수도 있습니다. 기존 엔드포인트에서 전역 액세스를 사용 설정하면 활성 연결에 트래픽 중단이 발생하지 않습니다. 다음 명령어를 사용하여 기존 전달 규칙에서 전역 액세스를 사용 설정합니다.

gcloud beta compute forwarding-rules update psc-west --allow-psc-global-access

전역 액세스 사용 중지

--no-allow-psc-global-access 플래그를 사용하여 기존 전달 규칙에서 전역 액세스를 사용 중지할 수도 있습니다. 이 명령어를 실행하면 활성 상태의 리전 간 트래픽이 종료됩니다.

gcloud beta compute forwarding-rules update psc-west --no-allow-psc-global-access

3. 빌드할 항목

  1. 멀티 리전 MongoDB Atlas 클러스터 (그림 2에 설명된 토폴로지)는 us-west1에 노드 하나, us-west2에 노드 두 개로 각각 생성됩니다.
  2. us-west1 및 us-west2의 MongoDB 클러스터에 액세스하는 소비자 VPC 및 연결된 VM
  3. 각 서브넷에 사용 가능한 IP 주소가 64개 이상인 us-west1 및 us-west2 리전의 VPC와 서브넷 2개 (서브넷을 /26 이하로 생성)

MongoDB 클라이언트는 소비자 VPC의 vm1에 설치됩니다. us-west1에서 기본 노드가 실패하면 클라이언트는 us-west2의 새 기본 노드를 통해 읽기/쓰기를 할 수 있습니다.

그림 2. ab6c2791514c4481.png

학습할 내용

  • 두 리전에 배포된 VPC 및 서브넷을 만드는 방법
  • 다중 리전 MongoDB Atlas 클러스터를 배포하는 방법
  • 비공개 엔드포인트를 만드는 방법
  • MongoDB에 연결하는 방법
  • 멀티 리전 MongoDB 장애 조치를 수행하고 검증하는 방법

필요한 항목

  • Google Cloud 프로젝트
  • 리전당 /26 서브넷 제공
  • 클러스터 등급이 M10 이상인 MongoDB 클러스터를 만들기 위한 MongoDB Atlas에 대한 프로젝트 소유자 또는 조직 소유자 액세스 권한 (PoV 실행을 위한 무료 크레딧을 받으려면 GETATLAS를 사용하세요.)

4. 시작하기 전에

Codelab을 지원하도록 프로젝트 업데이트

이 Codelab에서는 Cloud Shell에서 gcloud 구성 구현을 지원하기 위해 $변수를 사용합니다.

Cloud Shell 내에서 다음을 실행합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

5. 소비자 설정

소비자 VPC 만들기

Cloud Shell 내에서 다음을 실행합니다.

gcloud compute networks create consumer-vpc --project=$projectname --subnet-mode=custom

소비자 서브넷 만들기

Cloud Shell 내에서 다음을 실행합니다.

gcloud compute networks subnets create vm-subnet --project=$projectname --range=10.10.10.0/29 --network=consumer-vpc --region=us-west1

Cloud Shell 내에서 us-west1의 소비자 엔드포인트를 만듭니다.

gcloud compute networks subnets create psc-endpoint-us-west1 --project=$projectname --range=192.168.10.0/26 --network=consumer-vpc --region=us-west1

Cloud Shell 내에서 us-west2의 소비자 엔드포인트를 만듭니다.

gcloud compute networks subnets create psc-endpoint-us-west2 --project=$projectname --range=172.16.10.0/26 --network=consumer-vpc --region=us-west2

Cloud Router 및 NAT 구성

VM 인스턴스에 외부 IP 주소가 없으므로 소프트웨어 패키지 설치를 위해 코드랩에서 Cloud NAT가 사용됩니다.

Cloud Shell 내에서 클라우드 라우터를 만듭니다.

gcloud compute routers create consumer-cr --network consumer-vpc --region us-west1

Cloud Shell 내에서 NAT 게이트웨이를 만듭니다.

gcloud compute routers nats create consumer-nat --router=consumer-cr --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-west1

인스턴스 vm1 구성

다음 섹션에서는 Compute Engine 인스턴스 vm1을 만듭니다.

Cloud Shell 내에서 인스턴스 vm1을 만듭니다.

gcloud compute instances create vm1 \
    --project=$projectname \
    --zone=us-west1-a \
    --machine-type=e2-micro \
    --network-interface=subnet=vm-subnet,no-address \
    --maintenance-policy=MIGRATE \
    --provisioning-model=STANDARD \
--create-disk=auto-delete=yes,boot=yes,device-name=vm1,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20230213,mode=rw,size=10,type=projects/$projectname/zones/us-west1-a/diskTypes/pd-balanced
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump -y
      sudo apt-get install dnsutils -y"

IAP가 VM 인스턴스에 연결하도록 하려면 다음과 같은 방화벽 규칙을 만드세요.

  • IAP를 사용하여 액세스할 수 있는 모든 VM 인스턴스에 적용됩니다.
  • IP 범위 35.235.240.0/20에서의 인그레스 트래픽을 허용합니다. 이 범위에는 IAP가 TCP 전달을 위해 사용하는 모든 IP 주소가 포함됩니다.

Cloud Shell 내에서 IAP 방화벽 규칙을 만듭니다.

gcloud compute firewall-rules create ssh-iap-consumer-vpc \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

6. 다중 리전 MongoDB Atlas 클러스터 만들기

  • PSC 설정을 시작하기 전에 Atlas 클러스터를 설정해야 합니다. 다음 두 가지 방법 중 하나로 MongoDB Atlas를 구독할 수 있습니다.
  • Google Cloud 계정이 있는 경우 Google Cloud Marketplace를 통해 문서를 참고하여 구독을 설정하세요.
  • Atlas 등록 페이지
  • Atlas를 구독한 후 아래와 같이 데이터베이스 빌드 버튼을 클릭합니다.

796f5bda844bf400.png

  • 새 클러스터 만들기 → 전용

56c340661d86962c.png

  • 클라우드 제공업체 및 리전 → Google Cloud
  • 멀티 클라우드, 멀티 리전 및 워크로드 격리 → 선택됨 (파란색 체크표시)

6c10293ffd9814ae.png

  • 선출 가능한 노드 → us-west1 (1개 노드), us-west2 (2개 노드)

e652bd944d785871.png

  • 클러스터 등급 → M10, 나머지 설정은 모두 기본값으로 둡니다.

ffa0195b96c2c5ff.png

  • 클러스터 이름 → psc-mongodb-uswest1-uswest2

3720fb8c15ba5cc2.png

  • 선택 → 클러스터 만들기

ec5e3e6983c02e27.png

  • 데이터베이스를 만드는 데 7~10분 정도 걸립니다.

d75778d5abf484aa.png

배포된 클러스터의 뷰

1f0ec6a401578650.png

7. us-west1의 비공개 엔드포인트 생성

  • Atlas 계정에 로그인하고 프로젝트로 이동합니다.

모든 데이터베이스에 대한 읽기/쓰기 액세스를 허용하는 새 사용자 만들기

보안 → 데이터베이스 액세스에서 새 데이터베이스 사용자 추가를 선택합니다. 다음은 사용자 이름과 비밀번호가 codelab으로 구성된 예시입니다. 기본 제공 역할 읽기 및 쓰기를 모든 데이터베이스에 선택해야 합니다.

f622ab14ddc96fc7.png

  • 보안 → 네트워크 액세스에서 IP 액세스 목록에 항목이 필요하지 않음

MongoDB Atlas에서 비공개 엔드포인트 준비

  • 네트워크 액세스 → 비공개 엔드포인트 → 전용 클러스터 → 비공개 엔드포인트 추가를 선택합니다. 88f5c1d9ae7e46d9.png

클라우드 제공업체

  • Google Cloud를 선택한 후 다음을 클릭합니다.

5503248bf4019a35.png

서비스 연결

  • 리전(us-west1)을 선택한 후 '다음'을 클릭합니다.

cb31aea7cad182f9.png

엔드포인트

  • Private Service Connect 엔드포인트를 만들려면 다음을 제공하세요.
  • Google Cloud 프로젝트 ID: 자세한 내용은 '안내 표시'를 선택하세요.
  • VPC 이름: consumer-vpc
  • 서브넷 이름: psc-endpoint-us-west1
  • Private Service Connect 엔드포인트 접두사: psc-endpoint-us-west1

21d76af5367832f4.png

엔드포인트 설정

다음 섹션에서는 setup_psc.sh라는 이름으로 로컬에 저장해야 하는 셸 스크립트가 생성됩니다. 저장한 후 셸 스크립트를 수정하여 PSC 전역 액세스를 허용합니다. 이 작업은 Google Cloud 프로젝트 Cloud Shell 내에서 수행할 수 있습니다.

  • 셸 스크립트 예시, 출력 값은 다를 수 있음

5c80cf7315a05c25.png

  • MongoDB 콘솔에서 셸 스크립트를 복사하고 Google Cloud Cloud Shell 터미널에 콘텐츠를 저장합니다. 스크립트를 setup_psc.sh로 저장해야 합니다.

업데이트 예시:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i
done

if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json

전역 액세스를 지원하도록 셸 스크립트 업데이트

nano 또는 vi 편집기를 사용하여 아래 문법으로 셸 스크립트를 식별하고 업데이트합니다.

gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access

업데이트 후 예:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west1-ip-$i --region=us-west1 --subnet=psc-endpoint-us-west1
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west1-ip-$i --region=us-west1 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west1-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud beta compute forwarding-rules create psc-endpoint-us-west1-$i --region=us-west1 --network=consumer-vpc --address=psc-endpoint-us-west1-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west1/serviceAttachments/sa-us-west1-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

if [ $(gcloud compute forwarding-rules list --regions=us-west1 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west1*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west1. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west1 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west1*)" > atlasEndpoints-psc-endpoint-us-west1.json

셸 스크립트 실행

setup_psc.sh 스크립트로 이동하여 실행합니다. 완료되면 atlasEndpoints-psc-endpoint-us-west1.json이라는 파일이 생성됩니다. json 파일에는 배포의 다음 단계에 필요한 IP 주소와 Private Service Connect 엔드포인트 이름 목록이 포함되어 있습니다.

Cloud Shell 내에서 다음을 실행합니다.

sh setup_psc.sh

스크립트가 완료되면 Cloud Shell 편집기를 사용하여 atlasEndpoints-psc-endpoint-us-west1.json을 로컬로 다운로드합니다.

2856802dd6497f51.png b0059dc8e1558891.png

JSON 파일 업로드

이전에 저장한 json 파일 atlasEndpoints-psc-endpoint-us-west1.json을 업로드합니다.

3a74e8d9952d793a.png

4938fd8256eb81b4.png

만들기를 선택합니다.

Private Service Connect 엔드포인트 유효성 검사

MongoDB UI에서 프로젝트로 이동한 후 보안 → 네트워크 액세스 → 비공개 엔드포인트로 이동합니다. 탭, 전용 클러스터를 선택하면 엔드포인트가 사용 가능 상태로 전환되는 데 10분이 걸립니다.

사용 가능한 상태

972aff09d180d9de.png

Google Cloud 콘솔에서 네트워크 서비스 → Private Service Connect로 이동하여 소비자 엔드포인트가 Pending → Accepted로 전환되는 연결된 엔드포인트 탭을 선택합니다(아래 예 참고).

5472dd938604b3.png

8. us-west2의 비공개 엔드포인트 생성

  • Atlas 계정에 로그인하고 프로젝트로 이동합니다.

MongoDB Atlas에서 비공개 엔드포인트 준비

  • 네트워크 액세스 → 비공개 엔드포인트 → 전용 클러스터 → 비공개 엔드포인트 추가를 선택합니다. 88f5c1d9ae7e46d9.png

클라우드 제공업체

  • Google Cloud를 선택한 후 다음을 클릭합니다.

5503248bf4019a35.png

서비스 연결

  • 리전(us-west2)을 선택한 후 '다음'을 클릭합니다.

fc0b7a8e4274be3b.png

엔드포인트

  • Private Service Connect 엔드포인트를 만들려면 다음을 제공하세요.
  • Google Cloud 프로젝트 ID: 자세한 내용은 '안내 표시'를 선택하세요.
  • VPC 이름: consumer-vpc
  • 서브넷 이름: psc-endpoint-us-west2
  • Private Service Connect 엔드포인트 접두사: psc-endpoint-us-west2

17b5a056587ede8a.png

엔드포인트 설정

다음 섹션에서는 setup_psc.sh라는 이름으로 로컬에 저장해야 하는 셸 스크립트가 생성됩니다. 저장한 후 셸 스크립트를 수정하여 PSC 전역 액세스를 허용합니다. 이 작업은 Google Cloud 프로젝트 Cloud Shell 내에서 수행할 수 있습니다.

  • 셸 스크립트 예시, 출력 값은 다를 수 있음

b021821e7d59f450.png

  • MongoDB 콘솔에서 셸 스크립트를 복사하고 Google Cloud Cloud Shell 터미널에 콘텐츠를 저장합니다. 스크립트를 setup_psc.sh로 저장해야 합니다.

업데이트 전 예시:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2vn1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i
done

if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json

전역 액세스를 지원하도록 셸 스크립트 업데이트

nano 또는 vi 편집기를 사용하여 아래 문법으로 셸 스크립트를 식별하고 업데이트합니다.

gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

업데이트 후 예:

#!/bin/bash
gcloud config set project yourprojectname

for i in {0..49}
do
  gcloud compute addresses create psc-endpoint-us-west2-ip-$i --region=us-west2 --subnet=psc-endpoint-us-west2
done

for i in {0..49}
do
  if [ $(gcloud compute addresses describe psc-endpoint-us-west2-ip-$i --region=us-west2 --format="value(status)") != "RESERVED" ]; then
    echo "psc-endpoint-us-west2-ip-$i is not RESERVED";
    exit 1;
  fi
done

for i in {0..49}
do
  gcloud beta compute forwarding-rules create psc-endpoint-us-west2-$i --region=us-west2 --network=consumer-vpc --address=psc-endpoint-us-west2-ip-$i --target-service-attachment=projects/p-npwsmzelxznmaejhj2v
n1q0q/regions/us-west2/serviceAttachments/sa-us-west2-61485ec2ae9d2e48568bf84f-$i --allow-psc-global-access
done

if [ $(gcloud compute forwarding-rules list --regions=us-west2 --format="csv[no-heading](name)" --filter="(name:psc-endpoint-us-west2*)" | wc -l) -gt 50 ]; then
  echo "Project has too many forwarding rules that match prefix psc-endpoint-us-west2. Either delete the competing resources or choose another endpoint prefix."
  exit 2;
fi

gcloud compute forwarding-rules list --regions=us-west2 --format="json(IPAddress,name)" --filter="name:(psc-endpoint-us-west2*)" > atlasEndpoints-psc-endpoint-us-west2.json

셸 스크립트 실행

setup_psc.sh 스크립트로 이동하여 실행합니다. 완료되면 atlasEndpoints-psc-endpoint-us-west2.json이라는 파일이 생성됩니다. json 파일에는 배포의 다음 단계에 필요한 IP 주소와 Private Service Connect 엔드포인트 이름 목록이 포함되어 있습니다.

Cloud Shell 내에서 다음을 실행합니다.

sh setup_psc.sh

스크립트가 완료되면 Cloud Shell 편집기를 사용하여 atlasEndpoints-psc-endpoint-us-west2.json을 로컬로 다운로드합니다.

2856802dd6497f51.png 6e3d944944718f13.png

JSON 파일 업로드

이전에 저장한 json 파일 atlasEndpoints-psc-endpoint-us-west2.json을 업로드합니다.

3a74e8d9952d793a.png

4938fd8256eb81b4.png

만들기를 선택합니다.

Private Service Connect 엔드포인트 유효성 검사

MongoDB UI에서 프로젝트로 이동한 후 보안 → 네트워크 액세스 → 비공개 엔드포인트로 이동합니다. 탭을 선택하면 전용 클러스터에서 엔드포인트가 10분 후에 사용 가능 상태로 전환됩니다.

사용 가능한 상태:

8801df4f6b39d20a.png

Google Cloud 콘솔에서 네트워크 서비스 → Private Service Connect로 이동하여 소비자 엔드포인트가 '대기 중'에서 '수락됨'으로 전환되는 연결된 엔드포인트 탭을 선택합니다(아래 예 참고). 소비자 엔드포인트에 총 100개의 엔드포인트가 배포되어 있으며 다음 단계로 이동하기 전에 수락된 상태로 전환해야 합니다.

6131abcdef5c1f49.png

9. 비공개 엔드포인트에서 MongoDB Atlas에 연결

비공개 서비스 연결이 수락되면 MongoDB 클러스터를 업데이트하는 데 추가 시간 (10~15분)이 필요합니다. MongoDB UI에서 회색 윤곽선은 클러스터 업데이트를 나타내므로 비공개 엔드포인트에 연결할 수 없습니다.

c1524d2c0c5765d1.png

배포를 식별하고 연결을 선택합니다 (회색 상자가 더 이상 표시되지 않음).

3eea96af20bfad20.png

연결 유형 → 비공개 엔드포인트를 선택하고 연결 방법 선택을 선택합니다.

16a9090e495640c7.png

MongoDB Shell로 연결 선택

35e422af16cb5ce0.png

'MongoDB Shell이 설치되어 있지 않습니다', 'Ubuntu 20.4'를 선택하고 1단계와 3단계의 내용을 메모장에 복사합니다.

51be47403c00bab4.png

10. mongosh 애플리케이션 설치

설치하기 전에 1단계와 3단계에서 복사한 값을 기반으로 명령 문자열을 만들어야 합니다. 그런 다음 Cloud Shell을 사용하여 vm1에 SSH로 연결한 후 기본 (us-west1) 데이터베이스에 mongosh 애플리케이션을 설치하고 검증합니다. consumer-vpc에서 vm1을 만들 때 Ubuntu 20.4 이미지가 설치되었습니다.

연결 방법 선택: 1단계, 다운로드 URL 복사

5da980ff86265dd8.png

명령어 문자열의 예입니다. 맞춤 값으로 바꾸세요.

https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb

연결 방법 선택, 3단계

698286bdf3dee3c7.png

명령어 문자열의 예입니다. 맞춤 값으로 바꾸세요.

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

vm1에 로그인

Cloud Shell 내에서 다음을 실행합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

Cloud Shell에서 IAP를 사용하여 vm1에 로그인하고, 시간 초과가 발생하면 다시 시도합니다.

gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap

OS에서 설치 실행

Cloud Shell OS 로그인에서 설치를 실행합니다. 자세한 내용은 여기를 참고하세요. 아래 구문을 커스텀 문자열로 업데이트합니다.

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

작업은

OK

.

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

sudo apt-get update -y

wget https://downloads.mongodb.com/compass/mongodb-mongosh_1.7.1_amd64.deb

sudo dpkg -i mongodb-mongosh_1.7.1_amd64.deb

MongoDB 배포에 연결

Cloud Shell OS 로그인 내에서 다음을 실행합니다. 구성된 사용자 이름과 비밀번호는 codelab입니다.

mongosh

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

예를 들어 다음과 같습니다.

d5d0324a273b4d5e.png

데이터베이스에 대해 명령어 실행

Cloud Shell OS 로그인 내에서 다음을 실행합니다.

show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne({"Name":"cosmo"})

11. 활성 MongoDB 리전(us-west1) 장애 조치

장애 조치를 수행하기 전에 us-west1이 기본이고 us-west2에 보조 노드가 두 개 있는지 확인해 보겠습니다.

데이터베이스 → psc-mongodb-uswest1-uswest2 → 개요로 이동합니다.

64ca0395807bb3ac.png

다음 섹션에서는 us-west1에 있는 vm1에 로그인하고, 기본 MongoDB 클러스터 리전 us-west1을 장애 조치하고, us-west2의 MongoDB 클러스터에서 데이터베이스에 계속 연결할 수 있는지 확인합니다.

Atlas UI에서 기본 장애 조치와 리전 장애 조치를 모두 테스트할 수 있습니다.

  • Atlas UI에 로그인합니다.
  • 클러스터 이름(psc-mongodb-uswest1-uswest2) 옆에 있는 [...] 를 클릭하고 'Test Outage'(오프라인 테스트)를 클릭합니다.

3a50da4381817975.png

  • 지역별 서비스 중단 → 지역 선택

b8dfff376477bcbb.png

  • 기본 리전인 us-west1을 선택하고 '리전 중단 시뮬레이션'을 선택합니다.

76494a750a040bc5.png

클러스터를 선택하면 3~4분 후에 서비스 중단 시뮬레이션이 표시됩니다.

창 닫기

3a9f0359bd4e288f.png

bac1b2db0d754bbf.png

us-west1이 다운되고 us-west2가 이제 기본으로 인계되었는지 확인합니다.

데이터베이스 → psc-mongodb-uswest1-uswest2 → 개요로 이동합니다.

86fd7d5230715645.png

새 기본 영역인 us-west2에서 클러스터로의 연결 유효성 검사

us-west1에 있는 vm1에 로그인하고 us-west2의 mongodb에 액세스하여 Private Service Connect 전역 액세스를 검증합니다.

Cloud Shell 세션이 종료된 경우 다음을 수행하세요.

Cloud Shell 내에서 다음을 실행합니다.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectname=YOUR-PROJECT-NAME
echo $projectname

Cloud Shell에서 IAP를 사용하여 vm1에 로그인하고, 시간 초과가 발생하면 다시 시도합니다.

gcloud compute ssh vm1 --project=$projectname --zone=us-west1-a --tunnel-through-iap

MongoDB 배포에 연결

Cloud Shell OS 로그인 내에서 다음을 실행합니다.

mongosh

mongosh "mongodb+srv://psc-mongodb-uswest1-uswest2-pl-0.2wqno.mongodb.net/psc-mongodb-uswest1-uswest2" --apiVersion 1 --username codelab

예를 들어 다음과 같습니다.

d262800a557b41a3.png

데이터베이스에 대해 명령어 실행

Cloud Shell OS 로그인 내에서 다음을 실행합니다.

show dbs
use Company
db.Employee.insertOne({"Name":"cosmo","dept":"devops"})
db.Employee.findOne()

exit

20c2571d84c0661d.png

성공: PSC 전역 액세스를 통해 리전 간에 원활한 소비자 엔드포인트 연결이 가능하여 고가용성을 지원하거나 리전 서비스 중단이 발생했음을 확인했습니다. 이 Codelab에서는 us-west1에 있는 기본 노드에서 MongoDB 리전 장애 조치가 발생했으므로 보조 리전 us-west2가 기본을 인계받았습니다. 클러스터로 인해 리전 서비스 중단이 발생했지만 us-west1에 있는 소비자 vm1이 us-west2의 새 기본 클러스터에 도달했습니다.

12. 삭제

Cloud 콘솔에서 소비자 엔드포인트를 삭제합니다.

네트워크 서비스 → Private Service Connect → 연결된 엔드포인트로 이동합니다.

psc-endpoint 필터를 사용하여 실험실 외 소비자 엔드포인트가 삭제될 가능성을 없앱니다. 모든 엔드포인트 선택 → 삭제

192548e374b444a1.png

소비자 엔드포인트와 연결된 고정 내부 IP 주소 삭제

VPC 네트워크 → consumer-vpc → 고정 내부 IP 주소로 이동합니다.

psc-endpoint 필터를 사용하여 실험실 외 소비자 엔드포인트가 삭제될 가능성을 없애고 페이지당 행 수를 100으로 늘립니다. 모든 엔드포인트 선택 → 출시

4cebf164c4fecd83.png

Cloud Shell에서 Codelab 구성요소를 삭제합니다.

gcloud compute instances delete vm1 --zone=us-west1-a --quiet 

gcloud compute networks subnets delete psc-endpoint-us-west1 vm-subnet --region=us-west1 --quiet

gcloud compute networks subnets delete psc-endpoint-us-west2 --region=us-west2 --quiet

gcloud compute firewall-rules delete ssh-iap-consumer --quiet 

gcloud compute routers delete consumer-cr --region=us-west1 --quiet 

gcloud compute networks delete consumer-vpc --quiet

Atlas UI에서 클러스터 psc-mongodb-uswest1-uswest2를 식별하고 시뮬레이션을 종료합니다.

f82e28ac984d9e20.png

정전 시뮬레이션 종료 —> 종료를 선택합니다.

38feaf055abdceea.png

이제 클러스터가 us-west1을 기본으로 되돌리고 있습니다. 이 프로세스는 3~4분 정도 걸립니다. 완료되면 클러스터를 종료하고 상태 변경을 나타내는 회색 윤곽선을 확인합니다.

f249a61bcc966d41.png

9427a9349daa1fea.png

클러스터 이름 삽입 → 종료

9ef6d3a6387c5b4b.png

us-west1 및 us-west2와 연결된 비공개 엔드포인트 삭제

Atlas UI에서 보안 → 네트워크 액세스 → 비공개 엔드포인트로 이동하여 종료를 선택합니다.

56415ea954b2fec9.png

13. 축하합니다

축하합니다. 리전 간 MongoDB에 대한 전역 액세스가 지원되는 Private Service Connect 엔드포인트를 구성하고 검증했습니다. 소비자 VPC, 멀티 리전 MongoDB, 소비자 엔드포인트를 성공적으로 만들었습니다. 리전 장애 조치 시 us-west1에 있는 VM이 us-west1과 us-west2의 MongoDB에 모두 연결되었습니다.

Cosmopup은 Codelab이 멋지다고 생각합니다.

8c2a10eb841f7b01.jpeg

다음 단계

다음 Codelab을 확인하세요.

추가 자료 및 동영상

참조 문서