PostgreSQL 9.1에서 장애 조치 자동화


18

PostgreSQL 9.1에서 자동 장애 조치를 위해 두 대의 동일한 서버를 어떻게 설정합니까?

OS


소스에서 컴파일 된 Centos 5 PostgreSQL 9.1
postgres 사용자 계정은 두 시스템에 모두 있으며 두 시스템에 연결하기위한 ssh 암호가없는 키가 있습니다.

내 현재 설정 :

마스터 서버 구성 :

postgresql.conf :

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf :

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust

대기 서버

postgresql.conf 및 pg_hba.conf는 마스터 서버에 구성된 것과 동일합니다.

recovery.conf :

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

hzRoot 덕분에 이제 서버를 대기에서 마스터로 전환하는 방법을 이해했습니다.

다음 명령을 사용하여 새 슬레이브를 새 마스터와 동기화 한 다음 복제 백업 및 실행을 수행 할 수 있습니다.

새로운 마스터 (10.0.66.2)

  1. su-postgres
  2. / opt / pgsql91 / data /의 trigger.txt를 터치하십시오.
  3. recovery.conf가 recovery가됩니다.
  4. psql -c "; SELECT pg_start_backup ( 'backup', true)";
  5. rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ --postmaster.pid 제외
  6. psql -c "; SELECT pg_stop_backup ()";

새 노예에서 (10.0.66.1)

  1. recovery.conf를 작성하십시오. cp recovery.done to recovery.conf
  2. vi recovery.conf IP 주소 변경 : primary_conninfo = 'host = 10.0.66.2'
  3. postgresql 시작

그래서 내 질문은 다음과 같습니다.

  1. 이것이 역할을 전환하는 올바른 방법입니까?
  2. 이 과정을 자동화 한 사람이 있습니까? 그렇다면 어떻게 했습니까?
  3. 동기식 복제가 활성화되면 새 마스터 서버가 슬레이브가 응답하기를 기다리고 있기 때문에 트랜잭션을 커밋하지 않습니다. 그러나 다른 서버 인 이전 마스터가 다운 되었기 때문에 슬레이브가 없습니다. 이것이 맞습니까? 아니면 새 슬레이브가 다운 된 상태에서 동기식 복제를 일시적으로 비활성화해야합니까?

1. 예 맞습니다. 2. 해당 프로세스를 자동화하지 않는 것이 좋습니다. 3. 최소한 2 개의 슬레이브와 1 개의 마스터가 필요합니다. 동기화라고 말했기 때문입니다. 커밋 동기화를 푸시하려면 복제에 2 개 이상의 노드가 필요합니다. 마스터 노드가 하나만 있으면 커밋 할 수 없습니다.
sftsz

새 마스터에는 4, 5, 6 단계가 필요하지 않습니다. 처음부터 복제하기 때문입니다. 둘째, 마스터가 사망하고 오프라인 상태 인 경우 연결할 수 없습니다. 4, 5, 6 단계는 일반적으로 복제 풀에 참가하는 새 슬레이브 노드에서 수행됩니다.
Eric

@Eric 내가 이것을 가지고 놀았을 때, 이전 마스터를 작업 상태로 되돌리려면 4, 5, 6 단계가 필요합니다. 대기를 기본으로 새로 설정하면 즉시 새 WAL 항목이 작성되므로 이제 이전 마스터보다 1 항목 앞서고 있습니다. 스탠바이 모드에서 이전 마스터를 시작하면 오류가 발생하므로 새 마스터와 동기화하기 위해 이전 마스터에서 4, 5, 6 단계를 수행해야했습니다 (pg_basebackup을 사용하여 새 마스터에서 전체 xlog를 스트리밍 할 수 있음) -postgres> = 9.1의 4,5,6 단계를 대체합니다). 내가 맞습니까? 아니면 잘못 했습니까?이 shoudln이 필요하지 않습니까?
Dalibor Filus

답변:


8

repmrg를 확인하십시오 .

repmgr은 DBA 및 시스템 관리자가 PostgreSQL 데이터베이스 클러스터를 관리하는 데 도움이되는 일련의 오픈 소스 도구입니다.

