일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- CKA 기출문제
- kotlin coroutine
- Linux
- minikube
- Pinpoint
- PETERICA
- AWS EKS
- kotlin querydsl
- APM
- Spring
- 티스토리챌린지
- Java
- kotlin
- Elasticsearch
- 오블완
- 정보처리기사실기 기출문제
- AI
- Kubernetes
- kotlin spring
- 정보처리기사 실기 기출문제
- 코틀린 코루틴의 정석
- IntelliJ
- 기록으로 실력을 쌓자
- CKA
- MySQL
- 공부
- mysql 튜닝
- 정보처리기사 실기
- aws
- CloudWatch
- Today
- Total
피터의 개발이야기
ProxySQL이란 본문
ㅁ 들어가며
ProxySQL은 효율적으로 커넥션을 관리하기 위한 미들웨어이다. 마이크로서비스 아키텍쳐로 인해 증가하는 어플리케이션에 대응하기 위해 MySQL서버를 여러대 구성해야하겠지만, ProxySQL을 통해 급증하는 커넥션을 감당하고 라우팅 하는 기능을 가지고 있다. 이번 글에서는 ProxySQL이 무엇인지 정리해 보았다.
ㅁ ProxySQL이란?
ProxySQL은 쿼리 라우팅 기능을 제공하는 MySQL 및 MySQL 포크(Percona, Mariadb)의 고성능, 고가용성 오픈소스 프록시이다.
ㅁ 사용이유
서비스 운영시 MSA구조로 운영하다보면 어플리케이션의 수가 증가한다. 이렇게 증가할수록 MySQL가 감당해야하는 커넥션수가 증가하여 여러 MySQL서버를 구성해야하는 경우가 있다. 예를들어 MySQL가 3대, 어플리케이션이 200개이고, 각 어플마다 커넥션을 10개씩 한다면 3 * 200 * 10 = 6000커넥션이 발생한다. DB의 커넥션은 제한이 있어 중간에 미들웨어로 프록시 역할하는 ProxySQL가 필요하다. ProxySQL은 효율적인 커넥션 관리뿐만 아니라 라우팅 기능 등 여러 기능을 제공한다.
웹 아키텍처에서 3-tier의 구성과 비슷한 역할을 한다. WAS는 무거운 작업을 수행하기 적합하지만 수 많은 클라이언트들의 요청을 처리할 경우 지연이 발생한다. 이를 보안하기 위해 WebServer가 중간 역할을 하여 웹의 응답속도를 향상시켰다.
ㅁ 주요 기능
ㅇ 쿼리 라우팅
ProxySQL은 외부에서 들어오는 연결을 받아 설정된 백엔드 데이터베이스 서버로 쿼리를 중계한다.
ㅇ 로드 밸런싱
여러 데이터베이스 서버에 효율적으로 커넥션을 분배한다.
ㅇ 자동 장애 조치(Auto Failover)
백엔드 서버에 주기적으로 헬스 체크를 수행하고, 서버 장애 시 자동으로 대체 서버로 전환한다.
ㅇ 쿼리 캐싱
자주 사용되는 쿼리 결과를 캐시하여 성능을 향상시킨다.
ㅇ 다운타임 없는 설정 변경
서비스 중단 없이 설정을 변경할 수 있다.
ㅁ 구조
ㅇ ProxySQL은 4개의 주요 계층으로 구성된다.
- Runtime: 요청을 처리하는 스레드의 메모리 내 데이터 구조
- Memory: 설정 값이 상주하는 in-memory 데이터베이스
- Disk: 메모리 내 구성을 영구 저장하기 위한 계층
- Config file: 설정 값을 저장하는 파일
ㅁ 사용 사례
ㅇ 대규모 읽기 복제(read replication) 환경에서 효율적인 커넥션 관리
ㅇ 많은 수의 외부 연결을 효과적으로 풀링해야 하는 경우
ㅇ Master/Slave 구조의 데이터베이스 환경에서 읽기/쓰기 분리가 필요한 경우
- Spring Data JPA를 사용할 때 DB의 부하를 분산시키기 위해 @Transactional에 readonly=true 옵션으로 Read Only DB를 사용하고, 아닌 경우 Write DB를 사용하였다.
- 하지만 이런 경우 어떤 DB를 사용할 지 소스상에 일일이 지정해야 한다.
- Spring Data JPA와 ProxySQL의 읽기/쓰기 분리 방법에 차이가 있어
더 자세한 내용은 Spring Data JPA와 ProxySQL의 읽기/쓰기 분리 방법 비교에 작성하였다.
ㅁ설치 및 구성
ProxySQL 설치는 비교적 간단하며, ProxySQL 설치 및 사용 가이드(GitHub 위키)에 자세한 가이드가 제공된다. 이곳에 Docker로 실행하고 proxysql.cnf을 설정하는 방법이 정리되어 있다. 설치 및 구성의 큰 맥락은 다음과 같다.
ㅇ ProxySQL 서비스 시작
ㅇ MySQL 클라이언트를 사용하여 ProxySQL 관리 인터페이스에 접속
ㅇ 백엔드 MySQL 서버 설정
ㅇ 모니터링 계정 설정
ㅇ 쿼리 규칙 설정
ㅇ 사용자 계정 설정
ㅁ 마무리
ProxySQL은 MySQL 환경에서 성능, 가용성, 확장성을 크게 향상시킬 수 있는 강력한 도구이다. 특히 대규모 데이터베이스 환경에서 커넥션 관리와 로드 밸런싱에 탁월한 성능을 보여준다. 백엔드 인프라 고도화 단계에서 꼭 고려해볼 만한 솔루션이라고 생각한다.
ㅁ 함께 보면 좋은 사이트
ㄴ ubuntu환경에서 ProxySQL 서버 1대와 MySQL 서버 여러대(Replication)를 구성하는 방법을 설명
ㅇ ProxySQL을 통한 MySQL 쿼리 라우팅 설정
ㄴ ProxySQL를 도커환경에 구성하였고, proxyql 설정이 자세함.
ㅇ ProxySQL을 사용하면 DB Connection을 줄일 수 있다고?
ㄴ DockerCompose로 구성하여 Connection 관리를 테스트 함.
'Database' 카테고리의 다른 글
Spring Data JPA와 ProxySQL의 읽기/쓰기 분리 방법 비교 (0) | 2024.10.09 |
---|---|
[Database] 정규화(Normalizatio)란? (0) | 2024.02.24 |
[DBeaver] 필수 단축키 (0) | 2024.02.08 |
[DB] SQL 연습을 위한 실습 사이트 (1) | 2023.07.29 |
[QUERYDSL] 수십억건에서 QUERYDSL 사용하기, 이동욱님 영상을 보고서... (0) | 2023.07.02 |