SMALL
지난 게시글에서는 DB서버를 Master - Slave 구조로 구성을 하였었습니다.
[DB] MariaDB 이중화 구성 설정 방법과 분산처리 (Replication Master/Slave) (tistory.com)
이어서 이 구조는
Master DB 서버에서 WRITE/UPDATE 작업이 일어나게 되면
Slave DB 서버가 비동기적으로 Master 서버의 변경사항을 감지해서
데이터를 똑같이 만드는 관계가 구축된 것을 말합니다.
이번 게시글에서는 MariaDB에서 지원하는
MaxScale이라는 DB Proxy를 이용해
WRITE/READ 처리는 Master 서버로,
READ 처리는 Slave 서버로만 요청을 보내는 서버를
추가로 구성해볼 것입니다.
참고 사이트 1 : 설치 가이드
실습한 환경은 AWS EC2의 CentOS 7 리눅스 서버입니다.
먼저 MariaDB 관련 프로그램을 설치합니다.
# 설치 명령어 curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash sudo yum install maxscale MariaDB-client # 설치 완료 및 포트 확인 rpm -q maxscale MariaDB-client sudo netstat -antp |
MaxScale 서버에서 Master-Slave서버로 접속해줄 계정을
Master DB에서 생성 및 권한부여를 해줍니다.
CREATE USER 'MAX'@'%' IDENTIFIED BY 'password'; GRANT SELECT ON mysql.user TO 'MAX'@'%'; GRANT SELECT ON mysql.db TO 'MAX'@'%'; GRANT SELECT ON mysql.tables_priv TO 'MAX'@'%'; GRANT SELECT ON mysql.columns_priv TO 'MAX'@'%'; GRANT SELECT ON mysql.procs_priv TO 'MAX'@'%'; GRANT SELECT ON mysql.proxies_priv TO 'MAX'@'%'; GRANT SELECT ON mysql.roles_mapping TO 'MAX'@'%'; GRANT SHOW DATABASES ON *.* TO 'MAX'@'%'; |
MasterDB에서 MAX 계정 생성 및 권한 부여가 완료되었다면
MaxScale 서버에서 Master-Slave 서버의 MAX 계정으로의 접속이 되는지 시도해봅니다.
# Master mysql -u MAX -p -h 172.31.000.000 -P 3306 # Slave mysql -u MAX -p -h 172.31.000.000 -P 3306 # MaxScale mysql -u MAX -p -h 172.31.000.000 -P 3306 enter passowrd: [비밀번호 입력] |
이제 MaxScale 서버에서의 Configuration 설정을 할 차례입니다.
문서를 참고하여서 작성하시면 됩니다.
https://mariadb.com/kb/en/mariadb-maxscale-6-readwritesplit/
#MaxScals 환경설정 편집 sudo vi /etc/maxscale.cnf [maxscale] threads=auto admin_host=0.0.0.0 #MaxScale Admin서버를 외부에서도 접속할 수 있게 설정 admin_secure_gui=false #HTTPS 사용 안함 [server1] type=server address=[MASTER SERVER의 내부 IP] port=3306 protocol=MariaDBBackend [server2] type=server address=[SLAVE SERVER의 내부 IP] port=3306 protocol=MariaDBBackend [Replication-Monitor] type=monitor module=mariadbmon servers=server1,server2 user=DEV password=[DEV_PASSWORD] monitor_interval=2000ms [Splitter-Service] type=service router=readwritesplit servers=server1, server2 user=MAX password=[MAX_PASSWORD] slave_selection_criteria=LEAST_CURRENT_OPERATIONS #활성 작업이 가장 적은 슬레이브로 접속을 시도한다. master_accept_reads=true #Master DB도 READ 작업이 실행되게 허용해준다 [Splitter-Listener] type=listener service=Splitter-Service protocol=MariaDBClient port=3306 |
# 저장 후 MaxScale 서비스를 재시작해줍니다. sudo systemctl restart maxscale # 오류 시에는 MaxScale 로그 확인 cat /var/log/maxscale/maxscale.log # MaxScale 상태 확인 명령어 maxctrl list servers maxctrl list services maxctrl list listeners maxctrl show server server1 maxctrl show server server2 |
설정이 완료되었다면 MaxScale 서버로 DB클라이언트에 접속하여 쿼리를 실행해봅니다.
그 후에 각 Master-Slave 서버로 DEV 계정으로 접속하여 MaxScale 분산처리가 잘 적용되었는지 확인해봅니다.
-- 현재 접속된 호스트의 주소 SELECT @@HOSTNAME; -- DB계정별 명령어 사용 횟수 조회 허용하기 -- 사용 후에는 GLOBAL USERSTAT = 0 으로 되돌릴 것. SET GLOBAL USERSTAT = 1; -- MAX 계정의 SELECT, INSERT 등의 쿼리 사용량을 확인해봅니다. SELECT user, rows_read, rows_inserted, select_commands, update_commands FROM INFORMATION_SCHEMA.USER_STATISTICS; |
실습 참고 영상
[Database] CentOS 8에 MaxScale 설치하기 - YouTube
BIG
'DataBase > Maria DB' 카테고리의 다른 글
[DB] MariaDB DeadLock 문제 해결 (0) | 2023.02.17 |
---|---|
[DB/AWS] MariaDB Mariabackup 복원하기 (0) | 2023.02.09 |
[DB/AWS] MariaDB Mariabackup을 이용한 백업 스케쥴 설정 2 (0) | 2023.02.09 |
[DB/AWS] MariaDB Mariabackup을 이용한 백업 스케쥴 설정 (0) | 2023.02.09 |
[DB] Database Lock? (0) | 2023.02.08 |