이 페이지에서는 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를 배포합니다. 클러스터 전면에서는 클라이언트에 전환이 투명하게 이루어지도록 관리형 인스턴스 그룹의 플로팅 IP 주소에 HAProxy를 사용합니다.
이 설정의 초기 구성은 다음 다이어그램에 나와 있습니다.
그림 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 구성
Patroni가 3노드 클러스터에서 동기식 복제만 사용하도록 하려면 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 문서의 복제 모드 섹션을 참고하세요.