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
'DB > MariaDB' 카테고리의 다른 글
MariaDB Master-Slave 구성 (0) | 2025.05.29 |
---|---|
[Mysql] slow query 발생에 의한 mysqld 프로세스 cpu 사용률 급증 이슈 (1) | 2025.03.12 |
java.sql.SQLTransientConnectionException: hikari-rw-chat - Connection is not available, request timed out after 30000ms 오류 해결방법 (1) | 2024.11.21 |
[MariaDB] Galera cluster flow control (0) | 2024.11.18 |
[MariaDB] InnoDB 성능 모니터링 (0) | 2024.11.08 |