서비스 운영시 MySQL 서버를 여러대로 구성해야 하는 경우가 있습니다.
MHA 등을 사용하여 이중화 구성을 하는데 이처럼 Application Server 수가 증가할수록 MySQL 서버와 맺게되는 커넥션 수가 급격하게 늘어나게됩니다.
ex) MySQL 서버 20대, Application 서버 100대 -> 20*100 = 2000 커넥션
급격하게 늘어나는 커넥션으로 인해 생길 이슈를 피하기 위해 중간에 Middle ware 개념으로 프록시 역할을 수행해주는 솔루션이 ProxySQL 입니다.
커넥션의 효율적인 관리, 라우팅 등 여러 기능을 수행합니다.
ProxySQL 서버 1대와 MySQL 서버 여러대(Replication)를 구성하는 방법을 설명합니다.
서버 구성
- ProxySQL 1대
- MySQL 3대
- (mysql-master)
- (mysql-slave-01)
- (mysql-slave-02)
wget https://github.com/sysown/proxysql/releases/download/v2.2.0/proxysql_2.2.0-ubuntu20_amd64.deb \
&& sudo dpkg -i proxysql_2.2.0-ubuntu20_amd64.deb
# 설치 완료 후 버전 확인
proxysql --version
# 실행
sudo service proxysql start
# 종료 방법
sudo service proxysql stop
mysql -uadmin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '
# 모니터링 계정 설정 (ProxySQL에서 MySQL로 원격 접속할 수 있는 계정)
UPDATE global_variables SET variable_value = 'ubuntu' WHERE variable_name = 'mysql-monitor_username';
UPDATE global_variables SET variable_value = '123456' WHERE variable_name = 'mysql-monitor_password';
# 설정 확인
sqlcopy
SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';
# 설정 적용
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
# MySQL 서버 정보 추가
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '192.168.56.23', 3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '192.168.56.24', 3306);
INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '192.168.56.25', 3306);
# MySQL 서버 추가 확인
SELECT * FROM mysql_servers;
# MySQL 서버 추가 반영
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 10;
# 계정 추가 (클라이언트에서 ProxySQL로 원격 접속할 수 있는 계정)
INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('ubuntu', '123456', 1);
# 계정 반영
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
#아래 명령어로 여러번 조회해보면 접속된 MySQL 서버 호스트명이 계속 바뀌는 것을 확인할 수 있다.
mysql -uubuntu -p123456 -h 127.0.0.1 -P6033 -e "SELECT @@hostname";
# 설정 백업
SELECT CONFIG INTO OUTFILE /tmp/backup.cfg;
SAVE CONFIG TO FILE /tmp/backup.cfg;
# /etc/proxysql.cnf 내용 조회
SELECT CONFIG FILE;