MySQL管理工具MySQL Utilities — mysqlfailover(40)

mysqlfailover 工具对复制进行健康检测和实现故障自动转移。该工具在定期的时间内进行间隔或持续的健康检测。主要任务是监视主失败,并在发送故障时候,自动执行故障切换到当前最优秀的从服务器上。

mysqlfailover工具被设计成专门为了支持全局事务标识符(GTIDs)服务器, gtid_mode=ON。因此MySQL Server版本需要5.6.5或更高来支持GTIDs。

使用 –interval选项来定义检测主状态和产生健康报告的时间间隔。在每个时间间隔,该工具通过ping来检查服务器是否存活,随后,检查连接器来判断服务器是否可达。ping操作可以通过–ping选项控制。

如果主被发现是离线或无法访问,该工具将执行基于–failover-mode 选项值的动作。–failover-mode 选项值有:

auto:执行故障自动转移到第一候选人。如果没有从可行的,继续从从列表中找到一个可行的候选者。如果没有从被认为是一个可行的候选者,该程序将生成错误并退出。一旦候选者被发现,该程序将进行故障切换到最佳从上。该命令将测试每个候选从的先决条件。一旦候选从被选中,其他从作为它的从,收集其他从的任何事务交易。这种方式,确保候选者是最新的从。

elect:这种模式与aoto一样的,除了如果在指定的候选从列表中没有可行的,不检测剩余的从和产生错误并退出。

fail: 这种模式会产生一个错误,当主失败后不会进行故障转移。这种模式被用来只进行定期健康监测不进行故障切换。

所有选项允许指定对个服务器,这些选项要求以逗号分隔,格式如下:<*user*>[:<*passwd*>]@<*host*>[:<*port*>][:<*socket*>] 或者<*login-path*>[:<*port*>][:<*socket*>]

该工具允许用户连接到主自动发现从。为了使用自动发现从功能,所有从必需使用–report-host 和 –report-port 启动参数。如果这些缺失或报告不正确的信息,从健康可能无法正确报告或从可能不会全部列出。对于无法连接到的从自动发现从功能将被忽略。在每个间隔内发现从功能自动运行。

该工具允许用户指定外部脚本在切换和故障转移命令之前或之后执行。用户可以通过 –exec-before 和 –exec-after 选项指定。脚本的返回码来确定是否成功执行,0表示成功,非0表示失败并返回错误信息。

该工具还允许用户指定特定的脚本来检测主当掉或应用程序级别的事件来触发故障转移。通过–exec-fail-check选项来指定。脚本的返回码用于调用故障转移。返回码0表示故障不发生。非0表示发生。如果该脚本指定,在每个间隔开始检测。在此情况下,timeout选项没有使用。该脚本在每个间隔时间执行一次。

该工具还允许用户记录命令期间的所有动作。–log 选项需要指定有效的路径和文件名。只有该选项指定了,该功能才生效。–log-age 选项用于指定日志存放天数,默认是7天。旧的日志自动轮滚掉。日志的格式包括的项目有事件的日期和时间、事件的级别(informational – INFO, warning – WARN, error – ERROR, critical failure – CRITICAL)和消息。

该接口为用户提供了许多选项用于显示附加信息。用户可以查看复制健康报告(默认)或者选择查看使用GTIDs列表,使用UUIDs列表,如果启用了日志查看日志文件内容。 每个的这些报告说明如下:

health 显示复制拓扑状况。这份报告是接口的默认视图。默认情况下,包括主机名、端口、角色(master或slave)、服务器状态(UP = is connected, WARN = not connected but can ping, DOWN = not connected and cannot ping)、GTID_MODE和健康状态。

主的健康状态基于下面的:如果GTID_MODE=ON,服务器必需启用二进制日志且必需存在具有REPLICATE SLAVE权限的用户。

当从落后于主,–seconds-behind 选项用于检测。它允许用户设置阀值仅作为报告用。不适用于在故障转移时的候选从或选举。

从的健康状态基于下面的:IO_THREAD 和 SQL_THREADS 必需运行,必需连接到主,没有错误,没有启用GTID的落后从不超过–max-position选项指定的阀值,从正在读取正确的主日志文件,从延迟不高于–seconds-behind 选项阀值。

在每个时间间隔,在启动时如果指定了发现从选项,新的从被发现,健康的报告将被刷新。

gtid  显示执行 GTIDs主的列表。GTID变量的内容,@@GLOBAL.GTID_EXECUTED, @@GLOBAL.GTID_PURGED, @@GLOBAL.GTID_OWNED。因此,用于可以反复按G键进行屏幕切换,将循环显示这四个屏幕。

UUID  显示所有服务器的全局唯一标识符(UUID)。

Log 该选项只有指定–log选项可见。显示日志文件的内容。

