ProxySQL 은 서비스에 필요한 설정값을 어디에 저장하고 재사용할까?
l Version : MySQL, ProxySQL
ProxySQL에서 서버를 추가하거나, 사용자를 등록하는 등 설정을 변경하고 적용하려면 관리자 모드 접속을 통해서 필요한 내용을 수정하고, 수정한 내용을 서비스 중단 없이 runtime에 적용할 수 있다. 그리고 서비스 재시작시 기존의 설정을 유지하기 위해서는 현재 설정 값을 데이터베이스 또는 디스크로 저장하여 재사용 할 있다.
아래 그림을 참고하여 설명하면, 일반적으로 관리자 모드에 접속하여 수정하는 부분은 MEMORY영역이다. 그렇기 때문에 관리자에서 수정하였을 경우에는 아직 메모리에서만 적용된 것으로 서비스에 적용되지 않은 상태이다. (아마도 실수가 발생하였을 때 서비스 보호를 위해서 변경 사항을 자동으로 적용시키지 않는 모델로 디자인한 것 같다.) 그리고 LOAD 명령어를 사용하여 RUNTIME영역에 적용을 할 수 있다. RUNTIME에 적용되면 서비스에 반영되어 운영된다. 그리고 메모리 값을 수정하였더라도, 런타임 기준으로 메모리 값 롤백이 필요할 때 런타임의 값을 메모리로 SAVE하여 RUNTIME설정을 메모리로 저장할 수 있다. 이러한 과정을 각 영역별로 LOAD 및 SAVE할 수 있다.
ProxySQL은 서비스를 시작할 때 config 파일을 읽어들여 datadir의 위치를 확인한다. 그 다음에 datadir 경로에 위치한 데이터베이스 파일 또는 디스크 파일이 있는지 여부를 확인하여 해당 파일을 읽어 설정 값으로 사용한다. 일반적인 설치를 진행하였다면 config 파일은 아래 경로에 존재한다.
/etc/proxysql.cnf |
datadir 경로에서 데이터베이스 파일이 발견되면 ProxySQL은 지속형 온디스크 데이터베이스(proxysql.db)를 읽어 메모리 구성을 초기화한다. 따라서 디스크는 메모리에 로드된 다음 런타임 구성으로 전파된다. 데이터베이스 파일이 없는 경우에는 config 파일의 설정 값을 읽어 메모리 내 데이터베이스에 적용한 다음 온디스크 데이터베이스에 저장되고 런타임에 적용한다.
설정 값을 사용할 때 데이터베이스 파일이 발견되면 config 파일의 설정 값은 사용되지 않는다는 점에 유의해야 한다. 즉, 정상적인 시작 중에 ProxySQL은 지속형 온디스크 데이터베이스에서만 메모리 내 구성을 초기화 한다.
ProxySQL을 시작할 때 config 파일의 설정값을 메모리 및 런타임에 사용하기 위해서는 아래와 같은 순서를 적용할 수 있다.
1. 최신의 Config 파일을 배포한다. 일반적인 설치를 진행하였다면 아래 경로에 설정 파일이 위치한다.
/etc/proxysql.cnf |
2. 배포한 Config 파일에 적절한 권한 부여한다. 실습에서는 775 권한을 부여하였다.
sudo chmod 775 proxysql.cnf |
3. 실행중인 ProxySQL 서비스를 중지한다. 서비스 중지전에 유입되는 트래픽은 다른 곳으로 라우팅 되도록 하여 서비스 장애가 발생하지 않도록 주의한다.
sudo service proxysql stop |
4. 기존의 데이터베이스 설정이 사용되지 않도록 데이터베이스 파일을 삭제한다.
sudo rm -rf /var/lib/proxysql/proxy* |
5. ProxySQL 서비스를 시작한다. 이때 initial 옵션을 함께 사용한다.
sudo service proxysql start initial |
실제 현업에서 ProxySQL을 운영한다고 하면 필요에 따라 다수의 ProxySQL을 운영하는 환경이 발생한다. 이러한 환경에서는 각 서버의 설정 파일을 수정하고 이력을 관리하는 것이 매우 중요하다. 그렇기 때문에 직접 서버에 접속하여 설정 파일을 수정하는 것은 이력이 남지 않아 매우 불편하면서도 위험한 상황이 발생할 수 있다. 그래서 정책적으로 config파일을 기준으로 수정하고, 이력 관리는 Git 등을 사용하면 안전한 이력 관리를 할 수 있다. 그리고 서비스 시작 시 데이터베이스 정보가 아닌 config 값을 사용하면 혼란없이 다수의 서버 환경에서 안전한 관리가 가능하다.
[참고자료]
l Configuration system : https://github.com/sysown/proxysql/blob/master/doc/configuration_system.md
2023-08-04 / Sungwook Kang / http://sungwookkang.com
MySQL, ProxySQL, ProxySQL설정, ProxySQL 구성관리, ProxySQL 시작
'MySQL, MariaDB' 카테고리의 다른 글
MySQL Galera Cluster + ProxySQL에서 Galera Cluster 특성을 고려한 R/W 호스트 그룹 설정 하기 (0) | 2023.08.10 |
---|---|
MySQL/MariaDB 환경에서 다중 마스터 복제를 지원하는 Galera Cluster 알아보기 (0) | 2023.08.07 |
MySQL HA + ProxySQL 환경에서 서비스 장애조치 구성 (0) | 2023.08.03 |
MySQL HA 환경에서 Orchestrator를 활용한 클러스터 리팩토링 및 자동 장애조치 구성 (0) | 2023.07.27 |
MySQL 고가용성 운영을 위한 Orchestrator 설치 (0) | 2023.07.25 |