28
BDR ?

Pgday bdr 천정대

Embed Size (px)

Citation preview

Page 1: Pgday bdr 천정대

BDR ?

Page 2: Pgday bdr 천정대

백수, [email protected]

자바 개발자OTP 서버 개발, SI보안 솔루션 < 보험사 < 일본 근무 < 리눅스 벤처

천정대

취미 여친 독거노인

2

Page 3: Pgday bdr 천정대

00 순서

01. PostgreSQL 첫사랑02. 이중화, DR 사고는 영화에서나?

03. PostgreSQL 10년만의 재회04. Streaming Replication

05. 고객사 요구사항, BMT, POC06. Streaming Replication Customizing

07. 실패08. Bucard

09. BDR 이란?10. BDR 특징

11. BDR 설치12. 주의 해야 할점

13. 뭣이 중헌디?14. 좋은 놈, 공부할 놈, 아쉬운 놈

15. 최근 소식

3

Page 4: Pgday bdr 천정대

01 PostgreSQL 첫사랑

Oracle

대학교컴퓨터공학

알짜 레드햇

PostgreSQL

2000년아이오리눅스

Mandrake

4

Page 5: Pgday bdr 천정대

02 이중화, DR 사고는 영화에서나?

이중화. 접근제어 솔루션

아침, 저녁, 주말 예고없이 발생 IT 업무 마비 로그 삭제 후 업무 가능. 수개월 지속

오라클 장애(Archive Log 용량 부족)

고객사의 무지, 비용 솔루션 제공 업체의 전문성 부족 임시 방편

서버 하드 디스크 증설

5

Page 6: Pgday bdr 천정대

02 이중화, DR 사고는 영화에서나?

DR. IDC 센터 화재(2014.4.20)

DR 훈련은 기본 기능만 체크

테스트 환경이 구축되지 않았음

DR 용 IDC 센터가 무용 지물

1달 넘게 업무 마비후

6

Page 7: Pgday bdr 천정대

03 PostgreSQL 10년만의 재회

2014년 8월 보안회사 이직

PostgreSQL 사용중

공짜라는 이유만으로

DBA 없음

매뉴얼 부족

7

Page 8: Pgday bdr 천정대

04 Streaming Replication

자체개발

DAEMON

OS : Centos

C

Java

Postgres

Master

OS : Centos

Postgres

SlaveFailOver

사용자

사용자

사용자

사용자 C

Java

자체 개발한 이중화 Daemon 사용 서버 1대에서 C엔진, WAS, DB, 배치등을 관리 DB = Streaming Replication + Repmgr

8

Page 9: Pgday bdr 천정대

05 고객사 요구사항, BMT, POC

• Multi MasterL4, 도메인 없이 IP로 구성

추가 비용 없이 공짜로....

• DR애플리케이션 계층 복사는 없이 DB만 복제

Master, Slave1, Slave2 요구

• 이중화 장애FailOver 시 원활한 전환이 잘 되지 않음

Master, Slave 전환시 Daemon 및 설정 파일 오류 발생

• 개선과 신규 개발을 동시에 진행DR은 Master, Slave1, Slave2 구성에서 Slave2가 Slave1을 Master 설정

이중화 장애는 개선, Multi Master 는 근본적인 문제라 해결 불가능

9

Page 10: Pgday bdr 천정대

05 고객사 요구사항, BMT, POC

10

Master100.1.1.1

Master 서버 pg_hba.confhost replication postgres 100.1.1.1/32 trusthost replication postgres 100.1.1.2/32 trust

Slave 서버 pg_hba.confhost replication postgres 100.1.1.3/32 trust 추가

Slave2 > pg_basebackup -h 100.1.1.2 -p 5432 -U postgres -D /var/lib/pgsql/9.4.4/data --xlog --checkpoint=fast –progress

Slave2 > recovery.confprimary_conninfo = 'host=100.1.1.2 port=5432'

Slave(DR Master)

100.1.1.2

Slave2(DR)

100.1.1.3

Target Target

Page 11: Pgday bdr 천정대

06 Streaming Replication Customizing

Master, Slave 서버에 Postgresql Master용, Slave용 2가지 설정 파일을 보관postgresql.conf_master, pg_hba.conf_masterpostgresql.conf_slave, pg_hba.conf_slave

FailOver 시 Daemon은 Master, Slave 용 파일을 복사해서 재가동Master 일 경우 Slave 용 설정 파일을 복사Slave 일 경우 Master 용 설정 파일을 복사

Postgres

Master

Master용 설정파일

Slave용 설정파일

Postgres

Slave

Master용 설정파일

Slave용 설정파일

FailOver

이중화

DAEMON

설정 파일 복사

설정 파일 복사

11

Page 12: Pgday bdr 천정대

07 실패

왜?

PostgreSQL 를 반드시 중지 후 재가동 해야 함

접근제어, 패스워드 관리, VPN, OTP 솔루션의 경우 1초 이상 중단시 업무 마비

