Postgresql 설치 후 Postgresql.conf 설정 및 Master - Slave 구축
지난 글에 이어서 postgresql Master - Slave를 구축해보겟다.
지난 글 : https://0409kdk.tistory.com/2
Postgresql-15 Master - Slave 설정 및 구축- (1)
이번 프로젝트에서 DB 가용성을 위해 이중화를 해야한다고 해서 Postgresql의 Master - Slave 기능을 이용하여 이중화 구성을 해보려고 한다. OS : Redhat8 DB : Postgresql-15 Server : 2대 OS는 프로젝트 하는곳이
0409kdk.tistory.com
※ Master 서버
data 경로로 들어간다
cd /database/postgres/data
# default로 하신 분
cd /var/lib/pgsql/15/data
archive 폴더 생성
mkdir archive
postgresql.conf 파일을 연다.
vi postgresql.conf
수정 부분
listen_addresses = '*'
port = 5433 # Default = 5432
unix_socket_directories = '/var/run/postgresql'
wal_level = replica
archive_mode = on
# Default 경로 이신분은 /database/postgres/data 대신 /var/lib/pgsql/15/data
archive_command = 'test ! -f /database/postgres/data/archive/%f && cp %p /database/postgres/data/archive/%f'
max_wal_senders = 10
hot_standby = on
# Where to Log
logging_collector = on
log_directory = 'pg_log'
log_filename = ' postgresql-%Y-%m-%d.log '
log_file_mode = 0600
log_truncate_on_rotation = on
log_rotation_age = 1d
log_rotation_size = 10MB
# When to Log
log_min_messages = warning
log_min_error_statement = error
# What to Log
log_line_prefix = '%m [%p] %q%u@%d '
log_statement = 'none'
/usr/pgsql-15/bin/pg_ctl -D /database/postgres/data restart
#default 경로로 하신 분
/usr/pgsql-15/bin/pg_ctl -D /var/lib/pgsql/15/data restart
이제 Database에 접속해보겠다.
#-p 는 위에서 설정한 port
psql -p 5433
이제 Slave에 복제를 해주기 위한 DB user를 생성 한다.
CREATE USER replication WITH REPLICATION LOGIN PASSWORD 'replica' CONNECTION LIMIT -1;
\du 커맨드 입력시 생성된 유저를 확인 할 수 있다. (\q 는 psql 종료)
replication user가 생성되었으니
pg_hba.conf 파일을 수정
vi pg_hba.conf
맨 밑줄에 Slave 서버의 IP 를 허용해준다.
host replication replication Slave서버IP/32 trust
나는 추후 추가하기 싫어서 (귀찮음 ..) 전체 허용을 해주었다.
host all all 0.0.0.0/0 trust
postgres 를 다시 재시작한다.
/usr/pgsql-15/bin/pg_ctl -D /database/postgres/data restart
이제 다 되었다 Slave 서버에서 Master 서버의 정보를 가져오자.
※ Slave Server
pg_basebackup -h 'MasterIP' -D 'data경로' -U replication -p 'MasterPort' -v -R -P -X stream
Pg_basebackup 의 옵션 설명
-h : 접속 할 DB 서버 주소 (Master Node의 address)
-D : PGDATA 경로 (관리의 용이성을 위해 Master Node와 동일하게 부여)
-U : Master Node에 접속할 사용자 (Replication 유저를 사용)
-p : 접속 할 DB 서버 포트 (Master Node의 port)
-v : 복제 과정을 자세히(verbose) 출력합니다.
-P : 작업 진행과정을 출력합니다.
-X : basebackup 진행 중 필요한 WAL파일을 백업하는 방법을 명시합니다.
-> 복제 중 생성된 WAL 파일 포함
-> 여기서 -X stream의 의미는, 복제 중 Master Node에 추가로 연결하여 병렬로 WAL 파일을 Streaming 한다는 의미
-R : postgresql.auto.conf 파일 생성 여부
-> PostgreSQL 12 이전 버전에서는 recovery.conf 파일이 생성됨
-> PostgreSQL 12 이후 버전에서는 recovery.conf 파일이 사라지고 postgresql.auto.conf 파일로 대체됨
정확히 입력했지만 TCP/IP connections 허용이 안된거 같다 . Master 서버에서 5433 포트를 방화벽 허용을 해줘야 연결이 될꺼같다.
# root 계정으로 실행 해야함
sudo firewall-cmd --zone=public --add-port=5433/tcp --permanent
sudo firewall-cmd --reload
다시 backup을 받아보겠다.
복사가 완료되었다.
(VM ware에 네트워크 문제가 발생해서 master ip가 변경되었고 ph_hba.conf 에도 허용하는 IP 도 바뀌었다...)
Postgresql-12 이상 부터 recovery.conf 파일 대신 postgresql.auto.conf 파일로 대체 되었다.
postgresql.auto.conf는 최대한 건드리지 말것! ( Master Server의 정보가 담겨있다.)
이제 Slave DB를 시작한다.
/usr/pgsql-15/bin/pg_ctl -D /database/postgres/data start
이제 Master DB와 Slave DB에 각각 접속해서 test를 해볼것이다.
psql -h localhost -p 5433
Master DB 에서 TEST 테이블을 생성 및 데이터를 insert 해보자
CREATE TABLE TEST (test1 varchar(20));
INSERT INTO TEST VALUES(1234);
이제 Slave DB 에서 생성한 table을 SELECT 해보자
SELECT * FROM TEST;
Slave DB는 read-only mode 이기 때문에 insert가 안된다.
이제 PostgreSQL의 기능을 이용해서 이중화 구축을 완료하였다.
하지만 Master DB가 다운되면 Read-Only 밖에 되지 않기 때문에 PGPOOL-II 을 이용해 이 단점을 없애려고 한다.
PGPOOL은 다음글에서 Failover 기능으로 Master DB가 다운 되었을 때 Slave DB가 Master DB로 승격시켜 Slave DB에서도 Insert 가 가능하게 만들어 보겠다.
'개발 D > Postgresql' 카테고리의 다른 글
[Postgresql] Pgpool-II Failover 설정 (5) (1) | 2023.12.12 |
---|---|
[Postgresql] Pgpool-II 설정 (4) (2) | 2023.12.11 |
[Postgresql] Pgpool-II 설치 (3) (2) | 2023.12.11 |
[Postgresql] postgresql 이중화 Master-Slave 구축 - 설치 (1) (1) | 2023.12.08 |