Multi layer configuration system
ProxySQL has an advanced yet intuitive configuration system built to facilitate:
- 다운타임 없는 변경을 보장하는 사용하기 쉬운 동적 런타임 구성 시스템
- 구성을 이전 상태로 손쉽게 롤백
- MySQL 호환 관리 인터페이스
이는 설정이 런타임에서 메모리로 이동되고 원하는 대로 디스크에 유지되는 다중 계층 구성 시스템을 통해 달성됩니다.
구성의 3개 계층은 다음으로 구성됩니다.
RUNTIME
RUNTIME 계층 은 요청을 처리하는 작업자 스레드에서 사용하는 ProxySQL의 메모리 내 데이터 구조를 나타냅니다.
런타임 변수에는 다음과 관련된 구성이 포함됩니다.
- 전역 변수에 정의된 실제 값
- 호스트 그룹으로 그룹화된 백엔드 서버 목록
- 프록시에 연결할 수 있는 MySQL 사용자 목록
참고: 운영자는 RUNTIME 구성 섹션 의 내용을 직접 수정할 수 없습니다 .
MEMORY
MEMORY ( main 이라고도 함 ) 계층은 MySQL 호환 인터페이스를 통해 노출되는 메모리 내 데이터베이스를 나타냅니다. 사용자는 MySQL 클라이언트와 이 인터페이스에 연결하고 다양한 ProxySQL 구성 테이블을 보고 편집할 수 있습니다.
이 인터페이스를 통해 사용할 수 있는 구성 테이블에는 다음과 같은 테이블이 포함됩니다.
- mysql_servers— ProxySQL이 연결하는 백엔드 서버 목록
- mysql_users— ProxySQL에 연결하는 사용자 및 자격 증명 목록입니다. ProxySQL은 동일한 자격 증명을 사용하여 백엔드 서버에도 연결합니다.
- mysql_query_rules— 트래픽을 다양한 백엔드 서버로 라우팅할 때 평가되는 쿼리 규칙 목록입니다. 이러한 규칙은 쿼리를 다시 작성하거나 실행된 쿼리의 결과를 캐시할 수도 있습니다.
- global_variables— 프록시가 사용하도록 구성되고 런타임 중에 조정할 수 있는 전역 변수 목록입니다.
전역 변수의 예:
mysql> select * from global_variables limit 3;
+----------------------------------+----------------+
| variable_name | variable_value |
+----------------------------------+----------------+
| mysql-connect_retries_on_failure | 5 |
| mysql-connect_retries_delay | 1 |
| mysql-connect_timeout_server_max | 10000 |
+----------------------------------+----------------+
- mysql_collations— 프록시가 작업할 수 있는 MySQL 데이터 정렬 목록입니다. 이들은 클라이언트 라이브러리에서 직접 추출됩니다.
- [디버그 빌드에서만 사용 가능] debug_levels— ProxySQL이 상세 수준과 함께 내보내는 디버그 문의 유형 목록이며 성능에 영향을 줄 수 있으므로 디버그 빌드에서만 사용할 수 있습니다.
DISK and CONFIG FILE
DISK 계층 은 기본 위치가 에 있는 온디스크 SQLite3 데이터베이스를 나타냅니다 /var/lib/proxysql/proxysql.db. ProxySQL을 다시 시작한 후 구성을 사용할 수 있도록 DISK 데이터베이스를 사용하여 메모리 내 구성을 디스크에 유지할 수 있습니다. CONFIG 파일은 고전적인 구성 파일이며 다음 섹션에서 이 파일과 다른 구성 레이어 간의 관계를 볼 수 있습니다.
Configuration Life Cycle
시작하는 동안 ProxySQL은 구성 파일(있는 경우)을 읽어 정의된 파일을 확인한 datadir다음 지정된 경로에서 내부 데이터베이스 파일을 찾으려고 시도합니다.
- 데이터베이스가 지정된 datadir에서 발견되면 ProxySQL은 지속형 온디스크 데이터베이스에서 메모리 내 구성을 초기화합니다. 즉, 디스크 구성이 MEMORY에 로드되고 RUNTIME에도 전파됩니다.
- 데이터베이스 파일을 찾을 수 없는 경우(예: ProxySQL이 처음으로 실행 중이거나 데이터베이스가 삭제된 경우) 구성 파일이 구문 분석되고 해당 콘텐츠가 MEMORY에 로드되고 DISK 데이터베이스에 저장되며 RUNTIME에도 전파됩니다. .
중요 참고 사항: 데이터베이스 파일이 발견되면 /etc/proxysql.cnf구성 파일이 구문 분석되지 않습니다 . 즉, ProxySQL은 구성 파일로 폴백되는 경우에 존재하지 않는 한 지속되는 온디스크 데이터베이스에서만 메모리 내 구성을 초기화합니다.
Initial startup (or –initial flag)
언급한 바와 같이 ProxySQL을 처음 시작하는 동안 메모리 및 런타임 구성이 구성 파일에서 채워지고 그 후 모든 지속 구성이 ProxySQL의 내부 데이터베이스에 저장됩니다.
--initialSQLite 데이터베이스 파일을 원래 상태(즉, 구성 파일에 정의된 상태)로 재설정하고 기존 SQLite 데이터베이스 파일의 이름을 바꾸는 플래그 와 함께 proxysql을 실행하여 초기 구성을 강제로 다시 발생시킬 수 있습니다 . 롤백이 필요합니다(필요한 경우 이전 파일에 대해 정의된 데이터 디렉토리를 확인하십시오).
Reload startup (or –reload flag)
ProxySQL 바이너리가 --reload플래그와 함께 실행되면 구성 파일의 구성을 데이터베이스 파일의 내용과 병합하려고 시도합니다. 그런 다음 새로 병합된 구성을 사용하여 시작됩니다.
충돌이 있을 때 ProxySQL이 두 구성 소스를 성공적으로 병합할 것이라는 보장은 없으며 사용자는 항상 병합이 예상대로 실행되었는지 확인해야 합니다.
Runtime ProxySQL Configuration
런타임 시 구성 수정은 ProxySQL(기본적으로 6032)의 ProxySQL 관리 포트를 통해 수행됩니다. MySQL 호환 클라이언트로 연결하면 다양한 기본 ProxySQL 구성 및 통계 테이블을 쿼리하기 위한 표준 MySQL 스타일 인터페이스가 표시됩니다.
ProxySQL Admin> show tables;
+----------------------------------------------------+
| tables |
+----------------------------------------------------+
| global_variables |
| mysql_aws_aurora_hostgroups |
| mysql_collations |
| mysql_firewall_whitelist_rules |
| mysql_firewall_whitelist_sqli_fingerprints |
| mysql_firewall_whitelist_users |
| mysql_galera_hostgroups |
| mysql_group_replication_hostgroups |
| mysql_query_rules |
| mysql_query_rules_fast_routing |
| mysql_replication_hostgroups |
| mysql_servers |
| mysql_users |
| proxysql_servers |
| restapi_routes |
| runtime_checksums_values |
| runtime_global_variables |
| runtime_mysql_aws_aurora_hostgroups |
| runtime_mysql_firewall_whitelist_rules |
| runtime_mysql_firewall_whitelist_sqli_fingerprints |
| runtime_mysql_firewall_whitelist_users |
| runtime_mysql_galera_hostgroups |
| runtime_mysql_group_replication_hostgroups |
| runtime_mysql_query_rules |
| runtime_mysql_query_rules_fast_routing |
| runtime_mysql_replication_hostgroups |
| runtime_mysql_servers |
| runtime_mysql_users |
| runtime_proxysql_servers |
| runtime_restapi_routes |
| runtime_scheduler |
| scheduler |
+----------------------------------------------------+
이러한 각 테이블에는 관리 인터페이스에서 잘 정의된 역할이 있으며 각 테이블에 대한 자세한 내용은 기본(런타임) 스키마 문서에서 찾을 수 있습니다.
이러한 테이블은 위의 다이어그램에 설명된 메모리 내 데이터베이스를 나타내며 표준 SQL 쿼리를 사용하여 구성할 수 있습니다. 이 계층에서 구성을 위로(예: 런타임 중에 사용하기 위해) 또는 아래로(디스크에 유지하기 위해) 이동하려면 다음 섹션을 검토하십시오.
레이어 간 구성 이동
mysql servers구성을 디스크에 유지하거나 구성을 런타임에 로드하기 위해 각 구성 항목(예: , mysql users) 에 대한 관리 인터페이스를 통해 실행할 수 있는 다양한 관리 명령 세트가 있습니다 mysql query rules.
다음 명령 구문을 사용하여 다양한 계층 간에 ProxySQL 구성을 이동할 수 있습니다. <item>은 구성하려는 구성 항목의 자리 표시자입니다.
- [1] `LOAD <item> FROM MEMORY` / `LOAD <item> TO RUNTIME`
-
- 메모리 내 데이터베이스에서 런타임 데이터 구조로 구성 항목을 로드합니다.
-
- [2] `SAVE <item> TO MEMORY` / `SAVE <item> FROM RUNTIME`
-
- 런타임에서 메모리 내 데이터베이스로 구성 항목 저장
-
- [3] `LOAD <item> TO MEMORY` / `LOAD <item> FROM DISK`
-
- 디스크 데이터베이스에서 메모리 내 데이터베이스로 지속 구성 항목을 로드합니다.
-
- [4] `SAVE <item> FROM MEMORY` / `SAVE <item> TO DISK`
-
- 메모리 내 데이터베이스의 구성 항목을 디스크 데이터베이스에 저장합니다.
-
- [5] `LOAD <item> FROM CONFIG`
-
- 구성 파일의 구성 항목을 메모리 내 데이터베이스로 로드합니다.
-
중요 참고 사항: 변경 사항은 RUNTIME에 로드될 때까지 활성화되지 않으며 DISK에 저장되지 않은 모든 변경 사항은 ProxySQL을 다시 시작한 후에 사용할 수 없습니다.
일반적인 구성 항목에 대한 샘플 명령은 아래에서 찾을 수 있습니다(전체 목록이 아님).
MySQL 사용자 활성화/유지:
# Active current in-memory MySQL User configuration
LOAD MYSQL USERS TO RUNTIME;
# Save the current in-memory MySQL User configuration to disk
SAVE MYSQL USERS TO DISK;
MySQL 서버 및 MySQL 복제 호스트 그룹 활성화/지속:
# Active current in-memory MySQL Server and Replication Hostgroup configuration
LOAD MYSQL SERVERS TO RUNTIME;
# Save the current in-memory MySQL Server and Replication Hostgroup configuration to disk
SAVE MYSQL SERVERS TO DISK;
MySQL 쿼리 규칙 활성화/지속
# Active current in-memory MySQL Query Rule configuration
LOAD MYSQL QUERY RULES TO RUNTIME;
# Save the current in-memory MySQL Query Rule configuration to disk
SAVE MYSQL QUERY RULES TO DISK;
MySQL 변수 활성화/지속
# Active current in-memory MySQL Variable configuration
LOAD MYSQL VARIABLES TO RUNTIME;
# Save the current in-memory MySQL Variable configuration to disk
SAVE MYSQL VARIABLES TO DISK;
ProxySQL 관리 변수 활성화/지속
# Active current in-memory ProxySQL Admin Variable configuration
LOAD ADMIN VARIABLES TO RUNTIME;
# Save the current in-memory ProxySQL Admin Variable configuration to disk
SAVE ADMIN VARIABLES TO DISK;
참고: 위의 명령은 다음 단축키를 허용합니다.
- MEM for MEMORY
- RUN for RUNTIME
예를 들어 다음 두 명령은 동일합니다.
- `SAVE ADMIN VARIABLES TO MEMORY`
- `SAVE ADMIN VARIABLES TO MEM`
Troubleshooting
최종 유효성 검사는 값이 런타임에 로드될 때만 수행됩니다. 메모리나 디스크에 저장할 때 어떤 종류의 경고나 오류도 발생시키지 않는 값을 설정할 수 있습니다. 그러나 변경 사항은 런타임에 대한 로드가 실행될 때 이전에 저장된 상태로 되돌아갑니다. 이 경우 정의된 오류 로그를 확인해야 합니다.
예를 들어,
[WARNING] Impossible to set variable monitor_read_only_interval with value "0". Resetting to current "1500".
'DB' 카테고리의 다른 글
ProxySQL - Global Variables (글로벌 변수) (0) | 2023.01.18 |
---|---|
ProxySQL Configuration file (구성 파일) (0) | 2023.01.17 |
ProxySQL - Audit log (감사 로그) (0) | 2023.01.17 |
ProxySQL 시작하기 (설치) (1) | 2023.01.13 |
SQL Server Maintenance Solution (0) | 2022.08.04 |