Database/Maria,Mysql

인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL 실습 (2)

bluebamus 2022. 1. 11.

2022.01.09 - [Database/Maria,Mysql] - 인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL을 이용한 Proxy Layer 구축 (1)

 

인프런 - 따라하며 배우는 MySQL on Docker 학습 정리 - ProxySQL을 이용한 Proxy Layer 구축 (1)

* 참고하면 좋은 자료를 먼저 첨부함 https://www.youtube.com/watch?v=Mzks0isSqMM 1. MySQL Load Balancers가 필요한 이유 1) MySQL Load Balancers의 정의 - 종류 : MaxScale, ProxySQL, HAProxy, MySQL Router..

devspoon.tistory.com

* 아래와 같은 클러스트 구조에서 실습한다.

db001 master 클러스트

 

 

1. Prxyo Layer 구성

    1) 테스트 환경 구성

        - 테스트 데이터베이스 생성

        - 어플리케이션에서 사용할 user 생성

        - proxysql용 모니터링 user 생성

 

   2) 사용자 생성

        - db001

sudo docker exec -it -uroot db001 bash

mysql -uroot -p

mysql> create database testdb default character set utf8;

mysql> create user appuser@'%' identified by 'apppass';

mysql> grant select, insert, update, delete on testdb.* to appuser@'%';

mysql> create user 'monitor'@'%' identified by 'monitor';

mysql> grant REPLICATION CLIENT on *.* to 'monitor'@'%';

mysql> flush privileges;

 

   3) 테스트 환경 구성

        - proxysql 테이블 정보

테이블 정보

 

        - proxysql(서버정보)

mysql -h127.0.0.1 -P16032 -uradmin -pradmin --prompt "ProxySQL Admin>"

ProxySQL Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'db001', 3306);

ProxySQL Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, 'db001', 3306);

ProxySQL Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (20, 'db002', 3306);

ProxySQL Admin> INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'db003', 3306);

ProxySQL Admin> INSERT INTO mysql_replication_hostgroups VALUES (10,20,'read_only','');

ProxySQL Admin> LOAD MYSQL SERVERS TO RUNTIME;

ProxySQL Admin> SAVE MYSQL SERVERS TO DISK;

mysql_servers 정보

 

        - proxysql(user 정보)

ProxySQL Admin> INSERT INTO mysql_users(username, password, default_hostgroup, transaction_persistent) VALUES ('appuser','apppass',10,0);

ProxySQL Admin> LOAD MYSQL USERS TO RUNTIME;

ProxySQL Admin> SAVE MYSQL USERS TO DISK;

mysql_users 정보

 

        - proxysql(쿼리 룰) : 어플리케이션에서 받은 쿼리를 분기시켜줄 룰 선언

ProxySQL Admin> INSERT INTO mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup) VALUES (1,1,'^SELECT.*FOR UPDATE$',10);

ProxySQL Admin> INSERT INTO mysql_query_rules(rule_id, active, match_pattern, destination_hostgroup) VALUES (2,1,'^SELECT',20);

ProxySQL Admin> LOAD MYSQL QUERY RULES TO RUNTIME;

ProxySQL Admin> SAVE MYSQL QUERY RULES TO DISK;

mysql_query_rules 정보

 

        - 테스트를 위한 스크립트 작성(connect 테스트)

vi app_test_conn.sh

#!/bin/bash
while true;
do
    mysql -uappuser -papppass -h172.31.10.19 -p16033 -N -e "select @@hostname,now()" 2>&1| grep -v "Warning"
    
    sleep 1
done

테스트 화면

댓글