태그 보관물: connection-pooling

connection-pooling

pgpool 아키텍처의 Postgres 이유는 설명하지 않습니다. 를 통해 볼 때 문서

다음은 pgpool 아키텍처의 예입니다.

여기에 이미지 설명을 입력하십시오

이것은 단일 서버에 pgpool 만 있으면된다는 것을 의미합니다. 이것이 사실입니까? 구성을 살펴보면 백엔드를 구성하는 것도 볼 수 있습니다 pgpool.conf. 추가로 이것을 암시합니다. 그러나 백엔드 서버에서 pgpool을 보는 이유는 설명하지 않습니다.

를 통해 볼 때 문서 나 또한 참조 :

PostgreSQL 8.0 이상을 사용하는 경우 pgpool-II에서 내부적으로 사용되므로 pgpool-II에서 액세스 할 모든 PostgreSQL에 pgpool_regclass 함수를 설치하는 것이 좋습니다.

그래서 어떻게 생각해야할지 모르겠습니다. 모든 백엔드 또는 전용 서버에 pgpool을 설치하는 것이 가장 좋습니다.



답변

일반적으로 백엔드 서버에는 Pgpool을 설치하지 않습니다. 당신이 당신의 사진에서 보는 것은 가장 일반적인 구성입니다. Pgpool은 기본적으로 데이터베이스 앞에있는 독립형 서버입니다. 두 Postgres 서버는 종종 스트리밍 복제로 구성됩니다. 하나는 마스터이고 다른 하나는 노예입니다.

이를 통해 Pgpool은 두 개 이상의 데이터베이스간에 모든 읽기 쿼리를로드 밸런싱 할 수 있습니다. 쓰기와 관련된 모든 쿼리는 마스터 서버로 라우팅되고 마스터 서버는 슬레이브로 복제됩니다.

으로 @Neil 맥기는 말했다 , 당신은 또한 더 높은 가용성을 달성하기 위해 여러 Pgpool 서버를 가질 수 있습니다. 기술적으로이 구성에서 데이터베이스 서버에 Pgpool을 설치할 수 있지만 이는 나쁜 습관입니다. 여러 개의 Pgpool 서버를 실행하는 것은 훨씬 더 복잡한 구성입니다. Pgpool을 처음 사용하는 경우 하나의 Pgpool 서버부터 시작하여 두 대의 서버를 작동시킵니다.

어느 구성에서나 응용 프로그램 서버는 단일 Postgres 데이터베이스에 연결되어 있다고 생각합니다.

에 대해 pgpool_regclass, 별도의 질문이어야합니다. 이것은 Pgpool FAQ에서 온 것입니다 .

PostgreSQL 8.0 이상을 사용하는 경우 pgpool-II에서 내부적으로 사용되므로 pgpool-II에서 액세스 할 모든 PostgreSQL에 pgpool_regclass 함수를 설치하는 것이 좋습니다. 이를 사용하지 않으면 다른 스키마에서 중복 테이블 이름을 처리하면 문제가 발생할 수 있습니다 (임시 테이블은 문제가되지 않음).

PostgreSQL 9.4.0 이상 및 pgpool-II 3.3.4 이상, 3.4.0 이상을 사용하는 경우 PostgreSQL 9.4에는 “to_regclass”함수와 같은 내장 pgpool_regclass가 있으므로 pgpool_regclass를 설치할 필요가 없습니다.

필요한 경우 Postgres 마스터 서버에서 일부 SQL 코드를 실행하여 Pgpool이 사용하는 기능을 추가하십시오.

regclass를 사용하면 추가 단계가 필요합니다 (insert_lock을 생각하고있었습니다). 소스에서 컴파일하는 경우 (일반적으로 대부분의 배포판에는 실제로 오래된 버전의 Pgpool이 있음) Postgres 라이브러리도 컴파일해야합니다.

소스에서 컴파일 한 경우 .../pgpool-II-3.X.X/src/sql/pgpool-regclass폴더 로 이동하여을 수행해야합니다 ./configure; make.

pgpool-regclass.so 파일을 Postgres 확장 디렉토리에 복사하십시오. 우분투 14.04 서버 (Postgres 9.3 패키지 설치 사용)에서 다음 위치에 있습니다 /usr/lib/postgresql/9.3/lib. 모든 Postgres 서버 에서이 작업을 수행해야 합니다.

완료되면 pgpool-regclass.sql마스터에서 실행할 수 있습니다 . 이것은 pgpool_regclass함수를 복사 한 라이브러리에 매핑합니다 .


답변

다른 모든 것과 마찬가지로 고 가용성 배포를 수행하는 방법에는 여러 가지가 있습니다. 여기 내 경험 (내 자신의 HA 구현)에서 무언가를 제안합니다.

  1. 항상 하나의 인스턴스 대신 여러 개의 pgpool2 인스턴스를 갖는 것이 좋습니다. 그 이유는 명백합니다. 단일 pgpool2는 단일 실패 지점입니다. pgpool은 워치 독 기능을 도입 했으므로 쉽게 달성 할 수 있습니다.
  2. 일반적으로 PostgreSQL 백엔드와 pgpool2간에 동일한 머신을 공유하는 것보다 별도의 머신에 pgpool2 인스턴스를 사용하는 것이 약간 좋습니다. 그러나 PostgreSQL과 동일한 서버에서 실행하더라도 큰 단점은 없습니다. 내 HA 구현에서 모든 컴퓨터는 하나의 PostgreSQL 인스턴스와 하나의 pgpool2 인스턴스를 실행합니다.

마지막 으로이 단계별 자습서 를 추천 하여 고 가용성 구현을 완료하기 위해 처음부터 (PostgreSQL 서버 설치 중) 시작하도록 안내합니다. 언급 된 튜토리얼은 내가 사용하는 구현에 대해 설명합니다.

도움이 되었기를 바랍니다.

업데이트 : 감사합니다 @Moshe Katz-링크가 변경되었습니다. 이제 원래 게시물에서도 여기에 업데이트되었습니다.


답변