07_ProxySQL配置之调度

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

一、调度[Scheduler]

调度程序是v1.2.0中引入的功能。

Scheduler是一种类似于cron的实现,集成在ProxySQL内,具有毫秒级的粒度。

当前仅通过Admin interface界面进行配置,尚不支持在配置文件中配置。

二、动机[Motivation]

Scheduler允许ProxySQL定期运行用户自定义的脚本以实现多种用途。

三、应用设置[Implementation]

当前的应用实现依赖2个表:

Admin> SHOW TABLES LIKE '%scheduler%';
+-------------------+
| tables            |
+-------------------+
| scheduler         |
| runtime_scheduler |
+-------------------+
2 rows in set (0.00 sec)

详细信息: 1)scheduler表是配置调度程序的地方; 2)runtime_scheduler表是记录调度程序的运行时信息(只读);

scheduler 表的结构如下:

Admin> SHOW CREATE TABLE scheduler\G;
*************************** 1. row ***************************
       table: scheduler
Create Table: CREATE TABLE scheduler (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    interval_ms INTEGER CHECK (interval_ms>=100 AND interval_ms<=100000000) NOT NULL,
    filename VARCHAR NOT NULL,
    arg1 VARCHAR,
    arg2 VARCHAR,
    arg3 VARCHAR,
    arg4 VARCHAR,
    arg5 VARCHAR,
    comment VARCHAR NOT NULL DEFAULT '')
1 row in set (0.00 sec)

列含义说明: id ==>调度程序作业的唯一标识符; active ==>如果设置为1,则作业处于活动状态;否则不是。 interval_ms ==>工作开始的频率(以毫秒为单位)。最小interval_ms是100毫秒; filename ==>要执行的可执行文件的完整路径; arg1 to arg5==>可以传递给作业的参数(最多5个); comment ==>一个自由格式文本字段,用于注释作业的目的;

仅供参考,表runtime_scheduler具有相同的相同结构:

Admin> SHOW CREATE TABLE runtime_scheduler\G;
*************************** 1. row ***************************
       table: runtime_scheduler
Create Table: CREATE TABLE runtime_scheduler (
    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
    active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
    interval_ms INTEGER CHECK (interval_ms>=100 AND interval_ms<=100000000) NOT NULL,
    filename VARCHAR NOT NULL,
    arg1 VARCHAR,
    arg2 VARCHAR,
    arg3 VARCHAR,
    arg4 VARCHAR,
    arg5 VARCHAR,
    comment VARCHAR NOT NULL DEFAULT '')
1 row in set (0.00 sec)

和ProxySQL中的其余配置表一样,在编辑此表中的数据之后,需要加载配置到RUNTIME层才能生效,以及保存到磁盘以保持持久性。 因此,ProxySQL具有支持Scheduler的新命令:

LOAD SCHEDULER TO RUNTIME 和 LOAD SCHEDULER FROM MEMORY
:将scheduler表配置从MEMORY层加载到RUNTIME层时,并生效;

LOAD SCHEDULER TO MEMORY 和 LOAD SCHEDULER FROM DISK 
:将scheduler表配置从DISK层加载到MEMORY层的scheduler表;

SAVE SCHEDULER FROM RUNTIME 和 SAVE SCHEDULER TO MEMORY 
:将scheduler表配置从RUNTIME层保存到MEMORY层的scheduler表;

SAVE SCHEDULER FROM MEMORY 和 SAVE SCHEDULER TO DISK 
: 将scheduler表配置从MEMORY层保存到DISK层scheduler表,并在重新启动时保持持久性。

调度程序会调用fork()然后执行execve()。如果execve()执行失败,则会将错误报告给错误日志。

完毕!