• ProxySQL 定时调度


    转载自:https://www.jianshu.com/p/410ff5897c27

    Scheduler是 v1.2.0 引入的特性。
    ProxySQL的Scheduler是一个类似于定时任务系统(cron-like)的实现,粒度可精细到毫秒级。只能在Admin管理接口对Scheduler进行配置:暂时不支持在配置文件中进行配置。
    为什么加入Scheduler特性
    
    Scheduler允许ProxySQL以一定的时间间隔运行自定义的脚本,可用于多种目的。主要动机是在此类脚本探测到某些外部事件时对ProxySQL进行重新配置。
    Implementation
    
    当前Scheduler通过两个表来实现调度功能:
    Admin> SHOW TABLES LIKE '%scheduler%';
    +-------------------+
    | tables            |
    +-------------------+
    | scheduler         |
    | runtime_scheduler |
    +-------------------+
    2 rows in set (0.00 sec)
    
    详细一点的描述:
    
        scheduler表是配置scheduler的地方。
        runtime_scheduler表(只读)是runtime时scheduler的实际表示。
        (译注:scheduler表用于配置,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:scheduler任务的唯一标识id。
        active:如果设置为1,则表示该调度任务是激活的,否则该调度任务是未激活的,不会加载到runtime去运行。
        interval_ms:调度任务的调度时间间隔(单位毫秒),允许的最小时间间隔为100毫秒。
        filename:待执行脚本的绝对路径。
        arg1 到 arg5:传递给任务脚本的参数,最多允许传递5个参数。
        comment:用于说明这个调度任务是干嘛的,可随意写。
        runtime_scheduler的表结构和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使其生效,保存到disk使配置持久化。
    基于此,ProxySQL为了支持scheduler也能实现这些功能,特地添加了几个新的命令:
    
        LOAD SCHEDULER TO RUNTIME和LOAD SCHEDULER FROM MEMORY:加载内存数据库中的main.scheduler表到runtime的数据结构中,也就是说让配置立即生效;
        LOAD SCHEDULER TO MEMORY和LOAD SCHEDULER FROM DISK:将磁盘数据库中的disk.scheduler表加载到内存数据库中的main.scheduler表;
        SAVE SCHEDULER FROM RUNTIME和SAVE SCHEDULER TO MEMORY:将runtime数据结构中的scheduler持久化到内存数据库中的main.scheduler表中;
        SAVE SCHEDULER FROM MEMORY和SAVE SCHEDULER TO DISK:将内存数据库中的main.scheduler表持久化到磁盘数据库中的disk.scheduler表中。
    
    scheduler是通过调用fock()然后execve()实现的。如果execve()失败,将会向错误日志中报告该错误。
    
  • 相关阅读:
    SSL工作原理
    xmlhttprequest对象
    form验证的图片(小技巧)
    C#转码
    引用不了App_Code里的类
    再谈如何成为技术领袖
    如何做好年末总结?
    编程习惯
    软件人员推荐书目(都是国外经典书籍!!!)
    又当爹又当妈的产品经理
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16396925.html
Copyright © 2020-2023  润新知