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()执行失败,则会将错误报告给错误日志。
完毕!