repmgr은 PostgreSQL 9에 도입 된 Hot Standby 기능을 활용하여 고 가용성 및 확장 성 요구 사항으로 데이터베이스를 설정하고 관리하는 프로세스를 크게 단순화합니다.

repmgr은 다음을 통해 관리 및 일일 관리를 단순화하고 생산성을 향상 시키며 PostgreSQL 클러스터의 전체 비용을 줄입니다.

  • 복제 프로세스를 모니터링하는 단계; DBA가 높은 이슈를 발행하도록 허용
  • 전환 및 장애 조치와 같은 가용성 작업.

두 가지 작업을 수행합니다.

  1. repmgr : 클러스터에서 작업을 수행 한 다음 종료하는 명령 프로그램
  2. repmgrd : 클러스터를 감시하고 원격 작업을 자동화 할 수있는 관리 및 모니터링 데몬.

자동 장애 조치의 경우 repmgrd는 트릭을 수행하며 네트워크에서 pgPool과 같은 SPOF가 아닙니다. 그러나 모든 데몬을 모니터링하고 실패 후에 다시 불러오는 것이 여전히 중요합니다.

RPM을 포함하여 버전 2.0이 출시 될 예정입니다.


프랭크 안녕하세요, 답변 주셔서 감사합니다. 나는 repmrg에 대해 들어 본 적이 없으며 확실히 시도해 볼 것입니다.
Craig Efrein

다시 한번 Frank, repmgr에 감사드립니다. 정확히 내가 찾던 것이 었습니다. 나는 오늘 그것을 시험해 보았습니다.
Craig Efrein

4

recovery.conf 파일에서 postgres가 master에서 slave로 장애 조치하도록 지시하는 행을 추가해야합니다. 당신은 추가해야합니다

trigger_file = '/any/file/to/trigger'

주어진 경로에이 파일을 만들 때 노드가 변경됩니다. (파일은 트리거 일뿐 아무것도 포함하지 않습니다)

스트리밍 복제 에 대한 추가 정보를 찾을 수 있습니다

반면에, 몇 가지 트릭으로 자동으로 만들 수는 있지만 모니터링 도구를 사용하고 수동으로 페일 오버하는 것이 더 좋습니다.


답변 주셔서 감사합니다. 테스트하기까지 며칠이 걸릴 수 있지만 확실히 다시 연락 드리겠습니다.
Craig Efrein

프로세스를 능률화하는 데 도움이되는 trigger_file 답변에 +1을 줄 것입니다. 프로세스를 완전히 자동화하는 방법은 전체 답변이 아닙니다. 내가 알았던 또 다른 사실은 마스터가 다운되는 동안 마스터가 승인하기를 기다리기 때문에 트랜잭션이 완료되지 않는다는 것입니다. 이것은 비동기 복제를 사용하여 해결되었습니다
Craig Efrein

꽤 굉장합니다. PostgreSQL의 복제 구현의 유연성 부족에 대해 많은 비판을 받았지만 이는 장애 조치를 처리하는 훌륭하고 간단한 방법입니다.
Aaron Brown

1
그러나 마스터 자체가 여전히 실행중인 경우에도 마스터 역할을 대신합니다 (따라서 두 개의 마스터가 있음). 이것은 postgres 자체에 의해 자동화되지 않습니다.
Dalibor Filus

0

누구든지 이것을 위해 pgpool-II 사용을 고려 했습니까?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

PostgreSQL에 대한 복제를 설정합니다. 오래된 주인이 돌아올 때 까다로운 부분이 발생합니다.

내가 읽은 것에서 pgpool은 대부분을 자동화 할 수있는 것처럼 보입니다. 그러나 PostgreSQL 9.1에 이미 존재하는 복제 기능을 활용하는지 확실하지 않습니다.


1
pgPool은 단일 장애 지점이므로 중단되면 모든 것을 잃어 버립니다.
Frank Heikens

1
답변 주셔서 감사합니다. CentOS와 Debian에서 결과가 혼합 된 PGPool II를 사용해 보았고 결국 포기했습니다.
Craig Efrein

1
HAproxy와 함께 pgpool II를 사용하지 않는 이유는 무엇입니까? 하트 비트 및 유동 IP 청취?
mikiemorales

과거 참조를 위해 pgpool-ii는 현재 Windows에서 실행되지 않습니다.
8:33에
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.