ProxySQL官档翻译__02_ProxySQL配置概述

02_ProxySQL配置概述

备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入mysql

~
~git

1、多层次配置系统[Multi layer configuration system]

ProxySQL具备复杂且易于使用的配置系统,适合知足如下需求:github

  • 容许对配置进行简单的动态更新(以便适用于零停机要求的大型架构);
  • 容许动态修改尽量多的配置项,而无需重启ProxySQL进程;
  • 容许轻松回滚无效配置;

~
~
3层配置体系以下所示:sql

+------------------------+
|    RUNTIME    |
+-------------------------+
    /|\        |
     |         |
 [1] |     [2] |
     |        \|/
+-------------------------+
|    MEMORY     |
+-------------------------+
    /|\    |    |\
     |     |      \
 [3] | [4] |       \ [5]
     |    \|/       \
+-------------------------+  +-------------------------+
|      DISK     | |  CONFIG FILE  |
+-------------------------+  +-------------------------+

说明:
RUNTIME ==>表示处理请求的线程使用的ProxySQL在内存中的数据结构。
它包含以下参数:
1)在全局参数(admin_variables)中定义的实际值;
2)在主机组(hostgroup)中包含的后端服务;
3)能够链接到代理的MySQL用户列表;
备注:不能直接修改RUNTIME配置部分的内容,由于这些是靠近底层的信息;
~
~
MEMORY ==>它有时也被称为main;表明了能够经过MySQL兼容接口使用的内存中的数据库(proxysql实例)。用户可使用MySQL客户端
链接到此接口,并查询各类ProxySQL配置表/数据库。
~
~
经过该接口,可用使用的参数表包括:
1)mysql_servers-->保存ProxySQL可链接的后端服务器的列表;
2)mysql_users -->保存能够链接到ProxySQL的用户及其凭据列表;注意:ProxySQL也将使用这些凭证去链接后端服务;
3)mysql_query_rules-->保存将流量路由到各个后端服务器时依据的查询规则列表;
4)global_variables -->保存ProxySQL配置的可被动态调整的全局参数;好比下面这些:数据库

Admin>select * from global_variables limit 3;
+--------------------------------+----------------+
| variable_name                  | variable_value |
+--------------------------------+----------------+
| mysql-shun_on_failures         | 5              |
| mysql-shun_recovery_time_sec   | 10             |
| mysql-query_retries_on_failure | 1              |
+--------------------------------+----------------+
3 rows in set (0.01 sec)

5)mysql_collations -->保存可供ProxySQL使用的MySQL排序规则的列表。这些是直接从客户端库中提取的。
6)debug_levels -->保存ProxySQL在debug输出信息时可被输出的debug语句的类型列表。能够根据debug来动态配置,
并将结果输出到日志中。注意:这类参数只能在调试时使用,由于影响性能!
~
~
DISK和CONFIG FILE
DISK -->表明在磁盘上的SQLite3类型的数据库,默认位置为$(DATADIR)/proxysql.db。因为在重启时,内存中未保存的配置将会丢失。
于是由它来将这些配置保存到磁盘。
CONFIG FILE-->表明配置文件。后端

~
~服务器

2、启动[Startup]

在正常启动时,ProxySQL首先将读取它的配置文件来肯定数据目录位置(datadir)[其余配置信息暂时不读取];然后根据数据库(SQLite3)文件
是否存在来决定后面的动做。数据结构

  • 若是数据库文件存在,则ProxySQL以此初始化内存、加载配置信息,
  • 若是数据库文件存不在,可是配置文件还存在,则ProxySQL将解析配置文件内容,加载到内存中的数据库中;并将这些配置信息保存到磁盘
    数据库(SQLite3)文件中。特别注意:若是在datadir中找到SQLite3文件,则不会解析配置文件!!

备注:
1)在ProxySQL 1.4.4时引入了2个通用参数,它们只能从配置文件值获取:restart_on_missing_heartbeats和execute_on_exit_failure;
2)在ProxySQL 2.0.0时又引入了1个通用参数,该参数也只能从配置文件值获取:errorlog;架构

~
~ide

3、初始启动[Initial startup (or --initial flag)]

