클러스터 만들기

문서 버전을 선택합니다.

데이터베이스 클러스터를 만들어 AlloyDB Omni를 사용합니다.

제한사항

다음과 같은 제한사항이 적용됩니다.

  • AlloyDB Omni는 포트 5432에서 실행됩니다. 커스텀 포트 구성은 지원되지 않습니다.

  • 클러스터를 만들기 전에 모든 데이터베이스 매개변수 구성이 올바른지 확인합니다. 클러스터가 생성되면 데이터베이스 매개변수를 수정할 수 없습니다.

시작하기 전에

클러스터를 만들기 전에 다음을 완료합니다.

  • AlloyDB Omni 오케스트레이터 설치

  • AlloyDB Omni 구성요소 설치

  • TLS 인증서 구성

  • 오케스트레이터 내에서 프로비저닝된 모든 데이터베이스 노드의 PG_DATA_DIR에 외부 볼륨 (DataDisk)을 마운트합니다.

  • Ansible 대신 alloydbctl을 사용하려는 경우 필요한 policycoreutils-python-utils 패키지가 모든 VM에 설치되어 있는지 확인합니다. 이 패키지를 설치하려면 다음 명령어를 실행합니다.

    sudo dnf install policycoreutils-python-utils
  • 환경을 사용하는 경우 Google Cloud 을 ENVIRONMENT_TYPE로 설정합니다.gcp 그런 다음 root 사용자로 gcloud auth login을 실행하여 gcloud CLI 계정을 인증해야 합니다. 또한 인증된 계정에는 다음 권한이 있어야 합니다.

    • compute.instances.get
    • compute.instances.list
    • compute.instances.updateNetworkInterface

클러스터 사양 준비

클러스터를 만들려면 AlloyDB Omni에서 클러스터를 구성하는 방법을 알아야 합니다. 필요한 사양을 만들려면 DBCluster 형식을 사용하여 YAML 파일을 만듭니다.

Secret:
  metadata:
    name: db-pw-DBCLUSTER_NAME
  spec:
    type: Opaque
    data:
      DBCLUSTER_NAME: BASE64_PASSWORD
---
DBCluster:
  metadata:
    name: DBCLUSTER_NAME
  spec:
    databaseVersion: 18.1.0
    mode: ""
    availability:
      numberOfStandbys: NUM_STANDBY_NODES
      enableAutoFailover: true
      enableAutoHeal: true
      autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
      autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
      healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
      replayReplicationSlotsOnStandbys: false
    primarySpec:
      adminUser:
        passwordRef:
          name: db-pw-DBCLUSTER_NAME
      resources:
        cpu: CPU_LIMIT
        memory: MEMORY_LIMIT
        disks:
        - name: DataDisk
          path: PG_DATA_DIR
      parameters:
        max_connections: "MAX_CONNECTIONS"
        max_wal_size: "MAX_WAL_SIZE"
        max_worker_processes: "MAX_WORKER_PROCESSES"
        log_connections: "LOG_CONNECTIONS"
        log_disconnections: "LOG_DISCONNECTS"
        log_hostname: "LOG_HOSTNAME"
        log_statement: "LOG_STATEMENT"
        huge_pages: "HUGE_PAGES"
        tcp_keepalives_idle: "TCP_KEEPALIVES_IDLE"
        tcp_keepalives_interval: "TCP_KEEPALIVES_INTERVAL"
        tcp_keepalives_count: "TCP_KEEPALIVES_COUNT"
      dbLoadBalancerOptions:
        DB_LOAD_BALANCER_TYPE:
          loadBalancerIP: "VIRTUAL_IP"
          loadBalancerType: "internal"
          loadBalancerInterface: "VIRTUAL_IP_INTERFACE"

