Skip to main content

Terraform을 이용한 MongoDB Replicaset 프로비저닝

카카오클라우드에서 제공하는 인프라 구성 요소를 사용하여 3개의 MongoDB 인스턴스로 구성된 Replicaset을 구축합니다.

안내

사전 준비

구성 요소

예제에서 확인할 수 있는 자동화된 구성요소와 사용자가 예제를 사용하기 위해 준비해야 하는 구성요소는 다음과 같습니다.

자동화된 구성요소
항목설명
자동화된 구성요소  - 가상 머신(Virtual Machine)
- Security Group(Security Group)
- 블록 스토리지(Block Storage)
사전 준비가 필요한 구성요소

카카오클라우드 콘솔을 통해 해당 요소를 준비합니다.

항목설명
Key PairVirtual Machine > Key pair 탭 > 키 페어 목록에서 퍼블릭 키 확인
Public SubnetVPC > Subnet 탭 > Subnet 목록에서 확인
액세스 키  사용자 설정 > 액세스 키 탭에서 확인

사용 리소스

시나리오 상에서 사용할 리소스의 정보는 다음과 같습니다.

가상 머신
인스턴스 이름인스턴스 유형볼륨 크기(GB)공인 IP이미지
handson-node-1   m2a.large   30      N     Ubuntu 20.04
handson-node-2m2a.large30NUbuntu 20.04
handson-node-3m2a.large30NUbuntu 20.04
볼륨
볼륨 이름연결할 인스턴스크기(GB)
mongo-data-volume-1  handson-node-1   500
mongo-data-volume-2handson-node-2500
mongo-data-volume-3handson-node-3500
Security Group
Security Group명연결할 인스턴스설명
sg-mongodb    handson-node-1  
handson-node-2
handson-node-3
MongoDB 인스턴스에 적용할 Security Group
Security Group별 인바운드 정책
Security Group 명CIDR프로토콜포트역할
sg-mongodb    ${SUBNET_CIDR}ICMP  ALLping-mongo
sg-mongodb${BASTION_PRIVATE_IP}/32TCP22ssh-mongo
sg-mongodb${SUBNET_CIDR}TCP27017conn-mongo

Step 1. Terraform 설치하기

실습을 진행하기 위해서는 사용자 로컬 환경에 Terraform 설치가 필요합니다.

  1. Homebrew 패키지 매니저를 이용하거나, Terraform 공식 가이드에서 다운로드하여 설치합니다.

    Terraform 설치
    brew install terraform
  2. 설치가 정상적으로 되었는지 아래 명령어를 통해 확인합니다.

    Terraform 설치 확인
    terraform -version
    # Terraform v1.3.3 ## ... -> 정상 설치 시 버전 정보를 확인할 수 있습니다.
안내

Terraform 설치와 관련한 자세한 내용은 Terraform 공식 가이드 문서를 참고하시기 바랍니다.