2대 이상 Multi Master를 구성해야 하는 고객사

02

01

03

12

Page 13: Pgday bdr 천정대

08 Bucardo

문제1

• 홈페이지 관리가 잘 되고 있지 않음

• Version Upgrade가 늦음

문제2

• 기능적인 제약 사항이 많음

• 설치 및 관리가 불편함

문제3

• 복제 관련 오류가 빈번히 발생

• 이중화 서비스가 불안정

Asynchronous PostgreSQL Replication System• https://bucardo.org/wiki/Bucardo 최종 버전 5.4.1(현재)

13

Page 14: Pgday bdr 천정대

09 BDR 이란?

Bi-Directional Replication

2ndQuadrant와 열성적인 커뮤니티에 의해 만들어진 수준높은첫번째 오픈 소스 Mutli-Master 복제 시스템

지리적으로 분산된 클러스터용으로 디자인된 고성능 비동기logical replication 이며 2~48 node를 지원함

Triggers, Queue를 사용하지 않고 2ndQuadrant에서 개발된WAL using the changeset extraction 메카니즘을 사용하므로서Trigger-based 솔루션의 쓰기 확대 관련 오류를 피함

14

Page 15: Pgday bdr 천정대

09 BDR 이란?

Conceptsbdr은 그룹에 속하는 다른 노드들로부터 변경을 수신하거나 사용자들에게 의해

직접 쓰여질 수 있음.

충돌 이슈를 방지하기 위해 Weakly coupled multi-master replication 기능 지원

Multi-master

로컬에 커밋되기 전에 다른 노드에 커밋되지 않음.

어떤 주어진 시간에 모든 노드에 대해 데이터가 동일하지 않을수 있으나 잠시 후 동

기화 됨. 동기에 대한 기능은 향후 제공 예정

asynchronous

logical replication은 각각의 row 값을 복제함.

데이터 블록에 대한 변경이 전송되는 물리(블록기반)복제와 다른 레벨

이전의 streaming, hot standby 는 physical(block-based)

logical

한 위치에서 다른 위치로 데이터를 복사하는 프로세스.

bdr은 shared-storage architecture 가 아님.

데이터 베이스에 충분한 공간을 가지고 다른 노드와 통신할 필요없이 query를 만족

시키는 모든 관련 인덱스등을 포함한 복사본을 보유하고 있음.

replication

15

Page 16: Pgday bdr 천정대

09 BDR 이란?

16

PostgreSQL 9.0(2010)Streaming Repliction(physical)

PostgreSQL 9.4(2014)Logical Decoding(changeset extraction)

physical한 row를 테이블에 저장 한다면 insert 외에 모든 index entries를 기록WAL의 insert 관련 byte/block 레벨의 모든 변화를 전송

logicalWAL를 logical decoding(데이터 베이스 테이블의 영구 변화를 데이터데이터 베이스 내부 상태에 대한 상세 지식없이 해석 가능하게,알기 쉬운 포맷으로 추출하는 과정) 을 이용해서 storage level의 변화를stream of tuples or SQL statements 로 전송

PostgreSQL Replication History

Page 17: Pgday bdr 천정대

09 BDR 이란?

Logical Streaming Replication

17

UserWAL

Sender

WAL Database

Apply

UserWAL

Sender

WALDatabase

Apply

Master Master

Page 18: Pgday bdr 천정대

10 BDR 특징

이중화 솔루션 기능 비교

18

Page 19: Pgday bdr 천정대

10 BDR 특징

이중화 솔루션 성능 비교

19

Page 20: Pgday bdr 천정대

11 설치

20

공통

http://bdr-project.org/docs/stable/installation-source.html 참조 postgresql-bdr, bdr-plugin을 다운로드 postgresql.conf 파일

shared_preload_libraries = ‘bdr’ pg_ctl 시작후 아래 구문 실행

CREATE EXTENSION btree_gistCREATE EXTENSION bdr

bdr 환경설정

Master1

복제 그룹 생성

SELECT bdr.bdr_group_create(local_node_name := ‘test1',node_external_dsn := 'host=192.100.1.1 port=5432 dbname=gt1000‘ );

Master2

복제 그룹에 참여

SELECT bdr.bdr_group_join(local_node_name := ‘test2',node_external_dsn := 'host=192.100.1.2 port=5432 dbname=gt1000',join_using_dsn := 'host=192.100.1.1 port=5432 dbname=gt1000‘ );

Page 21: Pgday bdr 천정대

12 주의 해야 할 점

21

Node Managementgroup_join 에 참여한 노드는 이름이나 ip가 같으면 삭제 후 등록 불가3 nodes 구성시 3번째 node의 status 가 i 로 표시됨, 복제는 잘됨

DDL Replication복제되지 않거나, 금지, 제약이 있는 DDL이 있음예) Alter Table 구문 이용시 default 값 사용 불가

