FATAL: invalid configuration, failover_when_quorum_exists is not allowed in native replication mode

2023. 8. 29. 17:34에러대응

에러 상황

 

pgpool2 를 통해 로드밸런싱을 설정하던 중 발생했던 문제

 

Aug 29 07:46:19 ip-172-31-44-88 pgpool[3790]: 2023-08-29 07:46:19: pid 3790: FATAL:  invalid configuration, failover_when_quorum_exists is not allowed in native replication mode
Aug 29 07:46:19 ip-172-31-44-88 systemd[1]: pgpool2.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
Aug 29 07:46:19 ip-172-31-44-88 systemd[1]: pgpool2.service: Failed with result 'exit-code'.
ubuntu@ip-172-31-44-88:~$ sudo systemctl status pgpool2.service 
× pgpool2.service - pgpool-II
     Loaded: loaded (/lib/systemd/system/pgpool2.service; enabled; vendor preset: enabl>
     Active: failed (Result: exit-code) since Tue 2023-08-29 07:46:19 UTC; 3s ago
       Docs: man:pgpool(8)
    Process: 3790 ExecStart=/usr/sbin/pgpool -n (code=exited, status=3)
   Main PID: 3790 (code=exited, status=3)
        CPU: 8ms

Aug 29 07:46:19 ip-172-31-44-88 systemd[1]: Started pgpool-II.
Aug 29 07:46:19 ip-172-31-44-88 pgpool[3790]: 2023-08-29 07:46:19: pid 3790: FATAL:  in>
Aug 29 07:46:19 ip-172-31-44-88 systemd[1]: pgpool2.service: Main process exited, code=>
Aug 29 07:46:19 ip-172-31-44-88 systemd[1]: pgpool2.service: Failed with result 'exit-c>

해결 과정

 

오류를 해석해보면

 

구성이 잘못되었습니다. replication_mode 에서는 failover_when_quorum_exists 가 허용되지 않습니다.

 

pgpool.conf 에 설정을 잘못 한듯 하다. 

 

sudo vi /etc/pgpool2/pgpool.conf

 

## ... 중략

replication_mode = on

## ... 중략

master_slave_mode = on

## ... 중략

failover_when_quorum_exists = on

## ... 중략

나의 경우는 이 3가지가 전부 on 으로 켜져있었다.

 

즉 replication_mode 와 master_slave_mode 가 둘다 켜져있어 충돌이 발생한 것으로 보인다.

 


SOLVE

 

replication_mode = off

master_slave_mode = on

failover_when_quorum_exists = on

 

또는

 

replication_mode = on

master_slave_mode = off

failover_when_quorum_exists = off

배운점

 

failover_when_quorum_exists 옵션은 master_slave_mode 와 함께 사용될 때만 의미가 있다.

위처럼 replication_mode = on 과 master_slave_mode = on 을 같이 설정할 경우 failover_when_quorum_exists = on 은 문제를 일으킨다.

 

replication_mode 와 master_slave_mode 를 함께 쓰는건 권장되지 않는다.

 

추가적으로

 

replication_mode :

이 모드는 여러 postgreSQL 서버같의 데이터 복제를 위해 사용된다. load_balance_mode 도 함께 활성화되면, 읽기 쿼리는 여러 백엔드 서버간에 분산된다.

 

master_slave_mode :

이 모드는 일반적으로 하나의 마스터와 하나 이상의 슬레이브 간에 복제를 설정할 때 사용된다. 마스터는 쓰기작업을 처리하고, 슬레이브는 주로 읽기 작업을 처리한다.

 

failover_when_quorum_exists :

pgpool2 의 고가용성 설정에 사용된다. 이 모드는 master-slave 모드에서만 유효하며 클러스터 내에 쿼럼(과반수의 노드)이 존재하는 경우에만 장애복구를 수행하도록 제어한다.

on 일 경우 쿼럼이 존재할 때만 장애 복구를 수행한다. 이를 통해 split-brain 상황을 방지할 수 있다. 즉 데이터의 일관성을 유지하기 위한 설정

off 일 경우 쿼럼의 유무와 관계 없이 장애 복구를 수행한다.

 

split-brain 상황

클러스터 내부의 노드들이 네트워크 파티션 또는 다른 종류의 통신 문제로 인해 분리되며 각각이 독립적으로 동작하는 상황

데이터 불일치, 리소스 중복 사용, 서비스 중복이 되는 상황.