proxysql 系列 ~ 原理

一 主从检测机制
   admin查看检测返回值
        select hostgroup_id,hostname,port,status,max_replication_lag from runtime_mysql_servers;
   检测语句
        show slave status
  检测频率
        mysql-monitor_replication_lag_interval:主从延迟检测时间,默认10秒。
  检测值
       second_master_behind为非NULL max_replication_lag
       second_master_behind为NULL(复制出现异常状况)
       mysql-monitor_slave_lag_when_null 默认60s 换算成 max_replication_lag=60mysql

   补充 mysql_servers的status是不能动态更新的,这点要牢记
二 链接池复用
     状况:一个后端DB的链接,能够“同时”被多个客户端使用 
     改进对比
     传统的链接池,会在客户端断开链接(会话)后,把链接放回到池里。
     在ProxySQL中,因为链接复用,链接会在 sql语句 执行结束后,便将链接放回到池里(客户端会话可能并无断开),这样即可大大提升后端链接的使用效率,而避免前段请求过大致使后端链接数疯长。sql

三  池总结和复用 数据库

   proxysql进行周期性的ping命令保持到后端数据库的空闲连接,本地的链接池只会保留必定量的空闲连接,具体和参数设置有关系,新建的连接会被加入链接池后端

   池
  线程池是为了快速和后端创建新的TCP链接
  链接池是为快速和后端应用已经打开的TCP链接安全

  处理方式
  1 当应用程序发送了一个MySQL请求给ProxySQL时,ProxySQL首先解析要路由到哪一个后端,若是链接池中已经有和该后端的链接,将重用该链接,不然将建立一个新的和后端的链接。
  2 当处理完客户端的请求后,链接会还回主机组管理器(HostGroup Manager)。若是主机组管理器判断了该链接是能够被安全共享的,且链接池未满,则该链接会放进链接池。
 空闲连接
  1 放进链接池的链接都是空闲链接,正在使用的链接是不可能进入链接池的。
  2 ProxySQL会按期发送ping消息来维持空闲链接。若是某链接从上一次ping以后,若是尚未被使用,则该链接被定义为空闲链接
  3 对于每一个hostgroup/backend,主机组管理器只会保持链接池中的最大链接数为mysql-free_connections_pct * mysql_servers.max_connections / 100。池中的每一个空闲链接都经过间断性的ping来维持它的打开状态。
 空闲连接参数
 1 对于空闲链接ping的时间间隔由变量mysql-ping_interval_server_msec控制
 2 mysql-connection_max_age_ms 当该变量设置的值大于0时(单位毫秒),若是某个空闲链接(当前没有任何会话使用)的空闲时长超过了这里设置的值,则这个链接会关闭。默认值为0,表示不会由于存活时间而关闭空闲链接服务器

四  proxysql 高可用
   原理 监视指定主机组中全部服务器的read_only值,而且根据read_only的值将服务器分配给写入器或读取器主机组,定义 hostgroup 的主从关系。ProxySQL monitor 模块会监控 HG 后端全部servers 的 read_only 变量,若是发现从库的 read_only 变为0、主库变为1,则认为角色互换了,自动改写      mysql_servers 表里面 hostgroup 关系,达到自动 Failover 效果。
   相关表mysql_replication_hostgroups
   监控值('read_only','super_read_only','innodb_read_only')三者选1,默认read_only,最后一个值是适用于aws
  填写参数
   writer_hostgroup_id reader_hostgroup_id comment
  进行查询
  select * from runtime_mysql_replication_hostgroups 查询有数据库表明成功
  select * from runtime_mysql_servers 从库若是host_group_id已经变成write_group_id肯定切换成功
  必须注意
  1 proxysql只负责进行切换并不负责补偿日志,要牢记,必须配合其余高可用手段(经过高可用调节read_only的值和proxysql进行配合)线程

  2 一旦开启此功能,会自动根据read_only进行分配group,优先级高于mysql_servers你指定插入的w/r-group-id,因此必须监控你从库的read_only,防止加入主库集群日志

相关文章
相关标签/搜索