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

1. 소개

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

그림 1. 4f9551fc32ed83f5.png

서비스 소비자는 Private Service Connect를 사용하여 서비스에 비공개 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 리전에 노드 1개, us-west2 리전에 노드 2개로 각각 생성됩니다.
  2. us-west1 및 us-west2의 MongoDB 클러스터에 액세스하는 소비자 VPC 및 연결된 VM
  3. us-west1 및 us-west2 리전에 각각 VPC와 서브넷 2개가 있으며 각 서브넷에 64개 이상의 무료 IP 주소가 있습니다(/26 이하의 서브넷 만들기).

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

그림 2. ab6c2791514c4481.png

학습할 내용

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

필요한 항목

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

4. 시작하기 전에

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

이 Codelab에서는 $variables를 사용하여 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 주소가 없으므로 이 Codelab에서는 소프트웨어 패키지 설치에 Cloud NAT를 사용합니다.

Cloud Shell에서 Cloud Router를 만듭니다.

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

  • MongoBD 콘솔에서 셸 스크립트를 복사하고 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로 이동하여 대기 중 → 수락됨으로 전환되는 소비자 엔드포인트를 표시하는 연결된 엔드포인트 탭을 선택합니다(아래 예 참고).

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

  • MongoBD 콘솔에서 셸 스크립트를 복사하고 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로 연결한 후 mongosh 애플리케이션을 설치하고 기본 (us-west1) 데이터베이스에 유효성을 검사합니다. 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. Failover active MongoDB region, us-west1(failover 활성 MongoDB 리전, us-west1)

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

데이터베이스 → 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 → STATIC INTERNAL IP ADDRESSES로 이동합니다.

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에 모두 성공적으로 연결되었습니다.

코스모퍼프는 Codelab이 멋지다고 생각합니다.

8c2a10eb841f7b01.jpeg

다음 단계

다음 Codelab을 확인하세요.

추가 리소스 및 동영상

참조 문서