在初始启动模式下,内存和运行时配置信息将用配置文件来填充;而后这些配置信息将固化到ProxySQL自带的SQLite数据库中。
经过使用--initial选项运行ProxySQL能够强制从新进行初始配置,这会将SQLite数据库文件重置为原始状态(即配置文件中定义的状态)
并重命名现有的SQLite数据库文件,以便往后回退(若是须要回退能够检查数据目录中的旧文件)。

~
~

4、重载启动[Reload startup (or --reload flag)]

若是使用--reload选项执行proxysql,它会尝试将配置文件中的配置与数据库文件的内容合并。而后,再执行常规启动程序。
但要注意,这里不保证再2个配置内容冲突时ProxySQL能够正确的合并内容;所以,这时须要人为的进行确认合并是否达到预期。

~
~

5、运行时修改配置[Modifying config at runtime]

使用MySQL客户端连入ProxySQL(6032)后,经过查询、更新各个ProxySQL配置相关的表便可实现动态的修改配置。
配置得相关的表都有明确的名称:
mysql_servers、mysql_users、mysql_query_rules、global_variables、debug_levels(仅用于调试ProxySQL时手动构建)
以上各表的内容,参看文章第一段的‘多层次配置系统’。

~
~

6、不一样层间配置信息的流动[Moving config between layers]

为了让配置信息持久化到磁盘或载入到runtime层,有一系列的管理命令能够被使用。这些命令须要对应'3层配置体系'图来理解。
如下给出相关的命令,命令即变化对应'3层配置体系'图中的编号:
~
~
3层配置体系以下所示:

+------------------------+
|    RUNTIME    |
+-------------------------+
    /|\        |
     |         |
 [1] |     [2] |
     |        \|/
+-------------------------+
|    MEMORY     |
+-------------------------+
    /|\    |    |\
     |     |      \
 [3] | [4] |       \ [5]
     |    \|/       \
+-------------------------+  +-------------------------+
|      DISK     | |  CONFIG FILE  |
+-------------------------+  +-------------------------+

一、用于从新配置MySQL用户

[1] LOAD MYSQL USERS FROM MEMORY / LOAD MYSQL USERS TO RUNTIME
做用:将MEMORY层数据库中的MySQL用户配置载入到RUNTIME层。
~
[2] SAVE MYSQL USERS TO MEMORY / SAVE MYSQL USERS FROM RUNTIME
做用:将RUNTIME层中的MySQL用户配置写入到MEMORY层的数据库中。
~
[3] LOAD MYSQL USERS TO MEMORY / LOAD MYSQL USERS FROM DISK
做用:将DISK数据库文件中的MySQL用户配置载入到MEMORY层的数据库中。
~
[4] SAVE MYSQL USERS FROM MEMORY / SAVE MYSQL USERS TO DISK
做用:将MEMORY层数据库中的MySQL用户配置写入DISK的数据库文件进行持久化。
~
[5] LOAD MYSQL USERS FROM CONFIG
做用:从CONFIG FILE(配置文件)中加载用户到MEMORY层的数据库中。

二、用于处理MySQL服务器

[1] LOAD MYSQL SERVERS FROM MEMORY / LOAD MYSQL SERVERS TO RUNTIME
做用:将MEMORY层数据库中的MySQL服务器配置载入到RUNTIME层。
~
[2] SAVE MYSQL SERVERS TO MEMORY / SAVE MYSQL SERVERS FROM RUNTIME
做用:将RUNTIME层中的MySQL服务器配置写入到MEMORY层的数据库中。
~
[3] LOAD MYSQL SERVERS TO MEMORY / LOAD MYSQL SERVERS FROM DISK
做用:将DISK数据库文件中的MySQL服务器配置载入到MEMORY层的数据库中。
~
[4] SAVE MYSQL SERVERS FROM MEMORY / SAVE MYSQL SERVERS TO DISK
做用:将MEMORY层数据库中的MySQL服务器配置写入DISK的数据库文件进行持久化。
~
[5] LOAD MYSQL SERVERS FROM CONFIG
做用:从CONFIG FILE(配置文件)中加载MySQL服务器配置到MEMORY层的数据库中。

~
~

三、用于处理MySQL查询规则

