2023. 8. 29. 15:45ㆍRDBMS/postgreSQL
사전 과정
AWS 에서 EC2 인스턴스를 2개 만든다. (master, slave)
https://muyeon95.tistory.com/187
위 포스팅을 참고해 생성까지만 진행한다.
master 인스턴스와 slave 인스턴스에 5432 포트를 허용한다.
postgres 설치 (Master, Slave)
sudo apt-get update
sudo apt install postgresql postgresql-contrib
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list. d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
설치가 잘 되었는지 확인해본다.
sudo service postgresql start
sudo service postgresql status
관리자 비밀번호 초기화 및 OS 의 postgres 계정 비밀번호 변경 (Master, Slave)
sudo su - postgres
psql
\password postgres
비밀번호 입력
다시 비밀번호 입력
\q
exit
sudo passwd postgres
비밀번호 입력
다시 비밀번호 입력
archive 디렉토리 생성 및 권한 추가 (Master, Slave)
sudo mkdir -p /var/lib/postgresql/14/archive
sudo chown postgres:postgres /var/lib/postgresql/14/archive
ls -la /var/lib/postgresql/14
복제 계정 생성 (Master)
sudo su - postgres
psql
create user repluser with replication login encrypted password ‘your password’ connection limit -1;
\q
exit
postgresql 사용 중지 (Master, Slave)
sudo systemctl stop postgresql
postgresql.conf 수정 (Master)
sudo vi /etc/postgresql/14/main/postgresql.conf
옵션이 너무 많기에 변경한 옵션만 적었다.
listen_addresses = '*'
wal_level = replica
wal_log_hints = on
archive_mode = on
archive_command = 'test ! -f /var/lib/postgresql/14/archive/%f && cp %p /var/lib/postgresql/14/archive/%f'
max_wal_senders = 3
wal_keep_size = 16 // 13버전까지는 wal_kepp_segments로 지칭되어 있음
hot_standby = on
logging_collector = on
pg_hba.conf 수정 (Master)
sudo vi /etc/postgresql/14/main/pg_hba.conf
아래를 맨 밑에 추가한다.
host replication repluser [ Slave IPv4/32 ] scram-sha-256
postgresql.conf 수정 (Slave)
sudo vi /etc/postgresql/14/main/postgresql.conf
listen_addresses = ‘*’
서버 재가동 (Master, Slave)
sudo systemctl restart postgresql
postgresql.conf 수정 (Slave)
sudo vi /etc/postgresql/14/main/postgresql.conf
primary_conninfo = ‘host=[Master IPv4] port=5432 user=repluser password=your password’
Master 의 설정 정보를 Slave 로 복제 ( pg_basebackup 명령 수행) (Slave)
sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.org
sudo mkdir /var/lib/postgresql/14/main
sudo chown -R postgres:postgres /var/lib/postgresql/14/main
sudo chmod 0700 /var/lib/postgresql/14/main
ls -l /var/lib/postgresql/14
sudo su - postgres
export LANG=C
pg_basebackup -h [Master IPv4] -D /var/lib/postgresql/14/main -U repluser -v -P -R -X stream
비밀번호 입력
failback 을 위한 postgresql.conf 수정 (Slave)
sudo find / -type f -name 'standby.signal'
sudo find / -type f -name 'postgresql.auto.conf'
sudo vi /etc/postgresql/14/main/postgresql.conf
romote_trigger_file = '/var/lib/postgresql/14/promote_trigger_file.txt'
sudo systemctl restart postgresql
walsender 프로세스 확인 (Master, Slave)
sudo ps -ef | grep postgresql
Master - Slave DB 역할 설정 확인 (Master, Slave)
sudo su - postgres
psql
select pg_is_in_recovery();
####### Master
pg_is_in_recovery
-------------------
f
(1 row)
####### Slave
pg_is_in_recovery
-------------------
t
(1 row)
테이블 생성 및 데이터 삽입
Master
create table newtable (
name text,
phone_type text,
phone_number integer
);
insert into newtable values(‘tester’, ‘testnumber’, 4356);
Master, Slave
\dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | newtable | table | postgres
(1 row)
'RDBMS > postgreSQL' 카테고리의 다른 글
pgpool2 로드밸런서 (0) | 2023.08.29 |
---|---|
postgreSQL Replication 개념 (0) | 2023.08.21 |
테이블명, 컬럼명 대소문자 구분 [ PostgreSQL ] (0) | 2023.08.14 |