Multi-master conflicts분산 트랜잭션 매니저, 락 매니저를 지원하지 않음예) Primary Key or Unique 충돌시 last-update-wins 적용

Global Sequences오직 INCREMENT 1 만 지원, minvalue, maxvalue, cache 등 미지원타입이 전부 bigserial(bigint)로 됨, 테이블 타입도 동일예) create sequence test_seq USING bdr

Repliction Setsbdr에 의해 만들어 지고 모든 테이블은 기본적으로 여기에 속함table 단위, insert, update, delete 에 대한 복사 여부 설정가능

Page 22: Pgday bdr 천정대

12 주의 해야 할 점

22

DataBase시퀀스

1, 2, 3, 4....

Master1

DataBase시퀀스

100001, 100002, 100003..

Master2

1 홍길동 OTP 인증 2016.10.15 15:33:30.111111111

100001 허준 OTP 검증 2016.10.15 15:33:31.111111111

100002 gt1000 OTP 생성 2016.10.15 15:33:32.111111111

2 장금이 OTP 생성 2016.10.15 15:33:33.111111111

ALTER SEQUENCE seq_user_group START WITH 30;

ALTER TABLE user ADD COLUMN otp_code varchar(8) DEFAULT ‘00000000' NOT NULL;

사용불가

Page 23: Pgday bdr 천정대

13 뭣이 중헌디????

Oracle과 같은 기능은 불가능

ALTER SEQUENCE xxx START WITH Sequence 대신 max + 1 사용 관리자 UI 화면 또는 Script를 통한 sequence 값 증가

애플리케이션 보정을 통한 보완

Transaction Conflict에 따른 데이터 정합성 중요 테이블의 경우 관리자 UI 화면에서 테이블

데이터 수를 Master, Slave 상호 비교하여 보정

23

Page 24: Pgday bdr 천정대

13 뭣이 중헌디????

24

>> 시퀀스 보정

xx_seq시퀀스명

적용

솔루션 관리자 UI 화면

>> 테이블 동기화 확인 및 보정

서버 IP 테이블명 서버 IP 테이블명

100.1.1.1 user_info(10) 100.1.1.2 user_info(12)

100.1.1.1 user_group(27) 100.1.1.2 user_group(27)

100.1.1.1 policy(3) 100.1.1.2 policy(3)

보정

보정

보정

클릭시 for 문으로SELECT nextval(‘xx_seq')100번 실행하여Sequence를 증가 시킴

100시퀀스 증가값

Page 25: Pgday bdr 천정대

14 좋은 놈, 공부할 놈, 아쉬운 놈

Active, Standby 이중화 전환이 용이서버 구성은 Active, Standby. Database 구성은 Master, Master 로 구성시네트웍 불안정으로 인한 불규칙적인 장애 발생시 지연시간 없는Active, Standby 서버간 전환이 가능 (비권장)

Active, Active, Active… N 구성시Load Balancing, 세션 클러스트링 없는 IP 개별 접속 N개 Active 서버 구성이 용이

Selective Repliction선택적 복제가 가능(이중화 테이블 복제하지 않음)

25

좋은 놈

Server1 Server2

VIP

Active Standby

heartbeat network

Page 26: Pgday bdr 천정대

14 좋은 놈, 공부할 놈, 아쉬운 놈

서버 IP 변경시가능 여부를 테스트 해 보지 않았음

장애로 인한 서버 교체시master 서버 하드 장애 등의 이유로 교체가 필요한 경우,중단 후 복구 기능이 필요.장기간 방치시 동기화 시도 관련 오류 문제가 발생할 수도있음

* There is no complex election of a new master if a node goes down or networkproblems arise. There is no wait for failover. Each node is always a master and always directly writeable.

26

공부할 놈(운영 업무)

Page 27: Pgday bdr 천정대

14 좋은 놈, 공부할 놈, 아쉬운 놈

퇴사

국내외 구축 사례 비공개

매뉴얼 빈약

2ndQuadrant 계약 요구

27

DBA가 아닌 개발자로서의 전문성 부족

타 솔루션 지식 부족, MySQL 과의 장,단점

Oracle 수준을 요구함. 중, 소 기업 타켓

같이 번역하고 테스트 할 사람이 필요

아쉬운 놈

Page 28: Pgday bdr 천정대

15 최근소식

PostgreSQL 9.6 에는 Global Sequences문제를 다른 방식으로 접근할 예정

http://blog.2ndquadrant.com/bdr-is-coming-to-postgresql-9-6/

The years of effort we at 2ndQuadrant have put into getting the series of patches from BDR into PostgreSQL core have paid off. As of PostgreSQL 9.6, the only major patch that Postgres-BDR on 9.4 has that PostgreSQL core doesn’t, is the sequence access method patch that powers global sequences.

This means that Postgres-BDR on 9.6 will not support global sequences, at least not the same way they exist in 9.4. The 9.6 version will incorporate a different approach to handling sequences on distributed systems, and in the process address some issues that arose when using global sequences in production.

28