(연습) postgresql 이중화 (Failover)

2025. 12. 7. 21:25·DB/Postgresql
반응형

이전에 작성한 연습글을 보면 이중화까지 완료를 했다.

patroni 를 이용하여 master / slave 설정이 끝났다.

그럼 한번 master 에 데이터베이스를 만들고 동기화가 잘되는지 보자.

일단 현재 설정을 확인해보자.

 

가상환경에서 실행했으니 가상환경을 띄우고 아래와 같이 해보면

gglabadmin@postgresql2:/opt/patroni_venv/venv_patroni$ sudo source venv_patroni/bin/activate
gglabadmin@postgresql2:/opt/patroni_venv/venv_patroni$ patronictl -c /etc/patroni/patroni.yaml list postgres-cluster

+ Cluster: postgres-cluster (7580890216573599783) +----+-------------+-----+------------+-----+
| Member      | Host        | Role    | State     | TL | Receive LSN | Lag | Replay LSN | Lag |
+-------------+-------------+---------+-----------+----+-------------+-----+------------+-----+
| postgresql1 | 10.34.1.111 | Replica | streaming |  2 |   0/5000398 |   0 |  0/5000398 |   0 |
| postgresql2 | 10.34.1.112 | Leader  | running   |  2 |             |     |            |     |
+-------------+-------------+---------+-----------+----+-------------+-----+------------+-----+
(venv_patroni) gglabadmin@postgresql2:/opt/patroni_venv$

2번이 리더인것을 알수 있다.

1번에서 데이터베이스를 만들어 볼려고 하면??

요런식으로 안된다고 알람이 온다...

맞지.. 읽기 전용이지 그럼 2번에서 해보자.

테이블 잘 생성되고 레코드도 잘 들어갔다.

1번에도 잘 복제가 되었다.

 

그럼이제 2번 DB를 다운시켜보자.

서버를 완전 내려보겠다.

gglabadmin@postgresql1:~$ sudo journalctl -u patroni -f
Dec 07 12:18:51 postgresql1 patroni[21503]: 2025-12-07 12:18:51.460 UTC [21503] LOG:  selected new timeline ID: 3
Dec 07 12:18:51 postgresql1 patroni[21503]: 2025-12-07 12:18:51.532 UTC [21503] LOG:  archive recovery complete
Dec 07 12:18:51 postgresql1 patroni[21499]: 2025-12-07 12:18:51.548 UTC [21499] LOG:  database system is ready to accept connections
Dec 07 12:18:52 postgresql1 patroni[20506]: 2025-12-07 12:18:52,471 INFO: no action. I am (postgresql1), the leader with the lock
Dec 07 12:18:52 postgresql1 patroni[21501]: 2025-12-07 12:18:52.515 UTC [21501] LOG:  restartpoint complete: wrote 932 buffers (5.7%); 0 WAL file(s) added, 0 removed, 0 recycled; write=46.399 s, sync=0.027 s, total=46.464 s; sync files=303, longest=0.012 s, average=0.001 s; distance=4289 kB, estimate=13700 kB; lsn=0/5432A80, redo lsn=0/5430970
Dec 07 12:18:52 postgresql1 patroni[21501]: 2025-12-07 12:18:52.515 UTC [21501] LOG:  recovery restart point at 0/5430970
Dec 07 12:18:52 postgresql1 patroni[21501]: 2025-12-07 12:18:52.515 UTC [21501] DETAIL:  Last completed transaction was at log time 2025-12-07 12:16:32.41573+00.
Dec 07 12:18:52 postgresql1 patroni[21501]: 2025-12-07 12:18:52.515 UTC [21501] LOG:  checkpoint starting: immediate force wait
Dec 07 12:18:52 postgresql1 patroni[21501]: 2025-12-07 12:18:52.538 UTC [21501] LOG:  checkpoint complete: wrote 2 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.005 s, sync=0.003 s, total=0.023 s; sync files=2, longest=0.002 s, average=0.002 s; distance=8 kB, estimate=12330 kB; lsn=0/5432B98, redo lsn=0/5432B60
Dec 07 12:18:52 postgresql1 patroni[20506]: 2025-12-07 12:18:52,555 INFO: no action. I am (postgresql1), the leader with the lock
Dec 07 12:19:02 postgresql1 patroni[20506]: 2025-12-07 12:19:02,570 INFO: no action. I am (postgresql1), the leader with the lock

patroni 가 자동으로 인식해서 스스로를 leader 로 인식했다고 하는것 같다.

그럼한번 클라이언트에서 insert 를 해보자.

 

1번 db에서 잘 들어간다..

우와 정말 편하네... 이정도면 이중화 할만하네...

이제 2번을 켜보자...

 

완전히 다운되었던 db를 켜면 자동으로 클러스터로 묶이는지를 봐야겠다.

어제 테스트 해볼때는 네트워크 어댑터만 뺐다가 꼈더니... 클러스가 묶이기는 했지만..

타임라인 차이로 수동으로 초기화를 해야하는 부분이 있었다.

이번에도 차이가 있는지 보자.

 

오잉 켜지자 마자. 그냥 붙는것 같다.....

좋은데???

데이터 동기화도 되었나 보자.

오... 레코드 여러개 넣어놨던것도 잘 들어왔다.

동기화가 바로 된 모양이다...

 

네트워크만 차단했을때는 왜... 바로 안되었을까?

이번에는 DB가 완전히 내려갔는데.. 네트워크만 차단된경우는 DB서비스가 내부에 살아 있으니까... 개별적인 타임라인으로 DB가 동작을 해버려서 서로 달라졌을수도 있다고 판단하는 로직이 있는 것 같다.

일단 이정도면... 아주 좋은데?

 

쓸만할것 같다.

반응형

'DB > Postgresql' 카테고리의 다른 글

(연습) postgreSQL 이중화 (consul, patroni)  (0) 2025.12.07
pgpool 4.1.4 auto fail-over, fail-back  (2) 2021.06.20
pgpool II 4.1.4 load balance  (0) 2021.06.19
postgresql replication 수동 fail-over / fail-back  (0) 2021.06.19
vultr 가상화 + ubuntu 21.04 + postgresql 13 replication  (0) 2021.06.16
'DB/Postgresql' 카테고리의 다른 글
  • (연습) postgreSQL 이중화 (consul, patroni)
  • pgpool 4.1.4 auto fail-over, fail-back
  • pgpool II 4.1.4 load balance
  • postgresql replication 수동 fail-over / fail-back
GG.Lab
GG.Lab
GG.Lab
    반응형
  • GG.Lab
    GG.Lab
    GG.Lab
  • 전체
    오늘
    어제
    • 분류 전체보기 (47) N
      • APP (25)
        • 함쓰가계부 (22)
        • 랭킹구구단 (3)
      • 인프라 (15)
        • Docker (1)
        • Proxmox (4)
        • Kubernetes (7)
        • Network (3)
      • DB (7) N
        • Postgresql (7) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 함쓰 메뉴얼
    • 함쓰 카페
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    함께쓰는가계부
    공유가계부
    Flutter
    postgresql이중화
    해외통화가계부
    patroni
    문자자동인식가계부
    Proxmox
    K8s
    PostgreSQL
    traefik
    플러터
    문자자동인식
    자작앱
    구구단
    커플가계부
    함쓰가계부
    연인가계부
    pfsense
    k3s
    앱출시
    k3s외부서비스
    가계부편의기능
    부부가계부
    쿠버네티스
    함쓰
    Kubernetes
    external-svc
    sms인식가계부
    해외통화지원
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
GG.Lab
(연습) postgresql 이중화 (Failover)
상단으로

티스토리툴바