고가용성 사양 구성
고가용성을 구성하려면 DBCluster 사양에서 다음 정보를 작성하세요.
DBCluster:
metadata:
...
spec:
...
readOnlyPort: READ_ONLY_PORT
availability:
numberOfStandbys: NUMBER_OF_STANDBYS
enableStandbyAsReadReplica: true
enableAutoFailover: true
enableAutoHeal: true
replayReplicationSlotsOnStandbys: true
healthcheckPeriodSeconds: HEALTHCHECK_PERIOD
autoFailoverTriggerThreshold: AUTOFAILOVER_TRIGGER_THRESHOLD
autoHealTriggerThreshold: AUTOHEAL_TRIGGER_THRESHOLD
다음 변수를 바꿉니다.
NUMBER_OF_STANDBYS: 설정할 대기 노드 수입니다. 이 값을0으로 설정하면 고가용성이 사용 중지됩니다. 최댓값은5입니다. 필요한 대기 노드 수를 잘 모르겠으면 높은 복원력을 위해2로 시작합니다.(선택사항)
READ_ONLY_PORT: 대기 읽기 전용 엔드포인트에 사용되는 부하 분산기 또는 가상 IP 주소의 포트입니다. 기본값은5433(기본 포트 + 1)입니다.(선택사항)
HEALTHCHECK_PERIOD: 각 상태 점검 사이에 대기할 시간(초)입니다. 기본값은30입니다. 최솟값은1입니다. 최댓값은86400(하루)입니다.(선택사항)
AUTOFAILOVER_TRIGGER_THRESHOLD: 장애 조치가 발생하기 전에 상태 점검이 실패할 수 있는 횟수입니다. 기본값은3입니다. 최솟값은0이지만 값이0으로 설정되면 AlloyDB Omni는 기본값을 사용합니다.상태 점검이
AUTOFAILOVER_TRIGGER_THRESHOLD번 실패하거나HEALTHCHECK_PERIOD * AUTOFAILOVER_TRIGGER_THRESHOLD초 (기본적으로 90초) 동안 실패하면 자동 장애 조치가 발생합니다.(선택사항)
AUTOHEAL_TRIGGER_THRESHOLD: 자동 복구가 시작되기 전에 상태 점검이 실패할 수 있는 횟수입니다. 기본값은5입니다. 최솟값은0이지만 값이0으로 설정되면 AlloyDB Omni는 기본값을 사용합니다.상태 점검이
AUTOHEAL_TRIGGER_THRESHOLD번 실패하거나HEALTHCHECK_PERIOD * AUTOHEAL_TRIGGER_THRESHOLD초 동안 실패하면 자동 복구가 발생합니다.
읽기 전용 대기 엔드포인트 확인
enableStandbyAsReadReplica: true를 설정하면 부하 분산기 (HAProxy 및 Keepalived 가상 IP 주소)가 기본 읽기-쓰기 엔드포인트 외에 전용 읽기 전용 엔드포인트를 자동으로 노출합니다.
HAProxy는 다음과 같이 활성 대기 인스턴스 간에 트래픽을 라우팅합니다.
GET /isstandby를 사용하여 모든 대기 노드에서 상태 점검을 실행합니다.leastconn부하 분산을 사용하여 활성 대기 인스턴스 간에 읽기 쿼리를 분산합니다.- 새 대기 토폴로지에 대한 클라이언트 연결을 삭제하지 않고 장애 조치 시 라우팅을 자동으로 업데이트합니다.
클러스터 엔드포인트를 확인하려면 다음 명령어 중 하나를 실행합니다.
alloydbctl
alloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_NAME다음 변수를 바꿉니다.
Ansible
google.alloydbomni_orchestrator.status역할의 Ansible 플레이북을 만듭니다. 예를 들면status.yaml입니다.- name: STATUS_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE roles: - role: google.alloydbomni_orchestrator.status다음 변수를 바꿉니다.
STATUS_PLAYBOOK_NAME: Ansible 플레이북의 이름입니다. 예를 들면My cluster status입니다.ANSIBLE_USER: Ansible이 AlloyDB Omni 노드에 로그인하는 데 사용하는 OS 사용자입니다.ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible이 SSH를 사용하여 AlloyDB Omni 노드에 연결하는 데 사용하는 비공개 키입니다.
플레이북을 실행합니다.
ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_NAME다음 변수를 바꿉니다.
엔드포인트는 status.primary.endpoints 아래에 보고됩니다.
- Read-Write: VIRTUAL_IP:5432
- Read-Only: VIRTUAL_IP:5433
DBCluster 사양 적용
구성된 DBCluster 사양을 적용하려면 다음 명령어 중 하나를 실행합니다.
alloydbctl
alloydbctl apply -d "DEPLOYMENT_SPEC" -r "DBCLUSTER_SPECIFICATION"다음 변수를 바꿉니다.
DEPLOYMENT_SPEC: AlloyDB Omni 구성요소 설치에서 만든 배포 사양의 경로입니다.
Ansible
ansible-playbook DBCLUSTER_PLAYBOOK -i "DEPLOYMENT_SPEC" \
-e resource_spec="DBCLUSTER_SPECIFICATION"다음 변수를 바꿉니다.
대기 인스턴스로 전환
고가용성 설정 또는 기본 및 대기 복제본을 전환해야 하는 기타 계획된 유지보수 활동을 테스트해야 하는 경우 전환을 수행할 수 있습니다. 전환이 발생하면 복제 방향과 기본 및 대기의 역할이 반대로 바뀝니다.
전환은 다음 작업을 수행합니다.
AlloyDB Omni 오케스트레이터가 기본을 오프라인으로 전환합니다.
AlloyDB Omni 오케스트레이터가 대기를 새 기본으로 승격합니다.
AlloyDB Omni 오케스트레이터가 기본을 대기로 변환합니다.
AlloyDB Omni가 새로 변환된 대기를 시작합니다.
전환 수행
전환을 수행하려면 다음 단계를 완료하세요.
기본 및 대기 인스턴스가 정상인지 확인합니다.
고가용성
status.phase가Ready인지 확인합니다.alloydbctlalloydbctl get -d "DEPLOYMENT_SPEC" -t DBCluster -n DBCLUSTER_SPECIFICATION -o yaml다음 변수를 바꿉니다.
DEPLOYMENT_SPEC: AlloyDB Omni 구성요소 설치에서 만든 배포 사양의 경로입니다.DBCLUSTER_SPECIFICATION: 클러스터 만들기에서 정의한DBCluster사양의 이름입니다.
Ansible
ansible-playbook status.yaml -i DEPLOYMENT_SPEC -e resource_type=DBCluster \ -e resource_name=DBCLUSTER_SPECIFICATION다음 변수를 바꿉니다.
DEPLOYMENT_SPEC: AlloyDB Omni 구성요소 설치에서 만든 배포 사양의 경로입니다.DBCLUSTER_SPECIFICATION: 클러스터 만들기에서 정의한DBCluster사양의 이름입니다.
다음 형식을 사용하여
Switchover사양을 만듭니다.Switchover: metadata: name: SWITCHOVER_NAME spec: dbClusterRef: DBCLUSTER_NAME newPrimary: NEW_PRIMARY_NAME다음 변수를 바꿉니다.
Ansible을 사용하는 경우
Switchover사양의 플레이북을 만듭니다.- name: SWITCHOVER_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE roles: - role: google.alloydbomni_orchestrator.switchover다음 변수를 바꿉니다.
SWITCHOVER_PLAYBOOK_NAME: Ansible 플레이북의 이름입니다. 예를 들면My Switchover입니다.ANSIBLE_USER: Ansible이 AlloyDB Omni 노드에 로그인하는 데 사용하는 OS 사용자입니다.ANSIBLE_SSH_PRIVATE_KEY_FILE: Ansible이 SSH를 사용하여 AlloyDB Omni 노드에 연결하는 데 사용하는 비공개 키입니다.
Switchover사양을 적용합니다.alloydbctlalloydbctl apply -d "DEPLOYMENT_SPEC" -r "SWITCHOVER_SPECIFICATION"다음 변수를 바꿉니다.
DEPLOYMENT_SPEC: AlloyDB Omni 구성요소 설치에서 만든 배포 사양의 경로입니다.SWITCHOVER_SPECIFICATION: 3단계에서 만든Switchover사양의 경로입니다.
Ansible
ansible-playbook SWITCHOVER_PLAYBOOK -i "DEPLOYMENT_SPEC" \ -e resource_spec="SWITCHOVER_SPECIFICATION"다음 변수를 바꿉니다.
고가용성을 위한 부하 분산기
부하 분산기 (HAProxy)는 노드를 Keepalived 및 가상 IP와 페어링하여 고가용성을 달성합니다. Keepalived는 가상 라우터 중복 프로토콜 (VRRP)을 활용하여 유동 가상 IP를 제어합니다. 데이터베이스 클라이언트 애플리케이션은 데이터베이스 노드의 IP 주소 대신 이 가상 IP에 연결합니다.
전용 부하 분산기가 사용되지 않는 구성에서는 Keepalived가 데이터베이스 노드에 직접 설치됩니다. 이 시나리오에서는 가상 IP를 현재 기본 노드에 동적으로 할당하여 고가용성을 달성하므로 기본 노드를 사용할 수 없게 되더라도 원활한 장애 조치가 보장됩니다.
안정적인 선택을 설정하기 위해 Keepalived는 VRRP 우선순위를 데이터베이스 클러스터 노드에 할당합니다. 첫 번째 부하 분산기 노드는 더 높은 Keepalived 우선순위(예: 110)로 기본 역할을 맡습니다. 후속 노드는 더 낮은 우선순위(예: 100)로 보조 역할을 합니다.
가상 IP가 정상 노드를 가리키도록 하기 위해 Keepalived는 2초마다 지속적인 상태 점검을 실행합니다. 이렇게 하면 systemd HAProxy 프로세스의 상태가 확인됩니다. 기본 노드의 HAProxy 서비스가 실패하면 Keepalived는 가상 IP를 정상 보조 노드로 마이그레이션합니다.
데이터베이스 노드의 멤버십이 변경되면 HAProxy 및 Keepalived는 자동으로 새 활성 데이터베이스 노드를 가리킵니다. 기본 라우팅 구성은 활성 클라이언트 연결을 삭제하지 않고 업데이트됩니다.
부하 분산기 구성
부하 분산기 노드의 가상 IP를 구성하려면 DBCluster 사양의 primarySpec 필드에 다음 dbLoadBalancerOptions 필드를 추가합니다.
DBCluster:
spec:
primarySpec:
...
dbLoadBalancerOptions:
onprem:
loadBalancerIP: "VIRTUAL_IP"
loadBalancerType: "internal"
loadBalancerInterface: "VIRTUAL_IP_INTERFACE"
다음 변수를 바꿉니다.
VIRTUAL_IP: 유동 가상 IP에 사용되는 고정 IP 주소입니다. 데이터베이스 클라이언트 애플리케이션은 여기에 정의된 IP 주소를 사용합니다. Keepalived가 Gratuitous ARP를 성공적으로 브로드캐스트할 수 있도록 이 IP 주소를 사용할 수 있어야 하며, 루프백할 수 없고, 온프레미스의 경우 기본 노드 인터페이스와 동일한 서브넷에 속해야 합니다.VIRTUAL_IP_INTERFACE: 가 구성된 네트워크 인터페이스입니다.VIRTUAL_IP기본값은eth0입니다.