'2017/09'에 해당되는 글 3건

  1. 2017.09.29 단어 빈도수 계산기
  2. 2017.09.11 PostgreSQL Replication
  3. 2017.09.11 VirtualBox 특정 포트를 외부에서 접근하기

단어 빈도수 계산기

아시는 분의 요청으로 제작한 단어 빈도수 계산기 입니다.

주요 사항

  • JAVA 1.8 이상 필요
  • JAVA FX로 GUI 구현


Posted by lahuman

PostgreSQL 내장 기능을 이용한 복제 스탠바이 서버 구축

사전 지식

WAL-Write Ahead Log

  • 마스터 서버에서 발생하는 모든 작업 로그 생성
  • 생성된 로그를 슬레이브 서버로 전달
  • 슬레이브 서버에서 받은 로그의 복원(재실행)

위와 같은 동작으로 마스터 서버와 같은 스키마/데이터를 가지는 복제 서버를 생성한다. 이 마스터 서버의 로그를 WAL 이라고 하며, 로그 위치는 $PG_SQL/data/pg_xlog 에 쌓인다.

WAL 전달 방식

  • Log-Shipping 방식 : pg_xlog 안의 WAL 파일 자체를 슬레이브 서버로 전달(File Copy)
  • Streaming 방식 : WAL 파일 저장 여부와 관계 없이 로그의 내용을 슬레이브 서버로 전달(Streaming)

Log-Shipping

마스터 서버에서 저장된 WAL 파일의 크기를 지정된 사이즈 많큼 채워야 슬레이브 서버로 전송, 채워지는 시간동안 마스터/슬레이브 서버의 데이터가 어긋남
마스터 서버의 장애 발생시, WAL 파일을 다 채우지 못하여 전달되지 않을경우 데이터의 유실 있음

Streaming

Streaming 방식은 PostgreSQL 9.0 이상에서 사용이 가능하다.

두 서버 간의 네트워크 문제가 없다는 가정하에, 거의 실시간으로 동작(1초 미만의 작은 지연 발생 가능)
슬레이브 서버의 긴 장애가 발생하여 문제가 생길 경우, 유실된 데이터 복구 방법은 슬레이브 서버를 처음부터 다시 구축 해야한다.
따라서 Streaming 방식을 사용하더라도, 이와 같은 문제를 피하기 위해서 Log-Shipping 방식을 적용해 놓는 것이 좋다.

Streaming Replication 적용

PostgreSQL 설치는 기존에 작성된 게시글 참조

마스터와 슬레이브 2대의 서버가 존재 하는 상테에서 진행 된다.
실행 계정은 설치 할때 생성한 postgres 이다.

복제 전용 유저 생성

Streaming 방식 적용을 위해 슬레이브 서버에서 마스터 서버에 접근할 Replication 전용 유저를 생성한다.

마스터 서버 설정

# CREATE ROLE repluser WITH REPLICATION PASSWORD '' LOGIN;

방금 생성한 계정의 접근 권한을 설정하기 위해 $PG_SQL/data/pg_hba.conf 파일에 다음을 추가 한다.
원본 문서에서는 md5로 되어 있으나 단순하게 trust로 변경

host    replication     repluser     192.168.0.0/32      trust

복제를 위한 $PG_SQL/data/postgresql.conf 설정 변경

listen_addresses = '*'  # 인증/권한 관리는 pg_hba.conf 파일에서 진행
wal_level = hot_standby  # 대기 서버에 읽기전용 작업 가능
max_wal_senders = 2  # WAL 파일을 전송할 수 있는 최대 서버 수
wal_keep_segments = 32  # 마스터 서버 디렉토리에 보관할 최근 WAL 파일의 수

서버 기동 명령어 

# 기동
$PG_SQL/bin/pg_ctl -D $PG_SQL/data -l logfile start

# 재시작
$PG_SQL/bin/pg_ctl -D $PG_SQL/data -l logfile restart

# 종료
$PG_SQL/bin/pg_ctl -D $PG_SQL/data -l logfile stop

슬레이브 서버 설정

  1. 마스터 서버 basebackup

