Ubuntu 15.04에서 핫 스탠바이로 PostgreSQL 복제를 설치 및 구성하는 방법
이 튜토리얼은 다음 OS 버전에 대해 존재합니다.
- 우분투 16.04(Xenial Xerus)
- 우분투 15.04(Vivid Vervet)
이 페이지에서
- 1단계 - 호스트 이름 설정\n
- 2단계 - 마스터 및 슬레이브 서버에 PostgreSQL 설치
- 3단계 - 마스터 서버 구성
- 4단계 - 슬레이브 서버 구성
- 5단계 - 마스터 서버에서 슬레이브 서버로 데이터 동기화\n
- 6단계 - 테스트
- 참조
PostgreSQL 또는 Postgres는 15년 이상 활발하게 개발된 오픈 소스 객체 관계형 데이터베이스 관리 시스템(ORDBMS)입니다. 강력한 데이터베이스 서버이며 높은 워크로드를 처리할 수 있습니다. PostgreSQL은 Linux, Unix, BSD 및 Windows 서버에서 사용할 수 있습니다.
마스터/슬레이브 데이터베이스 복제는 한 서버(마스터)의 데이터베이스에서 다른 서버(슬레이브)의 데이터베이스로 데이터를 복사(동기화)하는 프로세스입니다. 이 프로세스의 주요 이점은 데이터베이스를 여러 시스템에 분산하여 마스터 서버에 문제가 있을 때 중단 없이 요청을 처리할 수 있는 동일한 데이터가 있는 백업 시스템이 있다는 것입니다.
PostgreSQL은 데이터베이스를 복제하는 여러 가지 방법을 제공합니다. 백업용으로 사용할 수 있으며 고가용성 데이터베이스 서버를 제공할 수 있습니다. 이 자습서에서는 상시 대기 모드를 사용하여 PostgreSQL 복제를 설치하고 구성하는 방법을 보여줍니다. 상시 대기 모드는 구성하기 쉽고 PostgreSQL을 심층적으로 배우기에 매우 좋은 시작점입니다.
상시 대기 모드에는 2개의 데이터베이스 서버가 필요하며 두 서버 모두에서 Ubuntu를 운영 체제로 사용합니다.
- 마스터 서버 - 읽기 및 쓰기 권한으로 클라이언트의 연결을 수락합니다.\n
- 슬레이브 서버 - 대기 서버는 읽기 전용 권한으로 마스터 서버에서 데이터 사본을 실행합니다.\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