이 페이지에서는 고가용성과 사용이 권장되는 도구를 설명합니다.
데이터 복원력 정보
가용성, 서비스 복원 시간, 데이터 손실 측면에서 데이터 복원력을 생각해 볼 수 있습니다. 가용성은 보통 가동 시간으로 측정되며 데이터베이스가 사용 가능한 시간의 백분율로 표현됩니다. 예를 들어 99.99% 의 가용성을 달성하려면 데이터베이스가 연간 52.6분 또는 월간 4.38분 이상 다운되어서는 안 됩니다. 서비스 중단 후 서비스를 복원하는 데 걸리는 시간을 복구 시간 목표(RTO)라고 합니다. 서비스 중단으로 인해 허용되는 데이터 손실량을 복구 지점 목표(RPO)라고 하며, 트랜잭션이 손실되는 시간으로 표현됩니다. 예를 들어 RPO가 10분이면 장애 발생 시 최대 10분 분량의 데이터가 손실될 수 있습니다.
RTO 및 RPO 목표와 함께 가용성 목표 또는 서비스 수준 목표 (SLO)를 설정하는 것이 일반적입니다. 예를 들어 특정 워크로드의 경우 SLO를 99.99%로 설정하고 RPO를 0으로, 장애 발생 시 데이터 손실이 없도록, RTO를 30초로 요구할 수 있습니다. 다른 워크로드의 경우 SLO를 99.9%, RPO를 5분, RTO를 10분으로 설정할 수 있습니다.
데이터베이스 백업을 사용하여 기본 데이터베이스 복원력을 구현할 수 있습니다. AlloyDB Omni는 pgBackRest를 사용한 백업을 지원하며 데이터 손실을 최소화하기 위해 데이터베이스 Write Ahead Log (WAL) 파일도 보관합니다. 이 방법을 사용하면 기본 데이터베이스가 다운된 경우 데이터베이스 크기에 따라 RPO가 몇 분이고 RTO가 몇 분에서 몇 시간인 백업에서 복원할 수 있습니다.
더 엄격한 RPO 및 RTO 요구사항의 경우 Patroni를 사용하여 고가용성 구성으로 AlloyDB Omni를 설정할 수 있습니다. 이 아키텍처에는 기본 데이터베이스와 두 개의 대기 또는 복제본 데이터베이스가 있습니다. 표준 PostgreSQL 스트리밍 복제를 사용하여 AlloyDB Omni를 구성하여 기본 데이터베이스에서 커밋된 각 트랜잭션이 두 대기 데이터베이스에 동기식으로 복제되도록 할 수 있습니다. 이렇게 하면 대부분의 장애 시나리오에서 RPO가 0이고 RTO가 60초 미만이 됩니다.
클러스터 구성에 따라 동기 복제가 트랜잭션의 응답 시간에 영향을 미칠 수 있으며, 소량의 데이터 손실 위험을 감수할 수 있습니다. 예를 들어 동기식 대신 비동기식 복제를 사용하여 고가용성을 구현하면 트랜잭션 지연 시간을 낮추는 대신 RPO를 0이 아닌 값으로 설정할 수 있습니다. 동기식 복제가 트랜잭션 지연 시간에 미칠 수 있는 영향으로 인해 고가용성 아키텍처는 거의 항상 단일 데이터 센터 내에서 또는 서로 가까운 데이터 센터 (수십 km 떨어져 있음/지연 시간 10밀리초 미만) 간에 구현됩니다. 하지만 이 문서에서는 동기 복제를 기본값으로 사용합니다.
데이터 센터 또는 여러 데이터 센터가 가까이 있는 리전의 손실을 방지하는 재해 복구를 위해 AlloyDB Omni는 기본 리전에서 일반적으로 수백 또는 수천 km 떨어져 있거나 10~100밀리초 떨어져 있는 보조 리전으로의 비동기 스트리밍 복제를 사용하여 구성할 수 있습니다. 이 구성에서 기본 리전은 리전 내 기본 데이터베이스와 대기 데이터베이스 간의 동기 스트리밍 복제로 구성되고, 비동기 스트리밍 복제는 기본 리전에서 하나 이상의 보조 리전으로 구성됩니다. 기본 리전에서 장애 조치가 발생한 직후 보호되도록 보조 리전에 여러 데이터베이스 인스턴스를 사용하여 AlloyDB Omni를 구성할 수 있습니다.
고가용성 작동 방식
데이터베이스의 고가용성을 구현하는 데 사용되는 구체적인 기법과 도구는 데이터베이스 관리 시스템에 따라 다를 수 있습니다. 다음은 데이터베이스의 고가용성을 구현하는 데 일반적으로 사용되는 기법과 도구의 일부이며, 데이터베이스 관리 시스템에 따라 다를 수 있습니다.
중복성: 여러 서버 또는 지리적 리전에 데이터베이스를 복제하면 기본 인스턴스가 다운될 경우 장애 조치 옵션을 제공합니다.
자동 장애 조치: 장애를 감지하고 정상 복제본으로 원활하게 전환하여 다운타임을 최소화하는 메커니즘입니다. 애플리케이션 요청이 새 기본 노드에 도달할 수 있도록 쿼리가 라우팅됩니다.
데이터 연속성: 장애 발생 시 데이터 무결성을 보호하기 위한 보호 조치가 구현됩니다. 여기에는 복제 기술과 데이터 일관성 검사가 포함됩니다.
클러스터링: 클러스터링은 여러 데이터베이스 서버를 그룹화하여 단일 시스템으로 함께 작동하도록 하는 것입니다. 이렇게 하면 클러스터의 모든 노드가 활성 상태가 되고 요청을 처리하여 부하 분산과 중복성을 제공합니다.
대체: 장애 조치 전 원래 용량의 기본 노드와 복제본 노드를 사용하여 원래 아키텍처로 대체할 수 있는 방법
로드 밸런싱: 여러 인스턴스에 데이터베이스 요청을 분산하면 성능이 개선되고 트래픽 증가를 처리할 수 있습니다.
모니터링 및 알림: 모니터링 도구는 서버 장애, 높은 지연 시간, 리소스 소진과 같은 문제를 감지하고 알림 또는 자동 장애 조치 절차를 트리거합니다.
백업 및 복원: 데이터 손상이나 치명적인 오류가 발생한 경우 백업을 사용하여 데이터베이스를 이전 상태로 복원할 수 있습니다.
연결 풀링 (선택사항): 데이터베이스와 상호작용하는 애플리케이션의 성능과 확장성을 최적화합니다.
고가용성 도구
Patroni는 PostgreSQL 클러스터의 고가용성을 관리하고 자동화하도록 설계된 PostgreSQL 데이터베이스용 오픈소스 클러스터 관리 도구입니다. Patroni는 etcd, Consul, Zookeeper와 같은 다양한 분산 합의 시스템을 사용하여 클러스터 상태를 조정하고 관리합니다. Patroni의 주요 기능과 구성요소에는 자동 장애 조치, 리더 선출, 복제, 복구를 통한 고가용성이 포함됩니다. Patroni는 데이터베이스 서버 인스턴스에서 PostgreSQL 서비스와 함께 실행되며, 고가용성과 안정성을 보장하기 위해 상태, 장애 조치, 복제를 관리합니다.
Patroni는 분산 합의 시스템을 사용하여 메타데이터를 저장하고 클러스터를 관리합니다. 이 가이드에서는 etcd라는 분산 구성 저장소 (DCS)를 사용합니다. etcd의 용도 중 하나는 구성, 상태, 현재 상태와 같은 분산 시스템 정보를 저장하고 검색하여 모든 노드에서 일관된 구성을 보장하는 것입니다.
고가용성 프록시 (HAProxy)는 TCP 및 HTTP 기반 애플리케이션의 부하 분산 및 프록시에 사용되는 오픈소스 소프트웨어로, 수신 요청을 여러 서버에 분산하여 웹 애플리케이션의 성능과 안정성을 개선하는 데 사용됩니다. HAProxy는 여러 서버에 네트워크 트래픽을 분산하여 부하 분산을 제공합니다. HAProxy는 상태 점검을 실행하여 연결된 백엔드 서버의 상태를 유지합니다. 서버가 상태 점검에 실패하면 HAProxy는 서버가 상태 점검을 다시 통과할 때까지 트래픽 전송을 중지합니다.
동기 및 비동기 복제 고려사항
Patroni 관리 PostgreSQL 클러스터에서 복제는 동기 및 비동기 모드 모두에서 구성할 수 있습니다. 기본적으로 Patroni는 비동기 스트리밍 복제를 사용합니다. 엄격한 RPO 요구사항의 경우 동기식 복제를 사용하는 것이 좋습니다.
PostgreSQL의 동기식 복제는 트랜잭션이 기본 및 하나 이상의 동기식 대기 데이터베이스에 모두 기록될 때까지 기다린 후 커밋하여 데이터 일관성을 보장합니다. 동기 복제를 사용하면 기본 장애 발생 시 데이터가 손실되지 않아 강력한 데이터 내구성과 일관성을 제공할 수 있습니다. 기본은 동기식 대기 상태의 확인을 기다리므로 왕복 시간이 추가되어 지연 시간이 길어지고 처리량이 줄어들 수 있습니다. 이렇게 하면 특히 부하가 높은 경우 전체 시스템 처리량이 줄어들 수 있습니다.
비동기 복제를 사용하면 대기 클러스터의 승인을 기다리지 않고 기본 클러스터에서 트랜잭션을 커밋할 수 있습니다. 기본 노드는 WAL 레코드를 대기 노드에 전송하고 대기 노드는 이를 비동기적으로 적용합니다. 이 비동기식 접근 방식은 쓰기 지연 시간을 줄이고 성능을 개선하지만 대기 상태가 따라잡기 전에 기본이 실패하면 데이터가 손실될 위험이 있습니다. 대기 서버가 기본 서버보다 뒤처져 장애 조치 중에 불일치가 발생할 수 있습니다.
Patroni 클러스터에서 동기 복제와 비동기 복제 중 무엇을 선택할지는 데이터 내구성, 일관성, 성능에 대한 구체적인 요구사항에 따라 다릅니다. 동기식 복제는 데이터 무결성과 최소한의 데이터 손실이 중요한 시나리오에 적합하며, 비동기식 복제는 성능과 낮은 지연 시간이 우선인 환경에 적합합니다. 동일한 리전이지만 근처의 다른 영역 또는 데이터 센터에 동기식 대기 노드가 있고 다른 리전 또는 더 먼 데이터 센터에 비동기식 대기 노드가 있는 3노드 클러스터를 포함하는 혼합 솔루션을 구성하여 잠재적인 리전 중단으로부터 보호할 수 있습니다.