MySQL从属运行状况检查

我正在创build一个像创build数据库configuration的项目,为mysql实例获取一个只读副本数组,并保持一个打开的连接,并保持其静态在该服务,所以当客户端试图连接一个只读副本比它假设返回不那么忙。

我的问题是应该是什么公式呢?

到目前为止,我只有2个variables,对这个variables的任何改进都是值得欢迎的。

  1. 远程服务器是否活着?
  2. 与Threads_connected有多less个活动连接
  3. 复制是否健康

我devise了一个系统,可以在类似的情况下指导查询量。 包括更多的东西可能是有趣的:

  • 实际stream量对候选人的平均响应时间(而不仅仅是一个监控查询)
  • 上一次查询的次数(60s等)
  • 内存/ CPU /磁盘利用率在前一段时间

我以前给每个资源的重量,然后基本上加起来。 所以从一台服务器,你可能会回来:

memory 50(%) cpu 40(%) disk 4000 (iops, if you know the limit here making it a % is good) ms 300 (msecs average response time) 

这个服务器的重量将会是4390(在这里会更糟)。 你可以在这里看到,也许如果CPU不是一个问题,你可以在计算中改变其“权重”,以决定哪个客户端使用的环境更准确。

如何收集这些信息可能会影响收集的频率和可靠性(可能自从您创build最less使用的服务器列表后,某个节点已经死亡)。 一种方法是对每个候选人运行一个报告守护程序,并在获得客户端请求时(可能通过多播)查询它。 报告守护进程可以非常频繁地收集统计信息,以使得决策信息尽可能准确。

目前还不清楚你所生成的configuration是多么短暂,这是分发时的重要考虑因素。 你会长时间连接客户吗? 是否有可能需要断开和重新分配客户端,因为服务器超载? 也许你已经考虑过了。

取决于你是多么短暂,多less你知道的查询,你也可以增加更多的数据的决策指标:

  • 期望的客户重量目前由候选人服务(如果您也给客户重量)
  • 已经在内存中的数据集(如果您的数据大小超过了服务器的内存容量,并且您拥有多台服务器,则可以通过将特定数据集的查询与已经存在内存中的服务器的查询进行权衡来提高内存利用率)
  • 服务器的正常运行时间(一个完全卸载的新盒子通常会在基于重量的情况下被频繁地做出决定)

希望有帮助! 这是一个有趣的问题。

你可以用简单的脚本或使用Nagios插件。

  1. check_ping或check_icmp

  2. check_mysql_health ,如下所示:

    定义命令{
         command_name check_mysql_health
         command_line $ USER1 $ / check_mysql_health -t 20 --hostname $ HOSTADDRESS $ --port $ ARG1 $ --username $ ARG2 $ --password $ ARG3 $ --mode $ ARG4 $ --warning $ ARG5 $ --critical $ ARG6 $
     }

    定义服务{
            使用通用服务
             host_name mysql_slave
             service_description MySQL_threads-connected
             check_command check_mysql_health!3306!user!password!threads-connected!30!40
     }
    3。

    定义服务{
            使用关键服务
             host_name mysql_slave
             service_description MySQL_slave-io-running
             check_command check_mysql_health!3307!user!password!slave-io-running
             contact_groups admin-sms
     }

    定义服务{
            使用关键服务
             host_name mysql_slave
             service_description MySQL_slave-sql-running
             check_command check_mysql_health!3307!user!password!slave-sql-running
             contact_groups admin-sms
     }