MySQL, MariaDB

[MySQL] ProxySQL 연결이 실패할 때 확인해야 할 기본 체크리스트

SungWookKang 2023. 10. 11. 10:44
반응형

[MySQL] ProxySQL 연결이 실패할 때 확인해야 할 기본 체크리스트

 

l  Version : ProxySQL

 

MySQL서버를 여러대로 구성해야하는 경우 (, Replication, Sharding ) 어플리케이션 수에 따라 MySQL 서버와 맺게 되는 커넥션수가 급격하게 늘어난다. 예를들어 MySQL 서버가 30, 어플리케이션 서버가 200대이고, 각 서버별로 커넥션을 10개씩 유지한다면 30 * 200 * 10 = 60000 커넥션이 발생한다. 이런 이슈를 피하기 위해 중간에 미들웨어 개념으로 프록시 역할을 해주는 것이 ProxySQL이다. ProxySQL은 효율적인 커넥션 관리뿐만 아니라 라우팅 기능 등 여러 기능을 제공한다.

l  ProxySQL 이란 무엇인가 : https://sungwookkang.com/entry/ProxySQL-%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

이번 포스트는 ProxySQL을 운영할 때, 어플리케이션에서 DB 커넥션 관련 오류가 발생할 때 확인해야 하는 체크리스트를 정리하였다. 당연한 말이지만, 막상 트러블이 발생했을 때 어디서부터 확인해야 될지 우왕좌왕 하는 경우가 많다. 해당 순서를 참고하여 빠르게 확인할 수 있도록 한다.

 

1.     ProxySQL 런타임 상태 확인

ProxySQL의 프로세스가 정상적으로 활성화된 상태라도 ProxySQLMySQL과 연결이 정상적인지 또는 클러스터에서 제외되지는 않았는지 런타임 상태를 확인한다.

select * from runtime_mysql_servers;

 

 

status 항목이 SHUNNED이면 현재 해당 서버와 연결이 끊어진 것으로, 원인을 확인하여 ONLINE상태가 되도록 한다.

 

2.     Ping log를 확인하여, ProxySQLMySQL의 연결 상태를 확인한다.

SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 10;

 

위의 핑 로그에서는 패스워드 관련으로 핑 실패가 발생한 것을 확인할 수 있다.

 

3.     커넥션 로그를 확인하여 MySQL서버와 연결 상태를 확인한다.

커넥션 로그를 확인하여, 현재 등록된 타겟 서버(노드라고도 부름, mysql_servers 테이블 목록)와의 커넥션 상태를 확인한다.

SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;

 

 

connect_error 항목이 NULL이 아닐 경우 ProxySQLMySQL 연결이 정상적이지 않은 것으로 원인을 찾아 해결할 수 있도록 한다.

 

4.     ProxySQL 오류 로그확인

ProxySQL에 발생하는 각종 로그는 파일로 기록된다. 로그 파일의 위치는 proxysql.cnf에서 확인할 수 있다.

cat /etc/proxysql.cnf

 

 

오류 로그를 확인하여 ProxySQL에서 발생하는 다양한 로그를 확인한다.

tail -10 /var/log/proxysql/proxysql-error.log

 

 

5.     외부 접근용 계정 확인

ProxySQL을 사용할 경우, 외부 어플리케이션은 MySQL이 아닌 ProxySQL로 연결하게 된다. 이때 외부 어플리케이션이 사용할 ID/PWD가 생성되어 있는지 확인한다.

select * from mysql_users;

 

 

6.     모니터링 계정 확인

MySQL 서버에서 ProxySQL이 사용할 모니터링 계정이 정상적으로 등록되어 있는지 확인한다. ProxySQL에서 모니터링으로 사용할 계정은 아래 명령으로 확인할 수 있다. 모니터링이 실패하면 ProxySQL에서는 서버와 통신이상으로 노드에서 제외한다.

SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';

 

 

 

시스템을 운영하다 보면 다양한 오류 환경을 만나게 되는데, 이때 케이스를 해결하는 방법보다, 원인을 파악하는데 오랜 시간이 걸리는 경우가 대부분이다. 케이스에 따른 체크리스트를 잘 만들어 놓으면 긴급 상황에서 많은 도움이 된다.

 

 

 

2023-10-11 / Sungwook Kang / http://sungwookkang.com

 

ProxySQL, 프록시SQL, 트러블슈팅,ProxySQL 연결오류

반응형