다음 변수를 바꿉니다.

  • DBCLUSTER_NAME: 데이터베이스 클러스터의 이름입니다. 예를 들면 my-dbcluster입니다.

  • BASE64_PASSWORD: postgres 관리자 사용자에 사용되는 base64로 인코딩된 비밀번호입니다.

  • NUM_STANDBY_NODES: 클러스터의 대기 노드 수입니다. 예를 들면 2입니다.

  • (선택사항) AUTOFAILOVER_TRIGGER_THRESHOLD: 장애 조치가 발생하기 전에 상태 점검이 실패할 수 있는 횟수입니다. 기본값은 3입니다. 최솟값은 0이지만 값이 0으로 설정된 경우 AlloyDB Omni에서 기본값을 사용합니다.

    상태 점검이 AUTOFAILOVER_TRIGGER_THRESHOLD 번 실패하거나 상태 점검의 누적 기간이 HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD 초에 도달하면 자동 장애 조치가 발생합니다.

  • (선택사항) AUTOHEAL_TRIGGER_THRESHOLD: 자동 복구가 시작되기 전에 상태 점검이 실패할 수 있는 횟수입니다. 기본값은 3입니다. 최솟값은 0이지만 값이 0으로 설정된 경우 AlloyDB Omni에서 기본값을 사용합니다.

    상태 점검이 AUTOHEAL_TRIGGER_THRESHOLD 번 실패하거나 상태 점검의 누적 기간이 HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD 초에 도달하면 자동 복구가 발생합니다.

  • (선택사항) HEALTHCHECK_PERIOD: 각 상태 점검 사이에 대기할 시간(초)입니다. 기본값은 30입니다. 최솟값은 1입니다. 최댓값은 86400 (하루)입니다.

  • CPU_LIMIT: 데이터베이스 컨테이너에 할당할 CPU 수입니다. 예를 들면 4입니다.

  • MEMORY_LIMIT: 데이터베이스 컨테이너에 할당할 메모리 양입니다. 예를 들면 32Gi, 500Mi입니다.

  • PG_DATA_DIR: 데이터베이스 데이터가 저장될 디렉터리의 호스트 경로입니다.

  • (선택사항) MAX_CONNECTIONS: PostgreSQL 데이터베이스에 대한 동시 연결의 최대 수입니다. 기본값은 50입니다. 지원 값의 최솟값도 50입니다. 자세한 내용은 PostgreSQL max_connections 참조를 확인하세요.

  • (선택사항) MAX_WAL_SIZE: 자동 체크포인트 중 미리 쓰기 로그 (WAL)가 증가할 수 있는 최대 크기입니다. 기본값은 1GB입니다. 자세한 내용은 PostgreSQL max_wal_size 참조를 확인하세요.

  • (선택사항) MAX_WORKER_PROCESSES: 단일 Gather 또는 Gather Merge에서 시작할 수 있는 최대 작업자 수입니다. 기본값은 64입니다. 자세한 내용은 PostgreSQL max_worker_processes 참조를 확인하세요.

  • (선택사항) LOG_CONNECTIONS: PostgreSQL 서버에 대한 연결이 로깅되는지 여부를 결정합니다. 기본값은 on입니다. 자세한 내용은 PostgreSQL log_connections 참조를 확인하세요.

  • (선택사항) LOG_DISCONNECTS: PostgreSQL 세션 종료가 로깅되는지 여부를 결정합니다. 기본값은 on입니다. 자세한 내용은 PostgreSQL log_disconnections 참조를 확인하세요.

  • (선택사항) LOG_HOSTNAME: 연결 호스트의 IP 외에 호스트 이름이 로깅되는지 여부를 결정합니다. 기본값은 on입니다. 자세한 내용은 다음 PostgreSQL log_hostname 참조를 확인하세요.

  • (선택사항) LOG_STATEMENT: 로깅되는 SQL 문을 결정합니다. 기본값은 none입니다. 자세한 내용은 PostgreSQL log_statement 참조를 확인하세요.

  • (선택사항) HUGE_PAGES: 기본 공유 메모리 영역에 큰 페이지가 요청되는지 여부를 결정합니다. 기본값은 off입니다. 자세한 내용은 PostgreSQL huge_pages 참조를 확인하세요.

  • (선택사항) TCP_KEEPALIVES_IDLE: OS에서 클라이언트에 TCP keepalive 메시지를 전송하기 전에 네트워크 활동이 없는 시간(초)입니다. 기본값은 10입니다. 자세한 내용은 PostgreSQL tcp_keepalives_idle 참조를 확인하세요.

  • (선택사항) TCP_KEEPALIVES_INTERVAL: 클라이언트에서 승인하지 않은 TCP keepalive 메시지를 재전송해야 하는 시간(초)입니다. 기본값은 10입니다. 자세한 내용은 PostgreSQL tcp_keepalives_interval 참조를 확인하세요.

  • (선택사항) TCP_KEEPALIVES_COUNT: 서버의 클라이언트 연결이 비활성으로 간주되기 전에 손실될 수 있는 TCP keepalive 메시지 수입니다. 기본값은 10입니다. 자세한 내용은 PostgreSQL tcp_keepalives_count 참조를 확인하세요.

  • (선택사항) ENVIRONMENT_TYPE: 클러스터가 설정되는 환경(onprem 또는 gcp)을 결정합니다.

  • (선택사항) VIRTUAL_IP: 부하 분산기에서 사용하는 가상 IP 주소입니다. dbLoadBalancerOptions를 정의하는 경우 필수입니다. 자세한 내용은 고가용성 관리를 참조하세요.

  • (선택사항) VIRTUAL_IP_INTERFACE: VIRTUAL_IP가 구성된 네트워크 인터페이스입니다. 기본값은 eth0입니다.

