postgresql replication 수동 fail-over / fail-back

2021. 6. 19. 07:13개발 이야기/Postgresql

현재 구축하고 있는 함쓰 DB는 postgresql 의 stream 방식의 복제로 셋팅을 하였습니다.

처음 pgpool 을 이용한 auto failover 를 구성하려고 하였는데요.

이런저런 포스트를 보면서 지식을 축적하고 있습니다.

 

그래서 일단 셋팅해놓은 복제 기능을 수동으로 처리하는 방법을 기록으로 남기고자 합니다.

Master 서버에 장애가 생기면 관리자는 수동으로 Slave 를 Master 로 승격시켜야 합니다.

 

postgresql 12부터는 Slave 동작시

  • /var/lib/postgresql/13/main/standby.signal
  • /var/lib/postgresql/13/main/postgresql.auto.conf

이렇게 두개의 파일이 생성이 됩니다.

signal 파일은 비어있는 파일이구요

conf 파일은 Master 서버의 커넥션 정보가 들어 있습니다.

 

한번 강제로 Master 를 stop 시키고 Slave 셋팅법을 보면서 실습해 보겠습니다.

먼저 Master 의 서비스를 정지 시켰습니다.

# systemctl stop postgresql

특별히 인식되는 것 없이 read-only 모드로 동작이 되는군요.

그럼 설정을 바꿔보도록 하겠습니다.

root@ggmoney-db2:/usr/lib/postgresql/13/bin# su - postgres
postgres@ggmoney-db2:~$ cd /usr/lib/postgresql/13/bin
postgres@ggmoney-db2:/usr/lib/postgresql/13/bin$ ./pg_ctl promote -D /var/lib/postgresql/13/main/
waiting for server to promote.... done
server promoted

이렇게 했더니 Slave DB에서도 Write 가 잘됩니다. 

그리고 Data 가 있는 경로의 standby.siganl 파일이 사라진것을 확인 할수 있었습니다.

 

그럼 이제 장애가 났던 서버를 새롭운 Slave 로 셋팅 해야겠죠

처음 Slave 를 설정했던 동일한 방법으로 진행하면 된다고 합니다.

아이피만 서로 바꿔주면 되겠지요

먼저 새로운 Slave 가 기존 Slave 에 접속하기 위해서 동일하게 pg_hba.conf 에 권한을 추가합니다. (New Master)

root@ggmoney-db2:/usr/lib/postgresql/13/bin# vi /etc/postgresql/13/main/pg_hba.conf

# 아래 내용 추가
host    replication     replication     10.34.96.3/20           md5

# 설정 변경후 재시작
root@ggmoney-db2:/usr/lib/postgresql/13/bin# systemctl restart postgresql

동일하게 새 Slave 에서 새 Master 데이터를 가져오고 서비스 재시작

# 꼭 postgres 로 권한을 변경후 해야한다. 실수로 root 계속 하다가 안되어서 애를 먹었다.
su - postgres
mv /var/lib/postgresql/13/main/ /var/lib/postgresql/13/main_old
pg_basebackup -h 10.34.96.4 -U replication -p 5432 -D /var/lib/postgresql/13/main  -Xs -P -R

# 서비스 시작
systemctl start postgresql.service

잘 작동한다.