[1] LOAD MYSQL QUERY RULES FROM MEMORY / LOAD MYSQL QUERY RULES TO RUNTIME
做用:将MEMORY层数据库中的MySQL查询规则配置载入到RUNTIME层。
~
[2] SAVE MYSQL QUERY RULES TO MEMORY / SAVE MYSQL QUERY RULES FROM RUNTIME
做用:将RUNTIME层中的MySQL查询规则配置写入到MEMORY层的数据库中。
~
[3] LOAD MYSQL QUERY RULES TO MEMORY / LOAD MYSQL QUERY RULES FROM DISK
做用:将DISK数据库文件中的MySQL查询规则配置载入到MEMORY层的数据库中。
~
[4] SAVE MYSQL QUERY RULES FROM MEMORY / SAVE MYSQL QUERY RULES TO DISK
做用:将MEMORY层数据库中的MySQL查询规则配置写入DISK的数据库文件进行持久化。
~
[5] LOAD MYSQL QUERY RULES FROM CONFIG
做用:从CONFIG FILE(配置文件)中加载MySQL查询规则配置到MEMORY层的数据库中。

~
~

四、用于处理MySQL变量

[1] LOAD MYSQL VARIABLES FROM MEMORY / LOAD MYSQL VARIABLES TO RUNTIME
做用:将MEMORY层数据库中的MySQL参数配置载入到RUNTIME层。
~
[2] SAVE MYSQL VARIABLES TO MEMORY / SAVE MYSQL VARIABLES FROM RUNTIME
做用:将RUNTIME层中的MySQL参数配置写入到MEMORY层的数据库中。
~
[3] LOAD MYSQL VARIABLES TO MEMORY / LOAD MYSQL VARIABLES FROM DISK
做用:将DISK数据库文件中的MySQL参数配置载入到MEMORY层的数据库中。
~
[4] SAVE MYSQL VARIABLES FROM MEMORY / SAVE MYSQL VARIABLES TO DISK
做用:将MEMORY层数据库中的MySQL参数配置写入DISK的数据库文件进行持久化。
~
[5] LOAD MYSQL VARIABLES FROM CONFIG
做用:从CONFIG FILE(配置文件)中加载MySQL参数配置到MEMORY层的数据库中。

~
~

五、用于处理admin(ProxySQL)变量

[1] LOAD ADMIN VARIABLES FROM MEMORY / LOAD ADMIN VARIABLES TO RUNTIME
做用:将MEMORY层数据库中的admin参数配置载入到RUNTIME层。
~
[2] SAVE ADMIN VARIABLES TO MEMORY / SAVE ADMIN VARIABLES FROM RUNTIME
做用:将RUNTIME层中的admin参数配置写入到MEMORY层的数据库中。
~
[3] LOAD ADMIN VARIABLES TO MEMORY / LOAD ADMIN VARIABLES FROM DISK
做用:将DISK数据库文件中的admin参数配置载入到MEMORY层的数据库中。
~
[4] SAVE ADMIN VARIABLES FROM MEMORY / SAVE ADMIN VARIABLES TO DISK
做用:将MEMORY层数据库中的admin参数配置写入DISK的数据库文件进行持久化。
~
[5] LOAD ADMIN VARIABLES FROM CONFIG
做用:从CONFIG FILE(配置文件)中加载admin参数配置到MEMORY层的数据库中。
~
备注:以上的命令支持如下简写方式:
MEM <==> MEMORY
RUN <==> RUNTIME

~
~

7、总结[Summary]

到此为止,已经基本了解了系统是如何工做的了,下面给出一些经常使用的命令;它们与如何激活更改后的配置(RUNTIME)
以及如何将配置永久保存到磁盘(DISK)有关。特别注意:在将配置加载到RUNTIME层以前,不会激活任何更改。

LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;

LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

LOAD ADMIN VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;

~
~

8、问题分析[Troubleshooting]

特别注意:只有在将参数值加载到RUNTIME层时才会进行最终的验证。

你能够设置一个值,该值在保存到MEMORY层时不会引起任何类型的警告或错误,甚至能够保存到DISK。
可是,当执行加载到RUNTIME层时,参数值却恢复到了先前保存的状态;若是发生这种状况,就应该检查定义的错误日志。

例如:
[WARNING] Impossible to set variable monitor_read_only_interval with value "0".
解决办法:从新设置monitor_read_only_interval的值。

~~完毕!

相关文章
相关标签/搜索