Ubuntu 15.04에서 핫 스탠바이로 PostgreSQL 복제를 설치 및 구성하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 우분투 16.04(Xenial Xerus)
  • 우분투 15.04(Vivid Vervet)

이 페이지에서

  1. 1단계 - 호스트 이름 설정\n
  2. 2단계 - 마스터 및 슬레이브 서버에 PostgreSQL 설치
  3. 3단계 - 마스터 서버 구성
  4. 4단계 - 슬레이브 서버 구성
  5. 5단계 - 마스터 서버에서 슬레이브 서버로 데이터 동기화\n
  6. 6단계 - 테스트
  7. 참조

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

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

PostgreSQL은 데이터베이스를 복제하는 여러 가지 방법을 제공합니다. 백업용으로 사용할 수 있으며 고가용성 데이터베이스 서버를 제공할 수 있습니다. 이 자습서에서는 상시 대기 모드를 사용하여 PostgreSQL 복제를 설치하고 구성하는 방법을 보여줍니다. 상시 대기 모드는 구성하기 쉽고 PostgreSQL을 심층적으로 배우기에 매우 좋은 시작점입니다.

상시 대기 모드에는 2개의 데이터베이스 서버가 필요하며 두 서버 모두에서 Ubuntu를 운영 체제로 사용합니다.

  1. 마스터 서버 - 읽기 및 쓰기 권한으로 클라이언트의 연결을 수락합니다.\n
  2. 슬레이브 서버 - 대기 서버는 읽기 전용 권한으로 마스터 서버에서 데이터 사본을 실행합니다.\n

전제 조건

  • 2개의 Ubuntu 서버 - 마스터용 1개와 슬레이브용 1개.
  • 서버에 대한 루트 권한.\n
  • Ubuntu, apt 등에 대한 기본 지식\n

1단계 - 호스트 이름 설정

ssh를 사용하여 두 서버에 로그인합니다.

ssh 

이제 hostnamectl 명령을 사용하여 두 서버(마스터 서버와 슬레이브 서버)의 호스트 이름을 설정합니다.

마스터 서버에서:

sudo hostnamectl set-hostname master-server

슬레이브 서버에서:

sudo hostnamectl set-hostname slave-server

그런 다음 vim 편집기를 사용하여 /etc/hosts 파일을 편집합니다.

sudo vim /etc/hosts

마스터 서버에 대해 이 구성을 붙여넣습니다.

192.168.1.249   master-server

슬레이브 서버에 대해 이 구성을 붙여넣습니다.

192.168.1.248   slave-server

파일을 저장하고 편집기를 종료합니다.

2단계 - 마스터 및 슬레이브 서버에 PostgreSQL 설치

PostgreSQL 설치를 시작하기 전에 Ubuntu 리포지토리를 업데이트합니다.

sudo apt-get update

다음으로 모든 종속성과 함께 PostgreSQL을 설치합니다.

sudo apt-get install postgresql postgresql-client postgresql-contrib

Postgres를 설치한 후 postgres 사용자의 새 비밀번호(설치 시 자동으로 생성됨)를 제공하십시오.

passwd postgres

Postgres 사용자 비밀번호를 입력하십시오.

이제 PostgreSQL 테스트:

su - postgres
psql
\conninfo

아래와 같은 결과가 표시됩니다.

3단계 - 마스터 서버 구성

이 단계에서는 IP 주소 192.168.1.249로 마스터 서버를 구성합니다. 복제를 수행할 수 있는 특별한 권한이 있는 새 사용자/역할을 생성한 다음 PostgreSQL 구성 파일을 편집하여 상시 대기 복제 모드를 활성화합니다.

루트 권한에서 su 명령을 사용하여 PostgreSQL 사용자로 전환합니다.

su - postgres

psql 명령어로 Postgres 셸에 액세스하고 이 PostgreSQL 쿼리를 입력하여 새 사용자/역할을 만듭니다.

psql
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '';

아래 PostgreSQL 명령으로 새 복제본 사용자를 확인하십시오.

\du

새 복제 사용자가 생성되었습니다.

그런 다음 PostgreSQL 디렉터리 /etc/postgresql/9.4/main으로 이동하여 구성 파일을 편집합니다.

cd /etc/postgresql/9.4/main/

vim으로 postgresql.conf 파일을 엽니다.

vim postgresql.conf

59행의 주석을 제거하고 서버 IP 주소를 추가하십시오.

listen_addresses = 'localhost,192.168.1.249'

WAL(Write Ahead Log) 설정 175행에서 주석을 제거하고 값을 hot_standby로 변경합니다.

wal_level = hot_standby

체크포인트 섹션 라인 199에서 checkpoint_segments의 주석을 해제하고 값을 8로 변경합니다.

