이 페이지에서는 고가용성과 권장되는 도구를 설명합니다.
데이터 복원력 정보
데이터 복원력은 가용성, 서비스 복원 시간, 데이터 손실 측면에서 생각할 수 있습니다. 가용성은 일반적으로 가동 시간으로 측정되며 데이터베이스를 사용할 수 있는 시간의 비율로 표현됩니다. 예를 들어 99.99% 의 가용성을 달성하려면 데이터베이스가 연간 52.6분(월 4.38분) 이상 다운되어서는 안 됩니다. 서비스 중단 후 서비스 복원에 걸리는 시간을 복구 시간 목표(RTO)라고 합니다. 서비스 중단으로 인해 허용되는 데이터 손실량을 복구 지점 목표(RPO)라고 하며, 거래가 손실되는 시간으로 표현됩니다. 예를 들어 RPO가 10분인 경우 장애가 발생하면 최대 10분 분량의 데이터가 손실될 수 있습니다.
일반적으로 가용성 타겟 또는 서비스 수준 목표 (SLO)를 RTO 및 RPO 타겟과 함께 설정합니다. 예를 들어 특정 워크로드의 경우 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초 미만이 됩니다.
클러스터 구성에 따라 동기식 복제가 트랜잭션의 응답 시간에 영향을 미칠 수 있으며, 소량의 데이터 손실을 감수할 수 있습니다. 예를 들어 동기식 대신 비동기 복제로 고가용성을 구현하여 트랜잭션 지연 시간을 줄이는 대신 0이 아닌 RPO를 가질 수 있습니다. 동기식 복제가 트랜잭션 지연 시간에 미칠 수 있는 영향으로 인해 고가용성 아키텍처는 거의 항상 단일 데이터 센터 내에서 또는 서로 가까운 (수십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노드 클러스터와 다른 리전 또는 더 먼 데이터 센터에 두 번째 비동기식 대기 전환이 있는 혼합 솔루션을 구성하여 잠재적인 지역 중단을 방지할 수 있습니다.