ProxySQL源码分析2-Main流程

Main流程图

在这里插入图片描述

  • 初始化全局变量,proxysql的main库里面的global_variables里面可查看变量
  • daemon_fork,这里fork两次(感兴趣可找资料看下),创建守护进程,proxysql宕机可自动拉起。
  • 阶段2-not_started–初始化Main模块,主要就是new来各种全局对象,包括GloQC(query cache)、GloQPro(query processor)、授权、GloMyMon(mysql monitor)、日志、GloMTH(mysql thread handler)、GloMyStmt、MyHGM(host group manager)等
  • MyHGM启动两个线程,一个用来管理连接,一个用来采集服务器的gtid(后面用来判断延迟之列的,选择从库的时候使用)
  • 阶段2-not_started–初始化Admin模块,主要用来初始化admin、stats、cluster对象,admin最重要,管理请求、配置变更等都是这里做的;Stats是核心的统计库,统计的内容在后面的库表分析中会说明;cluser对象主要就是用来管理proxysql集群的,同步配置。
  • 阶段3-start_all,这个阶段的核心工作就是将库表里面的信息加载到全局对象中,比如server信息、user信息、mysql集群信息等。其中初始化MySQL线程处理模块会启动2类线程,这2类线程是处理用户请求,最核心,后面会分析。初始化MySQL监控模块会启动monitor监控线程,这块只负责处理mysql serve相关的监控,比如:ping、delay、read_only等。
  • 接着main会使用watchdog来监控worker线程、idle线程的heartbeat,这里可能会造成proxysql的重启。
  • 如果给进程发送shutdown指令,就到阶段4了。

源码

int main_test(int argc, const char *argv[])
{
   
    // 初始化全局变量GloVar
    ProxySQL_Main_process_global_variables(argc, argv);
    // 初始化SSL模块
    ProxySQL_Main_init_SSL_module();
    // daemon_fork进程
    if (GloVars.global.foreground == false)
    {
   
        ProxySQL_daemonize_phase1((char *)argv[0]);
        /* Do the fork */
        if ((pid 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值