이 페이지에서는 AlloyDB Omni의 고가용성 구성을 설정하는 방법을 설명합니다. 이 페이지에서는 새 AlloyDB Omni 인스턴스를 고가용성 구성으로 생성하는 방법만 다룹니다. 기존 인스턴스를 고가용성으로 변환하는 방법은 포함하지 않습니다.
시작하기 전에
고가용성 및 데이터 복원력을 참조합니다.
아직 프로젝트가 없으면 Google Cloud 프로젝트를 만듭니다.
프로젝트에 결제가 사용 설정되어 있는지 확인합니다.
Google Cloud 콘솔에서 Cloud Shell을 엽니다.
Google Cloud 콘솔에서 다음 소스 저장소를 클론합니다.
git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
설치
이 가이드에서는 AlloyDB Omni와 함께 3노드 Patroni 클러스터 및 구성 저장소로 3노드 etcd 클러스터를 배포합니다. 클러스터 앞단에는 HAProxy를 관리형 인스턴스 그룹으로 배치하여 유동 IP 주소를 제공하고, 장애 조치가 클라이언트에 투명하게 이뤄지도록 합니다.
이 설정의 초기 구성은 다음 다이어그램과 같습니다.
그림 1. HAProxy가 클라이언트와 기본 노드 간의 연결을 관리하는 구성
중단이 발생하면 구성은 다음 다이어그램처럼 변경됩니다.
그림 2. 장애가 발생한 기본 노드가 대기 노드로 대체된 업데이트된 구성
데이터베이스에 연결하는 클라이언트 수가 많아져 동시 데이터베이스 연결이 성능 문제를 일으키는 경우 애플리케이션 측에서 연결 풀링을 추가하는 것이 좋습니다. 이를 구현할 수 없다면, PgBouncer와 같은 도구를 사용해 데이터베이스 측에서 연결 풀링을 추가할 수 있습니다.
배포
Cloud Shell에서 Cloud Solutions 저장소를 클론한 후 terraform 디렉터리로 이동합니다.
cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform
terraform.tfvars
파일을 만들고 수정합니다. 이 파일에서 다음 변수들의 값을 설정합니다.project_id = "PROJECT_ID" region = "REGION" zones = "ZONES" node_count = 3 cluster_name = "CLUSTER_NAME" replication_user_password = "REPLICATION_USER_PASSWORD" postgres_super_user_password = "PG_SUPER_USER_PASSWORD"
각 변수에 대한 설명은 GitHub의 변수 구성 파일에서 확인할 수 있습니다.
Terraform 스크립트를 실행하여 모든 리소스를 만듭니다.
terraform init && terraform apply
이 스크립트는 다음을 만들고 구성합니다.
etcd 클러스터용 노드 3개
Patroni 클러스터용 노드 3개
HAProxy용 노드 1개
동기식으로 Patroni 구성
3노드 클러스터에서 Patroni가 동기식 복제만 사용하도록 하려면 Patroni 구성 파일의 부트스트랩 섹션에 synchronous_mode
, synchronous_node_count
, synchronous_commit
, synchronous_standby_names
와 같은 구성 항목을 추가합니다. Patroni 구성은 시작 스크립트 템플릿과 각 Patroni 노드의 /alloydb/config/patroni.yml
파일에서 정의됩니다. 동기식 복제를 사용하려면 Patroni 부트스트랩 구성이 다음과 같아야 합니다.
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
synchronous_mode: true
synchronous_node_count: 2
postgresql:
use_pg_rewind: true
use_slots: true
parameters:
hot_standby: "on"
wal_keep_segments: 20
max_wal_senders: 8
max_replication_slots: 8
synchronous_commit: remote_apply
synchronous_standby_names: '*'
synchronous_mode
가 사용 설정되었으면, Patroni는 기본과 다른 복제본 간에 동기식 복제를 사용합니다. synchronous_node_count
파라미터는 Patroni가 동기식 대기 복제본의 수를 관리하는 데 사용됩니다. Patroni는 synchronous_node_count
파라미터에 따라 정확한 수의 동기식 대기 복제본을 관리하며, 멤버가 추가되거나 제거될 때 구성 저장소와 synchronous_standby_names
의 상태를 조정합니다. 동기식 복제에 대한 자세한 내용은 Patroni 문서의 복제 모드 섹션을 참조하세요.