Maxscale 쿼리라우팅

싱하·2025년 1월 23일
0

mariadb

목록 보기
11/11

업무 중 insert와 select, update 모든게 다 날라오는 배치성 쿼리가 생겼다. 근데 이게 꽤 오래돌고 CPU를 잡아먹음.

아...배치성이여도 단순히 한 세션에서 insert, select 이런게 날라오면 알아서 분기를 시켜주나 싶었는데 생각해보니
Maxscale은 너무 단순한 놈이라 그냥 세션에서 있나없나만 보고 세션기준으로 master, slave로 보내주는건가 궁금하여 찾아봄.

관련 파라미터

transaction_replay

  • 트랜잭션 기반 라우팅을 활성화. 트랜잭션 중 발생하는 모든 쿼리를 마스터로 라우팅합니다.
  • 기본값 : false

strict_splits

  • 쿼리 기반 라우팅을 활성화. SELECT는 슬레이브로, INSERT/UPDATE/DELETE는 마스터로 라우팅
  • 기본값 : false
  • 주의 : 읽기 일관성 보장되지 않을 수 있음

라우팅 기준 설정

세션기반

[MyRouter]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale_user
password=maxscale_password

transaction_replay=false  
strict_splits=false
  • 한 세션에 DML, SELECT가 다 오면 master로 보냄. 따로따로면 라우팅.
  • 일관성 보장

트랜잭션 기반

[MyRouter]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale_user
password=maxscale_password

transaction_replay=true
strict_splits=false
  • 모든 트랜잭션은 일단 master, 종료 후 읽기는 slave

쿼리기반

[MyRouter]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale_user
password=maxscale_password

transaction_replay=false
strict_splits=true
  • 각 쿼리 분석하여 master, slave로 라우팅

장단점

결론

  • 읽기 일관성이 중요한 환경에서는 세션 기반 또는 트랜잭션 기반 라우팅을 추천합니다.
  • 읽기 부하 분산이 중요한 경우에는 쿼리 기반 라우팅을 사용할 수 있습니다.

이상입니다.

profile
끄적끄적...

0개의 댓글