이전에 작성한 연습글을 보면 이중화까지 완료를 했다.
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 |
