PostgreSQL 고가용성
각 노드가 읽기 또는 쓰기 요청을 수신할 때 최신 상태를 유지하려면 PostgreSQL 11이 모든 노드에서 해당 데이터를 동기화해야 합니다. 잠재적인 동기화 문제를 제거하는 단일 솔루션은 없으므로 여러 가지 HA 옵션을 고려해야 합니다. PostgreSQL 11용 HA 솔루션에 대한 비교는 표 형식의 목록(
https://www.postgresql.org/docs/11/different-replication-solutions.html)으로 제공됩니다.
다음 다이어그램에서는 PostgreSQL HA 배포를 위한 PTC 권장 구성을 보여줍니다.
PostgreSQL
ThingWorx는 데이터베이스에 많은 양의 콘텐츠를 쓸 수 있으므로 모든 PostgreSQL 노드에 걸쳐 쓰기 순서가 그대로 유지되도록 하는 것이 중요합니다. 계단식 복제 아키텍처 내에서 모든 PostgreSQL 노드에 동기화 복제를 구성하고 동기화 복제에 대해 제한을 두는 것이 좋습니다. 이 옵션을 사용하려면 다음 요구사항을 충족해야 합니다.
• 동일한 크기의 PostgreSQL 서버 노드 세 개를 배포해야 합니다.
◦ 한 노드는 쓰기 요청이 전달되는 마스터여야 합니다. 마스터는 WAL 레코드를 대기 노드로 스트리밍하고 대기 노드가 승인한 경우에만 트랜잭션을 커밋합니다.
◦ 한 노드는 마스터에서 스트리밍 콘텐츠를 수신하는 대기 노드여야 합니다. 이 노드도 해당 콘텐츠를 두 번째 대기 노드에 스트리밍합니다.
◦ 또 다른 한 개의 추가 노드는 첫 번째 대기 노드에서 스트리밍 콘텐츠를 수신하는 대기 노드여야 합니다. 노드 실패 시 또는 노드가 오프라인이 될 경우 이 노드가 나머지 두 노드 중 하나가 되며 마스터-대기가 승인한 스트리밍 프로세스를 완료합니다.
Pgpool-II
PostgreSQL HA 구성을 완료하려면 쓰기 및 읽기 요청이 적절한 노드로 전달되어야 하고 노드 상태가 모니터링되어야 하며 정상이 아닌 노드는 오프라인으로 전환되어 복구되어야 합니다. 이러한 작업에 Pgpool-II를 사용하는 것이 좋습니다. 이 옵션을 사용하려면 다음 요구사항을 충족해야 합니다.
• 동일한 크기의 Pgpool 서버 노드 두 개를 배포해야 합니다. 해당 노드는 활성/수동 모드에서 작동합니다.
◦ 노드 하나는 마스터로 작동합니다. 이 노드는 쓰기 트래픽을 PostgreSQL 마스터 노드로 전달하고 읽기 트래픽을 PostgreSQL 대기 노드로 전달합니다.
◦ 다른 노드 하나는 대기로 작동합니다. Pgpool 마스터 노드가 실패하면 트래픽 분산을 넘겨 받습니다.
• 하나의 가상 IP 주소를 Pgpool-II 노드가 관리해야 합니다. 마스터는 이 주소를 사용하여 클라이언트에서 PostgreSQL 트래픽을 수신합니다.
Pgpool-II에 대한 참고 사항:
• Pgpool-II는 Windows 환경에서 지원되지 않습니다.
• PostgreSQL의 클라우드 구현에서는 Pgpool-II 대신 직접 DNS 장애 조치 메커니즘을 사용할 수 있습니다.
• ThingWorx 응용 프로그램과 동일한 서버에서 Pgpool-II 프로세스를 실행하여 HA 환경의 총 서버 수를 줄일 수 있습니다.
• PostgreSQL 복제를 관리하는 데 Pgpool-II를 사용하는 것은 권장되지 않습니다. 이 문서에 제공된 지침에서는 트래픽 라우팅, 노드 상태 모니터링 및 장애 조치 자동화를 위해 PostgreSQL의 스트리밍 복제 및 Pgpool-II를 사용합니다.