- Master에 Postgresql 설치하기
sudo apt-get update # 최신버전 PostgreSQL 설치 sudo apt-get -y install postgresql # 특정버전 PostgreSQL 설치 sudo apt-get -y install postgresql-14 # 버전 확인 apt show postgresql
- postgresql 계정 추가하기.(pg_hba.conf 파일: 접속 클라이언트에 대한 인증 설정을 하는 파일)
vim /var/lib/pgsql/data/pg_hba.conf sudo service postgresql restart
testuser 계정 추가 - 계정 설정
CREATE USER testuser NOSUPERUSER; ALTER USER testuser WITH PASSWORD '1234'; CREATE DATABASE test_db WITH OWNER testuser;
- Slave에 Postgresql 설치하기 (master와 동일하게 진행)
- DB 실행
sudo service postgresql start
- 관리자 비밀번호 초기화
sudo su - postgres psql -d postgres \password postgres
- 계정 비밀번호 변경(ec2-user)
passwd postgres
- archive 디렉토리 생성 및 권한 추가
mkdir -p /var/lib/pgsql/archive chown -R postgres:postgres /var/lib/pgsql/archive
- 복제 계정 생성 후 확인
su - postgres psql CREATE USER replication WITH REPLICATION LOGIN PASSWORD 'replica' CONNECTION LIMIT -1; \du
- postgresql.conf 수정(master)
vim /var/lib/pgsql/data/postgresql.conf *설정변경 내용 listen_addresses = '*' port = 5432 wal_level = replica max_wal_senders = 3 max_replication_slots = 10 hot_standby = on archive_mode = on archive_command = 'test ! -f /var/lib/pgsql/archive/%f && cp %p /var/lib/pgsql/archive/%f' sudo service postgresql restart
- pg-hba.conf 수정(master)
- 추가하는 host의 ADDRESS에는 Slave의 public ip를 입력
- Slave에서 해당 host로 접근 가능
- master 설정 정보를 slave로 복제 후 확인(slave)
mv /var/lib/pgsql/data/ /var/lib/pgsql/data.org mkdir /var/lib/pgsql/data chown -R postgres:postgres /var/lib/pgsql/data.org chmod -R 700 /var/lib/pgsql/data su - postgres export LANG=C pg_basebackup -h [주소] -D /var/lib/pgsql/data -P -U replication -v -P -X stream ls -al /var/lib/pgsql/data
- postgresql.conf 수정(slave) -> slave에 맞게 수정
hot_standby = on primary_conninfo = 'host=[masterIP] port=[masterPORT] user=[생성한 replication용 user]' restore_command='test ! -f /var/lib/pgsql/archive/%f && cp %p /var/lib/pgsql/archive/%f' archive_cleanup_command = 'pg_archivecleanup /var/lib/pgsql/archive/ %r'
sudo service postgresql restart
모든 설정 후에 재시작.
이중화 테스트
- wal 프로세스 확인
ps -ef | grep wal
- recovery mode 확인하기 (master=f, slave=t)
SELECT pg_is_in_recovery();
- replication 상태 조회하기(생성한 slot)
select * from pg_stat_wal_receiver;
- master에서 테이블 생성 및 데이터 입력해보기
CREATE TABLE test_replication ( name VARCHAR(20) ); INSERT INTO test_replication VALUES('test');
- slave에서 데이터 동기화 됐는지 확인
SELECT * FROM test_replication;
모든 과정을 마치고 테스트를 하면 master와 slave의 데이터가 동일한것을 확인할 수 있다.
'DB' 카테고리의 다른 글
Transaction Isolation Level (0) | 2022.09.27 |
---|---|
MySQL 옵티마이저 (Optimizer) Explain (0) | 2022.05.10 |