Step 2. 예제 설치 및 작성하기

  1. 사용자 로컬 터미널에서 예제로 제공하는 프로젝트를 다운로드합니다.

    프로젝트 다운로드
    git clone -b terraform-mongodb https://github.com/kakaoenterprise/kakaocloud-tutorials.git
    • 예제 프로젝트의 참고 및 수정이 필요한 경우 아래 예제 프로젝트 폴더 구성을 확인합니다.
    예제 프로젝트 폴더 구성 확인
     kc-handson-config
    ㄴ data.tf # 클라우드 제공자에게 가져올 정보 및 사전에 필요한 클라우드 리소스(subnet, keypair ...) 정보를 정의
    ㄴ instance-mongodb.tf # MongoDB 인스턴스를 생성하는데 필요한 리소스(compute, network, volume, security-group) 정의
    ㄴ README.md # README 파일
    ㄴ require.tf # 클라우드 프로바이더 및 테라폼 환경 정보 정의
    ㄴ scripts.tf # 애플리케이션 프로비저닝에 사용될 템플릿, 파일 등의 스크립트 정의
    ㄴ sg-rules.tf # 생성할 Security Group에 대한 정책을 정의
    ㄴ variables.tf # 프로비저닝에 사용할 변수 정보 정의 (사용자 환경에 맞게 수정 필요)
    ㄴ files
    ㄴ attach-volume.sh. # 가상 머신에 연결한 볼륨을 마운트하는 스크립트
    ㄴ templates
    ㄴ hosts # 레플리카셋을 구성하는 호스트에 대한 도메인 이름 정의
    ㄴ init-replicaset.sh # 생성된 MongoDB 인스턴스를 레플리카셋으로 구성하는 스크립트 (하나의 노드에서 실행)
    ㄴ install-mongodb.sh # 가상머신에 MongoDB를 설치하고 실행하는 스크립트
    ㄴ mongod.conf # MongoDB에 적용할 설정값 정의 (수정 시 주의)
  2. 예제 프로젝트가 설치된 경로로 이동합니다.

    프로젝트 설치 경로로 이동
     cd ./kakaocloud-tutorials
  3. 카카오클라우드에 자원 생성을 요청하기 위해서는 자원을 생성할 리전 및 인증키 등의 추가적인 정보가 필요합니다. 아래 예제를 참고하여 terraform.tfvars 파일에 값을 추가합니다. {Subnet CIDR}은 IP CIDR 블록이며, 카카오클라우드 콘솔 > VPC > Subnet에서 사용할 수 있는 Subnet을 확인할 수 있습니다.

    cat << EOF > ./terraform.tfvars

    kc_region = "kr-central-2"
    kc_availability_zone = "${AVAILABILITY_ZONE}"
    kc_auth_url = "https://iam.kakaocloud.com/identity/v3"
    kc_application_credential_id = "${ACCESS_KEY}"
    kc_application_credential_secret = "${SECRET_ACCESS_KEY}"

    # 아래 vm_network_cidr은 인스턴스를 생성할 Subnet의 CIDR 값을 입력합니다.

    public_network_cidr = "${SUBNET_CIDR}"
    replicaset_name = "${REPLICASET_NAME}"
    default_image = "${INSTANCE_IMAGE}"
    mongodb_flavor = "${INSTANCE_TYPE}"
    sshkey = "${INSTANCE_KEYPAIR}"

    EOF

    환경변수설명
    AVAILABILITY_ZONE🖌가용영역 이름 #예시: kr-central-2-a
    ACCESS_KEY🖌사용자 액세스 키
    SECRET_ACCESS_KEY🖌사용자 보안 키
    SUBNET_CIDR🖌클라우드 자원을 생성할 Subnet의 CIDR을 입력 #예시: 10.0.0.0/20
    REPLICASET_NAME🖌MongoDB Replicaset 이름을 입력 #예시: hands-on-mongodb-replicaset
    INSTANCE_IMAGE🖌 사용할 인스턴스 이미지 #예시: Ubuntu 20.04 - 5.4.0-173
    INSTANCE_TYPE🖌사용할 인스턴스 타입 #예시: m2a.large
    INSTANCE_KEYPAIR🖌 인스턴스에 사용할 키페어 이름 #예시: kc-keypair

Step 3. 클라우드 리소스 생성하기

예제 프로젝트를 설치한 후, 테라폼(Terraform)을 이용하여 프로젝트에서 정의한 리소스를 생성하고 결과를 확인합니다.

  1. 현재 작업 디렉터리를 초기 설정합니다.

    디렉터리 초기 설정
    terraform init
  2. 실행 계획을 만듭니다. 인프라에 적용할 변경 사항을 미리 확인할 수 있습니다.

    실행 계획 생성
    terraform plan
  3. 실행 계획을 클라우드에 적용합니다.

    클라우드에 적용
    terraform apply

Step 4. 결과 확인하기

클라우드 리소스 생성 후 카카오클라우드 콘솔에서 생성한 리소스 정보를 확인합니다.

  1. Virtual Machine > Instance 탭에서 생성된 인스턴스를 확인합니다.
  1. Virtual Machine > Volume 탭에서 생성된 볼륨을 확인합니다.
  1. MongoDB 인스턴스에 SSH 접속을 하기 위해 Bastion 인스턴스를 생성합니다.

  2. Bastion 호스트 생성 후, Bastion 호스트 10000번 포트에 대한 접근을 Replicaset의 Primary 노드인 handson-mongodb-1 인스턴스 사설 IP의 22번 포트로 포워딩합니다.

    포워딩 정보 추가

  3. Bastion 인스턴스를 통한 MongoDB 인스턴스 ssh 접속을 시도합니다.

    접속
    ssh -i ${PRIVATE_KEY_FILE} ubuntu@${BASTION_PUBLIC_IP} -p 10000
  4. MongoDB 인스턴스에 접속한 후, 아래 명령을 실행하여 Replicaset이 구성되었는지 확인합니다.

    구성 확인
    mongosh --eval 'rs.config()'
    # ...
    # {
    # _id: 'hands-on-mongodb-replicaset',
    # version: 1,
    # term: 1,
    # members: [
    # ...
  5. 결과를 확인한 후 아래 명령을 실행하여 생성된 리소스를 제거합니다.

    생성된 리소스 제거
    terraform destroy