ProxySQL

snooby·2022년 8월 24일
1

🗄 Server

목록 보기
1/1
post-thumbnail

ProxySQL

서비스 운영시 MySQL 서버를 여러대로 구성해야 하는 경우가 있습니다.
MHA 등을 사용하여 이중화 구성을 하는데 이처럼 Application Server 수가 증가할수록 MySQL 서버와 맺게되는 커넥션 수가 급격하게 늘어나게됩니다.
ex) MySQL 서버 20대, Application 서버 100대 -> 20*100 = 2000 커넥션

급격하게 늘어나는 커넥션으로 인해 생길 이슈를 피하기 위해 중간에 Middle ware 개념으로 프록시 역할을 수행해주는 솔루션이 ProxySQL 입니다.
커넥션의 효율적인 관리, 라우팅 등 여러 기능을 수행합니다.

ProxySQL 설치

서버 구성 정보

ProxySQL 서버 1대와 MySQL 서버 여러대(Replication)를 구성하는 방법을 설명합니다.

서버 구성

  • ProxySQL 1대
  • MySQL 3대
    - (mysql-master)
    - (mysql-slave-01)
    - (mysql-slave-02)

ProxySQL 설치하기

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

ProxySQL 실행

# 실행
sudo service proxysql start
# 종료 방법 
sudo service proxysql stop

ProxySQL Admin Interface 접속

mysql -uadmin -padmin -h 127.0.0.1 -P6032 --prompt='Admin> '

MySQL 서버 모니터링을 위한 계정 설정

# 모니터링 계정 설정 (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 서버 연결하기

# 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;

MySQL 서버 연결 성공 확인

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;
profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글