공유 디스크 장애 조치는 데이터베이스 복사본을 하나만 보유하여 동기화 오버헤드를 방지합니다. 여러 서버가 공유하는 단일 디스크 어레이를 사용합니다. 주 데이터베이스 서버에 장애가 발생하면 대기 서버는 마치 데이터베이스 충돌로부터 복구하는 것처럼 데이터베이스를 탑재하고 시작할 수 있습니다. 이를 통해 데이터 손실 없이 신속한 장애 조치가 가능합니다.
공유 하드웨어 기능은 네트워크 저장 장치에서 일반적입니다. 네트워크 파일 시스템을 사용하는 것도 가능하지만 파일 시스템이 가득 차 있는지 주의해야 합니다.POSIX행동(참조섹션 18.2.2.1). 이 방법의 한 가지 중요한 제한 사항은 공유 디스크 어레이가 실패하거나 손상되면 기본 토토 꽁 머니와 대기 토토 꽁 머니가 모두 작동하지 않는다는 것입니다. 또 다른 문제는 기본 토토 꽁 머니가 실행되는 동안 대기 토토 꽁 머니가 공유 저장소에 절대 접근해서는 안 된다는 점입니다.
공유 하드웨어 기능의 수정된 버전은 파일 시스템 복제입니다. 여기서 파일 시스템의 모든 변경 사항은 다른 컴퓨터에 있는 파일 시스템에 미러링됩니다. 유일한 제한 사항은 대기 토토 꽁 머니에 파일 시스템의 일관된 복사본이 있는지 확인하는 방식으로 미러링을 수행해야 한다는 것입니다. 특히 대기 토토 꽁 머니에 대한 쓰기는 마스터에 있는 것과 동일한 순서로 수행되어야 합니다.DRBD은 널리 사용되는 Linux용 파일 시스템 복제 솔루션입니다.
미리 쓰기 로그 스트림을 읽어 웜 및 핫 대기 토토 꽁 머니를 최신 상태로 유지할 수 있습니다. (WAL) 레코드입니다. 메인 토토 꽁 머니에 장애가 발생할 경우, 대기 토토 꽁 머니는 메인 토토 꽁 머니의 거의 모든 데이터를 담고 있어 신속하게 새로운 마스터 데이터베이스 토토 꽁 머니로 만들 수 있습니다. 이는 동기식 또는 비동기식일 수 있으며 전체 데이터베이스 토토 꽁 머니에 대해서만 수행할 수 있습니다.
대기 토토 꽁 머니는 파일 기반 로그 전달을 사용하여 구현할 수 있습니다. (섹션 26.2) 또는 스트리밍 복제(참조섹션 26.2.5) 또는 둘의 조합입니다. 상시 대기에 대한 자세한 내용은 다음을 참조하세요.PostgreSQL : 문서 : 12 : 26.5. 뜨거운 토토.
논리적 복제를 통해 데이터베이스 서버는 데이터 수정 스트림을 다른 서버로 보낼 수 있습니다.포스트그레SQL논리적 복제는 WAL에서 논리적 데이터 수정 스트림을 구성합니다. 논리적 복제를 사용하면 개별 테이블의 데이터 변경 사항을 복제할 수 있습니다. 논리적 복제에서는 특정 서버를 마스터 또는 복제본으로 지정할 필요가 없지만 데이터가 여러 방향으로 흐를 수 있습니다. 논리적 복제에 대한 자세한 내용은 다음을 참조하세요.PostgreSQL : 문서 : 12 : 30 장. 논리 스포츠 토토 베트맨. 논리적 디코딩 인터페이스를 통해(PostgreSQL : 문서 : 12 : 48 장 윈 토토 디코딩), 타사 확장 프로그램도 유사한 기능을 제공할 수 있습니다.
마스터-대기 복제 설정은 모든 데이터 수정 쿼리를 마스터 토토 꽁 머니로 보냅니다. 마스터 토토 꽁 머니는 데이터 변경 사항을 대기 토토 꽁 머니에 비동기적으로 보냅니다. 대기 토토 꽁 머니는 마스터 토토 꽁 머니가 실행되는 동안 읽기 전용 쿼리에 응답할 수 있습니다. 대기 토토 꽁 머니는 데이터 웨어하우스 쿼리에 이상적입니다.
슬로니-I는 테이블별 세분성 및 다중 대기 서버 지원을 갖춘 이러한 유형의 복제의 예입니다. 대기 서버를 비동기식(일괄)으로 업데이트하기 때문에 장애 조치(failover) 중에 데이터 손실이 발생할 수 있습니다.
문 기반 복제 미들웨어를 사용하면 프로그램이 모든 SQL 쿼리를 가로채서 하나 또는 모든 서버에 보냅니다. 각 서버는 독립적으로 운영됩니다. 읽기-쓰기 쿼리는 모든 서버에 전송되어야 모든 서버가 변경 사항을 수신할 수 있습니다. 그러나 읽기 전용 쿼리는 단 하나의 서버에만 전송될 수 있으므로 읽기 작업 부하가 서버 간에 분산될 수 있습니다.
쿼리가 수정되지 않은 채 단순히 브로드캐스트되는 경우 다음과 같은 기능은무작위(), CURRENT_TIMESTAMP, 시퀀스는 서버마다 다른 값을 가질 수 있습니다. 이는 각 서버가 독립적으로 작동하고 SQL 쿼리가 브로드캐스트되기 때문입니다(실제로 수정된 행이 아님). 이것이 허용되지 않는 경우 미들웨어나 애플리케이션은 단일 서버에서 해당 값을 쿼리한 다음 해당 값을 쓰기 쿼리에 사용해야 합니다. 또 다른 옵션은 전통적인 마스터-대기 설정과 함께 이 복제 옵션을 사용하는 것입니다. 즉, 데이터 수정 쿼리는 마스터에만 전송되고 복제 미들웨어가 아닌 마스터-대기 복제를 통해 대기 서버로 전파됩니다. 또한 모든 트랜잭션이 2단계 커밋을 사용하여 모든 서버에서 커밋되거나 중단되도록 주의해야 합니다(거래 준비그리고커밋 준비됨). Pgpool-II그리고연속 텅스텐이러한 복제 유형의 예입니다.
노트북이나 원격 서버와 같이 정기적으로 연결되지 않거나 통신 링크가 느린 서버의 경우 서버 간 데이터 일관성을 유지하는 것이 어렵습니다. 비동기식 다중 마스터 복제를 사용하면 각 서버는 독립적으로 작동하며 정기적으로 다른 서버와 통신하여 충돌하는 트랜잭션을 식별합니다. 충돌은 사용자 또는 충돌 해결 규칙에 따라 해결될 수 있습니다. Bucardo는 이러한 복제 유형의 예입니다.
동기식 멀티마스터 복제에서 각 서버는 쓰기 요청을 수락할 수 있으며 수정된 데이터는 각 트랜잭션이 커밋되기 전에 원본 서버에서 다른 모든 서버로 전송됩니다. 쓰기 활동이 많으면 과도한 잠금 및 커밋 지연이 발생하여 성능이 저하될 수 있습니다. 읽기 요청은 모든 서버로 전송될 수 있습니다. 일부 구현에서는 공유 디스크를 사용하여 통신 오버헤드를 줄입니다. 동기식 멀티마스터 복제는 대부분 읽기 작업 부하에 가장 적합합니다. 그러나 가장 큰 장점은 모든 서버가 쓰기 요청을 수락할 수 있다는 것입니다. 마스터 서버와 대기 서버 간에 작업 부하를 분할할 필요가 없으며 데이터 변경 사항이 한 서버에서 다른 서버로 전송되기 때문에 다음과 같은 비결정적 기능에는 문제가 없습니다.무작위().
PostgreSQL그러나 이러한 유형의 복제는 제공하지 않습니다.PostgreSQL2단계 커밋(거래 준비그리고커밋 준비됨)을 사용하여 애플리케이션 코드 또는 미들웨어에서 이를 구현할 수 있습니다.
왜냐하면포스트그레SQL오픈 소스이며 쉽게 확장 가능하며 많은 회사에서 채택했습니다.포스트그레SQL고유한 장애 조치, 복제 및 로드 밸런싱 기능을 갖춘 상용 폐쇄 소스 솔루션을 만들었습니다.
표 26.1위에 나열된 다양한 솔루션의 기능을 요약합니다.
표 26.1. 고가용성, 로드 밸런싱 및 복제 기능 매트릭스
| 특징 | 공유 디스크 장애 조치 | 파일 시스템 복제 | 미리 쓰기 로그 전달 | 논리적 복제 | 트리거 기반 마스터-대기 복제 | 문 기반 복제 미들웨어 | 비동기 멀티마스터 복제 | 동기식 멀티마스터 복제 |
|---|---|---|---|---|---|---|---|---|
| 가장 일반적인 구현 | NAS | DRBD | 내장 스트리밍 복제 | 내장된 논리적 복제, pglogical | 론디스트, 슬로니 | pgpool-II | 부카르도 | |
| 통신 방법 | 공유 디스크 | 디스크 블록 | WAL | 논리적 디코딩 | 테이블 행 | SQL | 테이블 행 | 테이블 행 및 행 잠금 |
| 특수 하드웨어가 필요하지 않습니다. | • | • | • | • | • | • | • | |
| 여러 마스터 토토 꽁 머니 허용 | • | • | • | • | ||||
| 마스터 토토 꽁 머니 오버헤드 없음 | • | • | • | • | ||||
| 여러 토토 꽁 머니를 기다리지 않음 | • | 동기화 꺼짐 | 동기화 꺼짐 | • | • | |||
| 마스터 실패는 데이터를 잃지 않습니다. | • | • | 동기화 켜짐 | 동기화 켜짐 | • | • | ||
| 복제본은 읽기 전용 쿼리를 허용합니다 | 상시 대기 있음 | • | • | • | • | • | ||
| 테이블별 세분성 | • | • | • | • | ||||
| 충돌 해결이 필요하지 않습니다. | • | • | • | • | • | • |
위 범주에 맞지 않는 몇 가지 솔루션이 있습니다.
데이터 분할은 테이블을 데이터 세트로 분할합니다. 각 세트는 하나의 서버에서만 수정할 수 있습니다. 예를 들어, 데이터는 사무실(예: 런던과 파리)별로 분할될 수 있으며 각 사무실에 서버가 있습니다. 런던과 파리 데이터를 결합하는 쿼리가 필요한 경우 애플리케이션은 두 서버를 모두 쿼리하거나 마스터/대기 복제를 사용하여 각 서버에 다른 사무실 데이터의 읽기 전용 복사본을 보관할 수 있습니다.
위의 솔루션 중 다수는 여러 서버가 여러 쿼리를 처리할 수 있도록 허용하지만 단일 쿼리가 여러 서버를 사용하여 더 빠르게 완료하는 것을 허용하지 않습니다. 이 솔루션을 사용하면 여러 서버가 단일 쿼리에 대해 동시에 작업할 수 있습니다. 이는 일반적으로 서버 간에 데이터를 분할하고 각 서버가 쿼리의 해당 부분을 실행하고 결과를 결합하여 사용자에게 반환하는 중앙 서버에 반환하도록 함으로써 수행됩니다. 이는 다음을 사용하여 구현할 수 있습니다.PL/프록시도구 세트.