AWS EC2 ubuntu postgresql replication (Master-Slave)

2023. 8. 29. 15:45RDBMS/postgreSQL

사전 과정

 

AWS 에서 EC2 인스턴스를 2개 만든다. (master, slave)

 

https://muyeon95.tistory.com/187

 

AWS EC2 배포하기

선행작업 https://muyeon95.tistory.com/186 github SSH Repository [ git ] - 우선 repository 를 생성한다. - SSH 키를 발급받는다. 생성한 repository 를 사용하기 위해서 로컬환경에서 깃허브를 사용하기 위해 인증을

muyeon95.tistory.com

 

위 포스팅을 참고해 생성까지만 진행한다.

 

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