CentOS 7에서 PostgreSQL 9.6을 사용하여 마스터-슬레이브 복제를 설치 및 구성하는 방법
이 페이지에서
- 우리가 할 일\n
- 전제 조건
- 1단계 - PostgreSQL 9.6 설치
- 2단계 - PostgreSQL 9.6 시작 및 구성
- 3단계 - 방화벽 구성\n
- 4단계 - 마스터 서버 구성
- 5단계 - 슬레이브 서버 구성
- 6단계 - 테스트
- 추가 테스트
PostgreSQL 또는 Postgres는 15년 이상 활발하게 개발된 오픈 소스 객체 관계형 데이터베이스 관리 시스템(ORDBMS)입니다. 높은 워크로드를 처리할 수 있는 강력한 데이터베이스 서버입니다. PostgreSQL은 Linux, Unix, BSD 및 Windows 서버에서 사용할 수 있습니다.
마스터/슬레이브 데이터베이스 복제는 한 서버(마스터)의 데이터베이스에서 다른 서버(슬레이브)의 데이터베이스로 데이터를 복사(동기화)하는 프로세스입니다. 이 프로세스의 주요 이점은 데이터베이스를 여러 시스템에 분산하여 마스터 서버에 문제가 있을 때 중단 없이 요청을 처리할 수 있는 동일한 데이터가 있는 백업 시스템이 있다는 것입니다.
PostgreSQL은 데이터베이스를 복제하는 여러 가지 방법을 제공합니다. 백업용으로 사용할 수 있으며 고가용성 데이터베이스 서버를 제공할 수 있습니다. 이 튜토리얼에서는 CentOS 7 서버에서 PostgreSQL 9.6 마스터-슬레이브 복제를 설치하고 구성하는 방법을 보여줍니다. PostgreSQL을 깊이 있게 배우기에 매우 좋은 출발점인 상시 대기 모드를 사용할 것입니다.
우리가 할 일
- PostgreSQL 9.6 설치
- PostgreSQL 9.6 시작 및 구성
- 방화벽 구성\n
- 마스터 서버 구성
- 슬레이브 서버 구성
- 테스트
전제 조건
- 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.conflisten_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.conflisten_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