postgreSQL 에는 replication slot 이라는 개념이 있다.
replication slots 이란
이 개념은 stanby 서버가 primary 의 wal 파일을 전달받지 못하는 상황을 방지하기 위한 목적으로 존재한다.
우선 postgreSQL 에서 replication 을 맺는 방법을 알아야 하는데, 기본적으로 WAL(Wrtie-Ahead Log) 를 이용한 방식으로 전달한다. 데이터 변경을 모두 WAL 을 통해서 파일이 쌓이게 되고, standby 서버는 이 WAL 파일을 전달 받아서 primary 와의 동기화를 보장하게 된다. 하지만 어떤 이유로 standby 가 잠시 WAL 을 전송받지 못하는 경우에는 문제가 발생할 수 있다.
왜냐하면 WAL 파일은 primary 에서 주기적으로 정리(wal_keep_size 에 의해)하기 때문에, 제때 전달받지 못하면 데이터가 누락 될 수 있기 때문이다. 이런 경우를 대비해서 postgreSQL 에서는 replication slot 개념을 이용해서 전달받지 못한 WAL 파일이 삭제되는 것을 방지하고 유지될 수 있도록 남기게 해주는 방법이다. 다만,, standby 가 계속 못 받아서 WAL 이 한계 없이 계속 쌓이게 된다면 디스크가 full 차는 경우도 예상해 볼 수 있다. 하지만 또 이런 경우를 대비해서 max_slot_wal_keep_size 파라미터를 통해 최대로 가지고 있을 수 있는 값을 정할 수 있다.
archive_mode
그런데.. replication slot 의 max 도 다 차서 실제로 WAL 파일이 지워지기 까지 하는 상황이 올 수도 있다. 이럴때는 archive mode 를 사용해서 실제로 WAL 파일을 archive 영역에 보관해두고 계속 쌓아가는 방식을 이용하는 건데, standby 에 문제가 생겼을때 restore_command 를 통해서 복구할 수 있다.
archive_mode = on
archive_command = 'cp %p /mnt/server/archivedir/%f'
restore_command = 'cp /mnt/server/archivedir/%f "%p"'
restore_command = 'copy "C:\\server\\archivedir\\%f" "%p"' # Windows
그래서 보통 archive 는 DB 가 존재하는 서버에 두지 않고 (디스크 full 위험 때문에) NFS 이나 S3 같은 별도의 외부 저장소 공간을 통해 업로드하고 복구에 사용한다.
'데이터베이스' 카테고리의 다른 글
분산 키-값 저장소에서 고려해야할 점 (0) | 2025.01.23 |
---|---|
postgreSQL에서의 database, schema, user 권한 정리 (0) | 2024.08.25 |
postgreSQL의 고가용성을 위한 방법 (1) | 2024.08.04 |
댓글