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