클러스터 만들기

클러스터를 만들려면 환경과 일치하는 탭을 선택하고 안내를 따르세요.

Ansible

클러스터를 만들려면 다음 안내를 따르세요.

  1. 데이터베이스 클러스터 사양의 플레이북을 만듭니다.

    - name: Create DBCluster
      hosts: localhost
      vars:
        ansible_become: true
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.bootstrap
    
    

    다음 변수를 바꿉니다.

    • ANSIBLE_USER: Ansible에서 AlloyDB Omni 노드에 로그인하는 데 사용하는 OS 사용자입니다.

    • ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible에서 SSH를 사용하여 AlloyDB Omni 노드에 연결하는 데 사용하는 비공개 키입니다.

  2. 플레이북을 실행합니다.

    ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
          -e resource_spec="DBCLUSTER_SPECIFICATIONS"

    다음 변수를 바꿉니다.

    • DBCLUSTER_PLAYBOOK: 데이터베이스 클러스터에 대해 만든 플레이북의 경로입니다.

    • DEPLOYMENT_SPEC: AlloyDB Omni 구성요소 설치에서 만든 배포 사양의 경로입니다.

    • DBCLUSTER_SPECIFICATIONS: 클러스터 사양의 경로입니다.

alloydbctl

클러스터를 만들려면 다음 명령어를 실행합니다.

alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATIONS"

다음 변수를 바꿉니다.

클러스터 삭제

클러스터를 삭제하려면 환경과 일치하는 탭을 선택하고 안내를 따르세요.

Ansible

Ansible을 사용하여 클러스터를 삭제하려면 다음을 완료합니다.

  1. teardown.yaml이라는 플레이북을 만듭니다.

    - name: Tear down AlloyDB Omni cluster
      hosts: localhost
      vars:
        ansible_become: true
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE
      roles:
      - role: google.alloydbomni_orchestrator.delete
    
  2. ansible-playbook을 사용하여 플레이북을 실행합니다. DBClusterresource_type으로 지정하고 삭제할 클러스터의 이름을 resource_name으로 지정해야 합니다.

    ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
      -e `resource_type`=`DBCluster` -e `resource_name`="DBCLUSTER_NAME"

클러스터 상태의 불일치로 인해 정리 프로세스가 실패하는 경우 (예: 노드에 연결할 수 없는 경우) 명령어에 -e force=true를 추가하여 클러스터를 강제 삭제할 수 있습니다. 이렇게 하면 오케스트레이터에서 정리 프로세스 중에 발생하는 오류를 무시하고 최대한 많은 리소스를 삭제하도록 지시합니다.

  ansible-playbook -i "DEPLOYMENT_SPEC" teardown.yaml \
    -e resource_type=DBCluster -e resource_name="DBCLUSTER_NAME" -e force=true

alloydbctl

alloydbctl을 사용하여 클러스터를 삭제하려면 다음 명령어를 실행합니다.

alloydbctl delete -d "DEPLOYMENT_SPEC" \
      --resource_type DBCluster --resource_name "DBCLUSTER_NAME"

다음 변수를 바꿉니다.