checkpoint_segments = 8

보관 섹션 라인 206 및 208에서 보관 옵션을 켜고 보관 명령을 추가합니다.

archive_mode = on
archive_command = 'cp -i %p /var/lib/postgresql/9.4/main/archive/%f'

복제 섹션 라인 224 및 226에서 값을 WAL 발신자 프로세스의 최대 수로 변경합니다.

max_wal_senders = 3
wal_keep_segments = 8

파일을 저장하고 vim을 종료합니다.

이제 아카이브 구성을 위한 기본 디렉토리 내에 새 디렉토리를 생성합니다. postgres 사용자로 아래 명령을 실행합니다.

mkdir -p /var/lib/9.4/main/archive/

다음으로 복제 연결을 허용하도록 pg_hba.conf 파일을 편집합니다.

vim pg_hba.conf

줄 끝에 사용자 복제본에 대한 새 구성을 추가하여 연결합니다.

host    replication     replica      192.168.1.248/24            md5
#192.168.1.248 is slave-server ip address

저장 및 종료.

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

마스터 서버와 같은 슬레이브 서버를 구성합니다. su를 사용하여 postgres 사용자가 되고 PostgreSQL 구성 디렉터리로 이동합니다.

su - postgres
cd /etc/postgresql/9.4/main/

vim으로 postgresql.conf를 편집합니다.

vim postgresql.conf

59행의 주석을 제거하고 슬레이브 서버 IP 주소를 추가하십시오.

listen_addresses = 'localhost,192.168.1.248'

175행으로 이동하여 wal_level 설정의 주석을 제거하고 값을 hot_standby로 변경하십시오.

wal_level = hot_standby

체크포인트 섹션에서 199행의 주석을 제거하십시오.

checkpoint_segments = 8

max_wal_sender 프로세스를 구성하려면 라인 224 및 226의 주석을 제거하십시오.

max_wal_senders = 3
wal_keep_segments = 8

슬레이브 서버에서 hot_standby 모드를 활성화하려면 라인 245의 주석을 제거하십시오.

hot_standby = on

저장 및 종료.

5단계 - 마스터 서버에서 슬레이브 서버로 데이터 동기화

이 단계에서는 PostgreSQL 데이터 디렉터리 /var/lib/postgresql/9.4/main을 백업 폴더로 이동한 다음 pg_basebackup 명령을 사용하여 최신 마스터 데이터로 교체합니다.

슬레이브 서버에서만 아래의 모든 명령을 실행하십시오!

슬레이브 서버에서 PostgreSQL을 중지합니다.

systemctl stop postgresql

이제 postgres 사용자로 로그인하고 기본 디렉터리의 이름을 백업으로 main_original로 바꿉니다.

su - postgres
mv 9.4/main 9.4/main_original

아래 명령을 실행하여 마스터 서버에서 슬레이브 서버로 데이터를 복사합니다.

pg_basebackup -h 192.168.1.249 -D /var/lib/postgresql/9.4/main -U replica -v -P

메모:

  • 192.168.1.249는 마스터 서버 IP 주소입니다.
  • 복제를 위한 사용자 복제본의 암호를 입력하라는 메시지가 표시됩니다.\n

새 기본 디렉터리로 이동하고 vim을 사용하여 새 복구 파일 recovery.conf를 만듭니다.

cd /var/lib/postgresql/9.4/main/
vim recovery.conf

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

standby_mode = 'on'
primary_conninfo = 'host=192.168.1.249 port=5432 user=replica '
restore_command = 'cp //var/lib/postgresql/9.4/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'

이제 exit를 사용하여 루트 사용자로 돌아가서 systemctl 명령으로 PostgreSQL을 시작합니다.

exit
systemctl start postgresql

시작 명령을 실행한 후 오류가 없는지 확인하십시오.

6단계 - 테스트

마스터 서버로 이동하여 postgres 사용자로 로그인한 후 아래 명령어를 실행하여 복제 정보를 확인합니다.

su - postgres
psql -x -c "select * from pg_stat_replication;"

아래에 복제 정보가 표시됩니다.

다음으로 마스터 서버에서 새 데이터베이스를 생성하여 테스트한 다음 슬레이브 서버에 데이터베이스가 있는지 확인합니다.

su - postgres
psql
create database howtoforge;

이제 슬레이브 서버에 로그인하고 howtoforge 데이터베이스가 자동으로 슬레이브 서버에 미러링되었는지 확인하십시오.

su - postgres
psql
\list

데이터베이스는 마스터 서버에서 슬레이브 서버로 복제되었습니다.

참조

  • https://cloud.google.com/solutions/setup-postgres-hot-standby