Maxscale 은 mariadb 에서 사용하는 이중화 툴로, 분산된 DB 서버를 관리하는 일종의 확장팩같은 느낌이다. 주된 기능은 DB 쿼리 IO 를 로드밸런싱하는 기능으로, 한 DB 에 과한 부하가 가해지는 것을 막는 것을 목적으로 한다.
master, slave 동기화
우선 maxscale 을 진행하기 전에 DB 끼리 master-slave 로 동기화를 시켜야 한다. master-slave 구조를 간단히 설명하자면 master 는 DB 의 주체이며, 모든 변경이 여기서부터 이루어진다고 가정하고 본인의 DB 를 slave 에 복제하는 것을 autocommit 해준다. 그리고 master 가 다운될 경우 slave 가 master 역할을 하도록 수행하는 기능이 있다. 작동이 종료된 master 는 복구가 된다면 다시 그 위치를 회복한다. 동기화의 순서는 1. DB 사용 가능한 IP를 zero-binding 으로 바꿔 모든 노드에서 접속이 가능하도록 한다. 2. 복제를 위한 사용자를 master 에서 권한을 부여해 생성해주고, 현재 master 의 DB 를 mariabackup --backup, --prepare 로 복제해준다. 3. slave 쪽에서 IP 를 zero-binding 으로 설정해주고 DB 복제한 파일을 설치해준다. 4. slave 에서 master 를 설정해주고 start slave 를 설정해준다.
maxscale 설치
이제 DB 설정이 끝났으면 그 DB 에 쿼리를 load balancing 해줄 maxscale 을 설정해준다. maxscale 도 기능이 다양하고 플래그가 많고, 이 maxscale 을 실행하는 주체가 되는 계정도 mariadb 에 추가를 해줘야 한다. maxscale 을 설치하는 순서는 다음과 같다. 1. maxscale 을 설치한다. 2. /etc/maxscale.cnf 에서 master, slave 서버와 주요한 정보(read-write split, port, user)를 설정해준다. 3. maxscale 계정을 만들어주고 권한을 부여해준다. 4. maxscale 을 재시작하여 변경을 적용시킨다. 여기서 read-write split 플래그를 켜주게 된다면 위 그림과 같이 write 쿼리는 master 로만, read 쿼리는 slave 로만 통신하게 된다.
테스트
생각한대로 잘 가는지 테스트를 해봐야 한다. 크게 두가지 기능을 점검해 봐야 하는데 1. DB 동기화가 잘 되는지 테스트, 2. 그리고 read-write split 이 잘 되는지 테스트를 해봐야 한다. 1번은 그냥 master 에 테이블 하나 만들어 주고 slave 에 그 테이블이 잘 추가가 되었는지 확인하면 된다. 2번은 insert 쿼리와 select 쿼리를 maxscale IP:PORT 로 쏴주고 그 쿼리가 master 에 도착했는지, slave 에 도착했는지 로그를 확인하면 된다.
// insert
mysql -umaxscale -p -P4009 -h 172.16.3.70 -e "use test; insert into host values (@@hostname);"
// select
mysql -umaxscale -p -P4009 -h 172.16.3.70 -e "select @@hostname;"
그러면은 로드밸런싱의 기초 maxscale 을 쓸 수 있다. 요즘은 aws 가 auto scaling, load balancing 등을 다 해줘서 이런거랑 안친할수도 있지만 기본은 알아두면 좋당 ㅎㅎ
'CS > DB' 카테고리의 다른 글
[DB] maxscale 전환시 read/write 스트레스 테스트 (0) | 2024.10.28 |
---|---|
[캐글] regression 시각화 (kaggle store-sales-time-series-forecasting_3) (0) | 2022.10.23 |
[캐글] 중복된 데이터 병합하기 (kaggle store-sales-time-series-forecasting_2) (0) | 2022.10.23 |
[캐글] 파이썬 CSV 데이터 확인하는 2가지 방법 (kaggle store-sales-time-series-forecasting_1) (0) | 2022.10.19 |
[MySQL] First normalization, 다대다, 연결 테이블 (0) | 2022.02.05 |