pg_basebackup 명령어를 이용하여 최초 백업을 진행 한다.
이 명령은 마스터 서버의 $PG_SQL/data 디렉토리를 통째로 슬레이브 서버의 $PG_SQL/data 디렉토리로 복제/복원 하는 명령이다.
이 명령을 실행하기 전에 슬레이브서버에 $PG_SQL/data는 비어 있어야 한다.

$PG_SQL/bin/pg_basebackup -h $MASTER_IP -D $PG_SQL/data -U repluser -v -P --xlog-method=stream
  1. 설정 변경

$PG_SQL/data/postgresql.conf 설정 변경

listen_addresses = '*'  # 인증/권한 관리는 pg_hba.conf 파일에서 진행
hot_standby = on  # 대기 서버에 읽기전용 작업 가능

$PG_SQL/data/recovery.conf 파일을 추가 하고 다음의 내용을 작성한다.

standby_mode = on
primary_conninfo = 'host=MASTER_IP port=5432 user=repluser password=password'
trigger_file = '/path/of/triggerfile' # failover시 마스터 승격을 위한 트리거 파일

primary_conninfo 옵션 정보로 마스터 서버에 접속해 실시간 WAL 파일을 전달 받는다. 

슬레이브 서버를 마스터 서버로 전환하는 방법은 두가지가 있는데, pg_ctl promote 명령어를 이용하는 방법과 recovery.conf파일의 trigger_file 옵션을 이용하는 방법이다.
단순하게 해당 경로에 파일이 생성되었을 때,(touch 등으로) 스텐바이 서버가 새로운 마스터로 승격된다.
슬레이브 서버를 마스터로 변경할때는 기존 마스터가 확실히가 다운된 상태인지 확인 해야 한다.

서버 기동 명령어 

# -p PORT
# -D 데이터파일 위치
# & 백그라운드 실행
$PG_SQL/postmaster -p 5433 -D $PG_SQL/data &

Failback

기본적으로 Failback을 위한 특별한 기능이 제공되지 않는다. 따라서 다음과 같은 단계를 거쳐야 한다.

  1. 마스터 서버 장애가 복구 되면 이 서버를 슬레이브 서버로 구축
  2. 새 마스터 서버(기존 슬레이브)를 강제로 다운
  3. 새로 구축된 슬레이브(구 마스터)를 마스터 서버로 승격
  4. 슬레이브 서버 재 구축

이외의 방법은 PostgreSQL Wiki-Replication, Clustering, and Connection Pooling에서 볼 수 있다.

참고 자료

PostgreSQL Replication 구축하기 
PostgreSQL Replication – Log Shipping
Postgresql 9.x Replication – Streaming Log

Posted by lahuman

VirtualBox 특정 포트를 외부에서 접근하기

VirtualBox의 가상머신을 이용한 특정 서비스(SSH, DB, WEB, ETC)를 외부에 OPEN 하기 위한 가장 간단한 방법이다.

우선 가상머신에 대한 설치 & 설정은 본 글에서는 제외 한다.

서버 네트워크 설정 변경

  1. 가상 머신의 설정 정보를 클릭 한다.
[그림 1] 가상 머신 설정 정보 확인
  1. 네트워크의 어댑터 1의 타입을 NAT로 변경 한다.

  2. 고급 설정을 눌러 포트 포워딩(P) 버튼을 클릭 한다.

[그림 2] 네트워크 > 어댑터 1 설정
  1. 포트 포워딩 규칙을 설정한다.
[그림 3] 포트 포워딩 규칙 설정
  • 호스트 IP는 다음 CMD 명령어를 통해 확인 할 수 있다.
  $> ipconfig
  • 게스트 IP는 가상머신에서 다음 명령어를 이용하여 알수 있다.
  $> ifconfig
[그림 3] 포트 포워딩 규칙 설정
  1. 접속이 안된다면 확인 사항
  • 우선 가상 머신의 IPTABLE 에 설정을 확인 해야 한다. 다음 명령어는 간단하게 방화벽을 내리는 명령어다.
 $> service iptables stop

아주 간단하지만 유용하다.


Posted by lahuman