본문 바로가기
DB

postgreSQL Replication

by 개발자깡 2023. 12. 12.
  1. Master에 Postgresql 설치하기
    sudo apt-get update
    # 최신버전 PostgreSQL 설치 
    sudo apt-get -y install postgresql
    
    # 특정버전 PostgreSQL 설치
    sudo apt-get -y install postgresql-14
    
    # 버전 확인
    apt show postgresql
  2. postgresql 계정 추가하기.(pg_hba.conf 파일: 접속 클라이언트에 대한 인증 설정을 하는 파일)
    vim /var/lib/pgsql/data/pg_hba.conf
    sudo service postgresql restart​​
    testuser 계정 추가
  3. 계정 설정
    CREATE USER testuser NOSUPERUSER;
    ALTER USER testuser WITH PASSWORD '1234';
    CREATE DATABASE test_db WITH OWNER testuser;​
     
  4. Slave에  Postgresql 설치하기 (master와 동일하게 진행)
  5. DB 실행
    sudo service postgresql start​​
  6. 관리자 비밀번호 초기화
    sudo su - postgres
    psql -d postgres
    \password postgres​
  7. 계정 비밀번호 변경(ec2-user)
    passwd postgres​
     
  8. archive 디렉토리 생성 및 권한 추가
    mkdir -p /var/lib/pgsql/archive
    chown -R postgres:postgres /var/lib/pgsql/archive​
  9. 복제 계정 생성 후 확인
    su - postgres
    psql
    CREATE USER replication WITH REPLICATION LOGIN PASSWORD 'replica' CONNECTION LIMIT -1;
    \du​
  10. 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
  11. pg-hba.conf 수정(master) 
    • 추가하는 host의 ADDRESS에는 Slave public ip를 입력
    • Slave에서 해당 host로 접근 가능
  12. 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
  13. 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

모든 설정 후에 재시작.

 

이중화 테스트

  1. wal 프로세스 확인
    ps -ef | grep wal​
  2. recovery mode 확인하기 (master=f, slave=t)
    SELECT pg_is_in_recovery();​​
     
  3. replication 상태 조회하기(생성한 slot)
    select * from pg_stat_wal_receiver;​
  4. master에서 테이블 생성 및 데이터 입력해보기
    CREATE TABLE test_replication (
      name	VARCHAR(20)
    );
    INSERT INTO test_replication VALUES('test');
  5. slave에서 데이터 동기화 됐는지 확인
    SELECT * FROM test_replication;

 

 

모든 과정을 마치고 테스트를 하면 master와 slave의 데이터가 동일한것을 확인할 수 있다.

 

'DB' 카테고리의 다른 글

Transaction Isolation Level  (0) 2022.09.27
MySQL 옵티마이저 (Optimizer) Explain  (0) 2022.05.10