DB/MariaDB

Maxscale?

Dev.Congsik 2025. 6. 12. 15:27
728x90

 

MariaDB MaxScale은 MariaDB용 고가용성 프록시이자 로드 밸런서입니다. 주요 기능은 다음과 같습니다:

  • Read/Write 분리: 클라이언트의 요청을 자동으로 Master 또는 Slave로 분산.
  • Failover / Switchover: Master 장애 시 자동으로 Slave를 Master로 승격.
  • Query Routing: 쿼리 유형에 따라 적절한 백엔드 서버로 라우팅.
  • 보안 및 감사 기능, 쿼리 캐싱, GUI 및 REST API 관리 기능 제공.

 

🛠️ MaxScale 구축 및 설정 과정

1. MariaDB Master-Slave 구성 (GTID 기반 권장)

  • MariaDB 10.6 기준.
  • GTID 복제를 위해 다음 설정이 필요합니다.

📌 Master 

my.cnf 수정

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
max_connections=2000
server-id=1
log_bin=mysql-bin
log_slave_updates=1
binlog_format=ROW

#gtid 복제 설정
gtid_strict_mode=1​

 
 

📌 Slave 

my.cnf 수정

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
max_connections=2000
server-id=2
relay-log = relay-log
read_only = 1
log-bin=mysql-bin
binlog_format=ROW
log_slave_updates=1

#gtid 설정
gtid_strict_mode=1
 
CHANGE MASTER TO 
 MASTER_HOST='[마스터 ip]', 
 MASTER_PORT=[마스터 포트], 
 MASTER_USER='[복제 사용자]', 
 MASTER_PASSWORD='[복제 사용자 패스워드]', 
 MASTER_USE_GTID=slave_pos; 
 
START SLAVE;

 

2. MaxScale 설치

Ubuntu 기준:

sudo apt update 
sudo apt install maxscale
 

3. MariaDB에 사용자 추가 (master, slave)

#maxscale 계정 생성
CREATE USER 'maxscale'@'%' IDENTIFIED BY 'maxscale'; 

#maxscale 계정 권한 부여
GRANT SELECT, SHOW DATABASES, REPLICATION SLAVE, BINLOG MONITOR, SLAVE MONITOR ON *.* TO 'maxscale'@'%';
 
-> 이미 MariaDB가 Master/slave 구성이라면 master DB에만 추가해도 slave에 동기화된다.
 
 

4. MaxScale 설정 파일 /etc/maxscale.cnf

[maxscale]
threads=auto

#http 연결
admin_secure_gui=false

#외부 접속 허용
admin_host=0.0.0.0
admin_port=8989


[master] 
type=server 
address=[master ip] 
port=[master port]
protocol=MariaDBBackend 


[slave] 
type=server 
address=[master ip] 
port=[master port]
protocol=MariaDBBackend 


[MariaDB-Monitor] 
type=monitor 
module=mariadbmon 
servers=master,slave 
user=maxscale 
password=maxscale 
monitor_interval=2s

#auto_ 옵션은 gtid 복제 설정해야 사용가능
auto_failover=true 
auto_rejoin=true 


[Read-Write-Service]
type=service
router=readwritesplit
servers=master,slave
user=maxscale
password=maxscale


[Read-Only-Service]
type=service
router=readconnroute
servers=slave
user=maxscale
password=maxscale
router_options=slave


[Read-Write-Listener] 
type=listener 
service=Read-Write-Service
port=4006 


[Read-Only-Listener]
type=listener 
service=Read-Only-Service
port=4008
 

🌐 GUI 및 REST API 설정

📌 사용자 설정

maxctrl alter user admin password='admin'
//admin 계정 설정 이후 http://서버IP:8989 에 admin/admin으로 접속

maxctrl create user abcd password='abcd';
//일반사용자 생성 후 접속 가능

GUI에 접속되나 세션/커넥션 수가 0이라면, 실제 클라이언트에서 4006 (Read/Write) 혹은 4008 (Read-Only) 포트로 접속해야 반영됩니다.

 


✅ 상태 확인 명령어

# 모든 서버 상태 보기 
maxctrl list servers 

# 모니터 상태
maxctrl show monitor MariaDB-Monitor 

# 서비스 확인 
maxctrl list services 

# 사용자 목록 (인증 필요) 
maxctrl list users -u admin -p admin

📦 Docker 컨테이너 로그 보기

docker logs <컨테이너 ID 또는 이름>
 

⚠️ 참고 및 주의사항

  • gtid_strict_mode=1 없이는 MaxScale에서 GTID 복제 사용 불가로 인식 → Failover 작동 안 함
  • MaxScale 24.x 버전부터 SLAVE MONITOR 권한 필요 (SHOW SLAVE STATUS 용)
  • GUI는 admin_secure_gui=false 없이는 HTTPS 미구성 시 접속 불가
  • MaxScale는 DB에 클라이언트가 실제로 연결해야 커넥션 수를 반영함

🧪 테스트

# Read-Write로 접속 
mysql -h [ip] -P 4006 -u [mysql 유저명] -p [mysql 유저 패스워드]

# Read-Only로 접속 
mysql -h [ip] -P 4008 -u [mysql 유저명] -p [mysql 유저 패스워드]
728x90