Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
비즈니스 연속성을 위한
Postgres 고가용성 구성 사례 및
트러블슈팅
다음카카오 데이터플랫폼파트 | 엄준식
2
PPAS(Postgres Plus Advanced Server) 도입 배경
3
Hierarchy Query 지원
DB Link 지원
Optimizer Hint 지원
Postgres Enterprise Manager에 의한 모니터링
xDB Replication에 의한 데이터 복제 및 이관
DRITA(Dynamic Runtime Instrumentation Tools Architecture)
Daum 클라우드 서비스
4
클라우드 서비스 서버 구성도
5
마스터 DB
분산 DB
pgpool server
클라우드 서비스 마스터 DB 이중화
6분산 DB
SELECT : 40%
SELECT : 40%
DML : 100%SELECT : 20%
pgpool server 마스터 DB
클라우드 서비스 분산 DB 이중화
7
마스터 DB
분산 DB
pgpool server
Master DB Node Slave DB Node
Witness Node
EDB Failover Manager 개요
8
Agent
Agent Agent
ZAP 서비스
9
Agent Agent
VIP
Agent Agent
VIP
ZAP 서비스 시스템 구성도
10
Agent
Agent
Postgres Enterprise Manager 개요
11
Postgres Enterprise Manager Client
12
PEM Alert 설정
PEM에서 정의된 Alert 항목 Agent Level : Agents Down, Server Down
Server Level : CPU Utilization, Disk Consumption %
Cluster Level : Long-running Autovacumms, Long-running Queries
DB Level : Long-running Transactions, Total connections as % of MC
Schema Level : Table Size, Index Size, Average Table Bloat
Table Level : Dead Tuples %, Last Analyze, Last AutoVacuum
사용자 정의 Alert 항목 INFO
WARNING
ALERT
CRITICAL
13
PPAS Server
PPAS Server
PPAS Server
PEM을 이용한 Monitoring
14
PEM Agent
PEM Agent
PEM Agent
MonitoringSystem
PEM Server
Online Table Reorg (by pg_reorg)
15
Trigger
MergeDML
(Insert, Update, Delete)
Row Copy
Old TableNew Table
Intermediate Log Table
Online Table Reorg (by pg_reorg)
16
Trigger
DML(Insert, Update, Delete)
Row Copy
Old TableNew Table
Merge
Intermediate Log Table
Online Table Reorg (by pg_reorg)
17
테이블 단편화에 따른 온라인 테이블 재구성
작업절차 테이블 크기 확인 (테이블 재구성 전)
AUTOVACUUM = OFF 로 변경
테이블 Reorg 작업전 Lock Wait 확인
테이블 Reorg 실행
테이블 VACUUM
AUTOVACUUM = ON 로 변경
테이블 크기 확인 (테이블 재구성 후)
LOCK_FILE LOCK_FOLDER NAME_CHECKER LOCK_INFO LOCK_STATUS
Before After Before After Before After Before After Before After
1184MB 8960KB 5117MB 38MB 810MB 3960KB 1586MB 1036MB 4682MB 1689MB
pgpool 이슈 및 최적화
18
pgpool 서버의 TIME_WAIT 이슈 일반적인 JDBC 커넥션의 startup packet과 DB Link packet의 길이가달라 정상적으로 커넥션 풀링이 되지 않는 이슈
패킷 비교 로직을 삭제하여 수정
주석으로 시작하는 select 문의 경우 분산이 안 되는 이슈 정상적인 SELECT 문으로 인식되지 못해 분산되지 못함
주석 부분을 SKIP하도록 수정
Alias 없는 서브쿼리의 경우 쿼리 분산이 안되는 이슈 pgpool의 파서 부분에서 alias 없는 subquery의 경우 에러를 발생시키지 않도록 수정
PPAS 메모리 사용량 증가 이슈 pgpool의 child_max_connections 값 수정
xDB Replication Server
xDB Replication을 이용한 데이터 복제
19
Source DB Target DB
PublicationServer
SubscriptionServer
xDB Replication을 이용한 데이터 복제
20
쿼리가 제약조건등의 위반으로 실행되지 못하는 경우 해당 제약조건을 삭제하고 쿼리를 실행한 후 제약조건을 재생성
Trigger 방식에 의한 데이터 동기화 Source DB에 변경 내역을 저장할 테이블을 생성하고 Trigger를 통해 변경 내역을 저장
서비스 쿼리에 의한 DML외에 동기화를 위한 추가적인 DML 발생
데이터 동기화에 대한 GAP 고려 주기적으로 Source DB의 변경 내역이 Target DB에 적용
동기화 주기를 짧게 설정하면 Source DB의 부하가 증가하고 길게 설정하면 데이터 동기화 GAP이 커짐
적용 완료한 데이터에 대한 Clean-up 부하 존재 Source DB쪽 clean-up 작업을 disable 시키는 것이 가능