用户界面被设计成匹配它所在运行的终端窗口大小。提供刷新选项,允许用户调整其终端窗口或刷新时间。然而,界面会在每个间隔自动调整终端窗口大小。该界面显示程序名称,主服务器状态包括二进制日志文件,位置,过滤器,下一个间隔事件的日期时间。也提供向上或向下滚动查看。当时长清单时,滚动选项会启用。用户可以向上箭头键和向下箭头键滚动列表。

使用–verbose选项来查看故障转移期间的健康报告和附加信息。

该工具支持两种操作模式。默认模式是运行在控制台,另一种模式是以守护进程方式运行。以守护进程运行,该工具不具有交互性。所有的事件被写入到日志文件中,可以使用 –report-values 选项来控制。以守护进程运行需要指定–daemon选项。–daemon选项值有:

  • start  启动守护进程。需要–log选项。
  • stop 停止守护进程。如果有指定–pidfile选项,该值需要与start指定的一致。
  • restart 重新启动守护进程。如果有指定–pidfile选项,该值需要与start指定的一致。
  • nodetach 启动守护进程,但是不会从控制台分离进程。需要–log选项。

选项

 注意事项

工具检查服务器和监控状态必需具有相应的权限,如SHOW SLAVE STATUS, SHOW MASTER STATUS。同时,还需要执行故障切换的权限,如STOP SLAVE, START SLAVE, WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS, CHANGE MASTER TO…。还必需要有 REPLICATE SLAVE权限。为了执行成功,主和从需要同样的权限。用户连接到从、候选者和主需要SUPER, GRANT OPTION, REPLICATION SLAVE, RELOAD, DROP, CREATE, INSERT 和 SELECT权限。

故障转移初始化主或新主需要DROP, CREATE, INSERT 和 SELECT权限。任何从成为新主,从,候选者需要同样的权限。该工具在启动时检查主、从和候选者权限。

在启动时,控制台将尝试与主注册。如果另一控制台已经注册了,切换模式为自动或选举,该控制台运行故障转移将被阻止。当一个控制台退出,将从主撤销注册。

IP和主机名混合是不推荐的。复制工具将尝试比较主机名和IP地址作为别名来检查从连接到主。但是,如果不支持反向名称查询,比较可能会失败的。如果没有反向解析能力,复制工具将报告从连接不上主。

控制台将在mysql数据库下创建一个特殊的表来跟踪记录哪些实例与主联系。如果使用–force选项,控制台将删除该表中的行。表结构如下:

当控制台启动时,主的主机名和端口将被插入。在启动时,如果行匹配这些值,控制台无法启动。如果使用–force选项,改行将被删除。

当运行该工具是指定了 –daemon=nodetach 选项,–pidfile选项可以省略。如果使用的话也被忽略的。

当使用外部脚本时,参数传递的顺序如下。例如,假设你的脚本名为 ‘run_before.sh’ ,想要在故障切换前执行。假设主是host1,端口3306,新主是can_host2,端口3308。调用方法如下:

外部脚本参数:

MySQL Failover Option Parameters Passed to External Script
--exec-before master host, master port, candidate host, candidate port
--exec-after new master host, new master port
--exec-fail-check master host, master port
--exec-post-failover (no errors during failover) old master host, old master port, new master host, new master port
--exec-post-failover (errors during failover) old master host, old master port

实例

要启动该程序,必需至少指定–master选项和或者 –discover-slaves-login 或者–slaves选项。

默认的界面显示如下的复制健康报告,该例子中日志文件被启用。启动命令如下:

按“Q”键退出,按“R”键刷新,“H”键将返回到复制健康报告。如果用户按“G”键,GTID报告如下所示,第一页显示主执行的GTID设置:

如果用户继续按下“G”键,将循环显示GTID列表。如果列表长于屏幕大小,将上下滚动显示。在这种情况下,用户可以按上下箭头进行上下滚动。

如果用户按“U”键,显示拓扑结构中使用的UUID列表,如下所示:

如果一旦主被检测到当掉了,故障切换模式为自动或选举,并有可行的候选从,故障转移功能将会自动启动,用户会看到故障转移的信息。当故障切换完成后,5秒后界面返回复制健康监控信息。如下显示故障发生的实例:

在故障转移事件后,复制健康报告显示新的拓扑,如下所示:

如果用户按L键并指定了–log选项,将显示日志条目。如下所示:

权限

用户必须有监控服务器和故障切换配置复制的权限。在主和从上运行mysqlfailover 注册和注销的权限。

具体来说需要的权限有: SUPER, GRANT OPTION, REPLICATION SLAVE, RELOAD, DROP, CREATE, INSERT, 和 SELECT。这些权限需要在所有服务器(主、从、候选者)上授予。