웹사이트 검색

CentOS 7에서 PostgreSQL 9.6을 사용하여 마스터-슬레이브 복제를 설치 및 구성하는 방법


이 페이지에서

  1. 우리가 할 일\n
  2. 전제 조건
  3. 1단계 - PostgreSQL 9.6 설치
  4. 2단계 - PostgreSQL 9.6 시작 및 구성
  5. 3단계 - 방화벽 구성\n
  6. 4단계 - 마스터 서버 구성
  7. 5단계 - 슬레이브 서버 구성
  8. 6단계 - 테스트
    1. 추가 테스트

    PostgreSQL 또는 Postgres는 15년 이상 활발하게 개발된 오픈 소스 객체 관계형 데이터베이스 관리 시스템(ORDBMS)입니다. 높은 워크로드를 처리할 수 있는 강력한 데이터베이스 서버입니다. PostgreSQL은 Linux, Unix, BSD 및 Windows 서버에서 사용할 수 있습니다.

    마스터/슬레이브 데이터베이스 복제는 한 서버(마스터)의 데이터베이스에서 다른 서버(슬레이브)의 데이터베이스로 데이터를 복사(동기화)하는 프로세스입니다. 이 프로세스의 주요 이점은 데이터베이스를 여러 시스템에 분산하여 마스터 서버에 문제가 있을 때 중단 없이 요청을 처리할 수 있는 동일한 데이터가 있는 백업 시스템이 있다는 것입니다.

    PostgreSQL은 데이터베이스를 복제하는 여러 가지 방법을 제공합니다. 백업용으로 사용할 수 있으며 고가용성 데이터베이스 서버를 제공할 수 있습니다. 이 튜토리얼에서는 CentOS 7 서버에서 PostgreSQL 9.6 마스터-슬레이브 복제를 설치하고 구성하는 방법을 보여줍니다. PostgreSQL을 깊이 있게 배우기에 매우 좋은 출발점인 상시 대기 모드를 사용할 것입니다.

    우리가 할 일

    1. PostgreSQL 9.6 설치
    2. PostgreSQL 9.6 시작 및 구성
    3. 방화벽 구성\n
    4. 마스터 서버 구성
    5. 슬레이브 서버 구성
    6. 테스트

    전제 조건

      • CentOS 7 서버 1대
        • 마스터 - 읽기 및 쓰기 권한 - IP: 10.0.15.10\n

        • 슬레이브 - 읽기 전용 권한 - IP: 10.0.15.11\n

        1단계 - PostgreSQL 9.6 설치

        이 튜토리얼에서는 CentOS 7 서버에 최신 PostgreSQL 버전 9.6을 설치하는 방법에 대해 설명합니다. 기본적으로 CentOS 공식 저장소는 이전 버전을 제공하므로 공식 저장소에서 PostgreSQL을 설치해야 합니다.

        새 PostgreSQL 9.6 리포지토리를 시스템에 추가합니다.

        yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

        이제 다음 yum 명령을 사용하여 PostgreSQL 9.6을 설치합니다.

        yum -y install postgresql96-server postgresql96-contrib

        이렇게 하면 PostgreSQL 9.6을 설치할 수 있습니다.

        2단계 - PostgreSQL 9.6 시작 및 구성

        postgres 서비스를 시작하기 전에 데이터베이스를 초기화해야 합니다. 이를 위해 /usr/pgsql-9.6/bin 디렉토리로 이동하고 postgres 설정 postgresql96-setup으로 데이터베이스를 초기화합니다.

        cd /usr/pgsql-9.6/bin
        ./postgresql96-setup initdb

        다음으로 postgres 서비스를 시작하고 시스템 부팅 시 자동으로 시작되도록 활성화합니다.

        systemctl start postgresql-9.6
        systemctl enable postgresql-9.6

        기본적으로 postgres는 포트 5432에서 실행됩니다. 따라서 다음과 같은 방법으로 netstat 명령을 실행하여 포트 5432 상태가 LISTEN인지 확인하십시오.

        netstat -plntu

        netstat 명령이 없으면 net-tools를 설치합니다. net-tools의 일부입니다.

        yum -y install net-tools

        그래서 PostgreSQL 9.6이 시작되었습니다. 하지만 여전히 postgres 사용자의 암호를 구성해야 합니다. postgres 사용자로 로그인한 다음 postgres psql 셸에 액세스합니다.

        su - postgres
        psql

        아래 쿼리를 사용하여 postgres 사용자에게 새 비밀번호를 제공하십시오.

        \password postgres
        Enter new password:

        따라서 PostgreSQL 9.6이 시작되었고 postgres 사용자의 새 비밀번호가 구성되었습니다.

        3단계 - 방화벽 구성

        Firewalld는 CentOS 7의 기본 방화벽 관리 도구입니다. 이 서비스를 시작하고 PostgreSQL 연결을 위한 포트를 엽니다.

        firewalld를 시작하고 다음 명령을 사용하여 시스템 부팅 시 자동으로 시작되도록 활성화합니다.

        systemctl start firewalld
        systemctl enable firewalld

        다음으로 다음 명령을 사용하여 새 postgres 서비스를 firewalld에 추가합니다.

        firewall-cmd --add-service=postgresql --permanent
        firewall-cmd --reload

        이제 서비스의 열린 포트를 확인하십시오.

        firewall-cmd --list-all

        그러면 방화벽에 PostgreSQL 서비스가 추가된 것을 볼 수 있습니다.

        참고: 모든 마스터 및 슬레이브에서 1단계, 2단계 및 3단계를 실행합니다.

        4단계 - 마스터 서버 구성

        이 단계에서는 복제를 위한 마스터 서버를 구성합니다. 이 서버는 실행 중인 응용 프로그램에서 읽기 및 쓰기 프로세스를 허용하는 주 서버입니다. 마스터의 PostgreSQL은 10.0.15.10 IP 주소에서만 실행되며 슬레이브 서버로 스트리밍 복제를 수행합니다.

        pgsql 데이터 디렉터리 /var/lib/pgsql/9.6/data로 이동하여 구성 파일 postgresql.conf를 편집합니다.

        cd /var/lib/pgsql/9.6/data
        vim postgresql.conf

        listen_addresses 줄의 주석을 제거하고 서버 IP 주소 값을 10.0.15.10으로 변경합니다.

        listen_addresses = '10.0.15.10'

        wal_level 행의 주석을 제거하고 값을 hot_standby로 변경하십시오.

        wal_level = hot_standby

        동기화 수준의 경우 로컬 동기화를 사용합니다. 아래와 같이 값 라인을 주석 해제하고 변경합니다.

        synchronous_commit = local

        보관 모드를 활성화하고 archive_command 변수에 명령을 값으로 제공합니다.

        archive_mode = on
        archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'

        복제 설정의 경우 wal_sender 행의 주석을 제거하고 값을 2로 변경하고(이 가이드에서는 마스터와 슬레이브 서버 2개만 사용) wal_keep_segments 값은 10으로 변경합니다.

        max_wal_senders = 2
        wal_keep_segments = 10

        애플리케이션 이름의 경우 synchronous_standby_names 줄의 주석을 제거하고 값을 pgslave01로 변경합니다.

        synchronous_standby_names = 'pgslave01'

        그게 다야. 이러한 변경 사항을 저장하고 편집기를 종료하십시오.

        계속해서 postgresql.conf 파일에서 보관 모드가 활성화되어 있으므로 보관을 위해 새 디렉터리를 만들어야 합니다.

        새 디렉터리를 만들고 권한을 변경하고 소유자를 postgres 사용자로 변경합니다.

        mkdir -p /var/lib/pgsql/9.6/archive/
        chmod 700 /var/lib/pgsql/9.6/archive/
        chown -R postgres:postgres /var/lib/pgsql/9.6/archive/

        이제 pg_hba.conf 파일을 편집합니다.

        vim pg_hba.conf

        아래 구성을 줄 끝에 붙여넣습니다.

        # Localhost
        host    replication     replica          127.0.0.1/32            md5

        # PostgreSQL Master IP address
        host    replication     replica          10.0.15.10/32            md5

        # PostgreSQL SLave IP address
        host    replication     replica          10.0.15.11/32            md5

        저장 및 종료. 모든 구성이 완료되었습니다. 이제 다음 명령을 사용하여 PostgreSQL 9.6을 다시 시작하십시오.

        systemctl restart postgresql-9.6

        다음으로 복제 권한이 있는 새 사용자를 생성해야 합니다. replica라는 새 사용자를 생성합니다.

        postgres 사용자로 로그인하고 [이메일 보호] 비밀번호로 새 복제 사용자를 만듭니다.

        su - postgres
        createuser --replication -P replica
        Enter New Password:

        이로써 PostgreSQL 9.6 마스터 구성이 완료되었고 복제를 위한 사용자가 생성되었습니다.

        5단계 - 슬레이브 서버 구성

        이 단계에서는 슬레이브 서버를 구성합니다. 우리는 슬레이브 서버의 postgres 데이터 디렉토리를 마스터 서버의 postgres 데이터로 교체한 다음 IP 주소 10.0.15.11에서 실행되도록 슬레이브 서버를 구성하고 마지막으로 쓰기 없이 읽기만 허용하도록 hot_standby를 활성화하려고 합니다.

        슬레이브 서버 구성을 시작하기 전에 아래의 systemctl 명령을 사용하여 postgres 서비스를 중지합니다.

        systemctl stop postgresql-9.6

        그런 다음 postgres 디렉토리로 이동하여 데이터 디렉토리를 백업하십시오.

        cd /var/lib/pgsql/9.6/
        mv data data-backup

        새 데이터 디렉터리를 만들고 디렉터리의 소유권 권한을 postgres 사용자로 변경합니다.

        mkdir -p data/
        chmod 700 data/
        chown -R postgres:postgres data/

        다음으로 postgres 사용자로 로그인하고 복제 사용자로 마스터 서버에서 슬레이브 서버로 모든 데이터 디렉토리를 복사합니다.

        su - postgres
        pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
        Password:

        비밀번호를 입력하고 마스터에서 슬레이브 서버로 데이터 전송을 기다립니다.

        전송이 완료되면 postgres 데이터 디렉토리로 이동하여 슬레이브 서버에서 postgresql.conf 파일을 편집합니다.

        cd /var/lib/pgsql/9.6/data/
        vim postgresql.conf

        listen_addresses 값을 슬레이브 서버 IP 주소 10.0.15.11로 변경합니다.

        listen_addresses = '10.0.15.11'

        다음 줄의 주석을 제거하고 값을 on으로 변경하여 슬레이브 서버에서 hot_standby를 활성화합니다.

        hot_standby = on

        그게 다야. 변경 사항을 저장하고 편집기를 종료합니다.

        그런 다음 vim으로 새 recovery.conf 파일을 만듭니다.

        vim recovery.conf

        다음 구성을 붙여넣습니다.

        standby_mode = 'on'
        primary_conninfo = 'host=10.0.15.10 port=5432 user=replica application_name=pgslave01'
        trigger_file = '/tmp/postgresql.trigger.5432'

        변경 사항을 저장하고 파일을 종료합니다.

        참고: primary_conninfo에서 자신의 서버 세부 정보를 입력합니다.

        recovery.conf 파일의 소유권 권한을 postgres 사용자 권한으로 변경합니다.

        chmod 600 recovery.conf
        chown postgres:postgres recovery.conf

        그리고 슬레이브 서버에서 PostgreSQL 9.6을 시작합니다.

        systemctl start postgresql-9.6

        슬레이브 서버 구성이 완료되었습니다.

        이제 Slave 서버를 확인하면 IP 주소가 10.0.15.11인 서버에서 PostgreSQL 9.6이 실행되고 있음을 알 수 있습니다.

        netstat -plntu

        6단계 - 테스트

        PostgreSQL 9.6 마스터-슬레이브 복제를 위한 설치 및 구성이 완료되었습니다. 설정을 테스트하려면 복제 상태 스트림을 확인하고 마스터에서 슬레이브로 데이터 복제를 테스트합니다.

        마스터 서버에 로그인하고 postgres 사용자로 전환합니다.

        su - postgres

        다음으로 다음 명령을 사용하여 PostgreSQL의 스트리밍 상태 복제를 확인합니다.

        psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
        psql -x -c "select * from pg_stat_replication;"

        상태 값이 스트리밍이고 sync_state가 동기화임을 확인해야 합니다.

        다음으로 마스터에서 데이터를 입력하여 테스트한 후 슬레이브 서버에서 모든 데이터를 확인합니다.

        postgres 사용자로 로그인하고 MASTER 서버에서 PostgreSQL 셸에 액세스합니다.

        su - postgres
        psql

        새 테이블 replica_test를 만들고 다음 삽입 쿼리를 사용하여 일부 데이터를 삽입합니다.

        CREATE TABLE replica_test (test varchar(100));
        INSERT INTO replica_test VALUES ('linux-console.net');
        INSERT INTO replica_test VALUES ('This is from Master');
        INSERT INTO replica_test VALUES ('pg replication by hakase-labs');

        이제 마스터에서 했던 것과 비슷한 방식으로 SLAVE 서버에 로그인합니다.

        su - postgres
        psql

        아래 쿼리를 사용하여 replica_test 테이블의 모든 데이터를 확인하십시오.

        select * from replica_test;

        따라서 모든 데이터가 MASTER 서버에서 SLAVE 서버로 복제되는 것을 볼 수 있습니다.

        추가 테스트

        SLAVE 서버에서 WRITE 작업을 수행하도록 테스트합니다.

        INSERT INTO replica_test VALUES ('this is SLAVE');

        결과는 Cannot execute INSERT여야 합니다.

        따라서 CentOS 7에서 PostgreSQL 9.6 마스터-슬레이브 복제의 설치 및 구성이 성공적입니다.

        참조

        • https://www.server-world.info/en/note?os=CentOS_7