【MHA】MySQL高可用MHA介绍2-安装,配置,要求与限制

10 篇文章 0 订阅

目录

一 快速开始

简单故障转移

1 构建普通的复制环境

2 在host1-host4上安装MHA Node

3 在host4(manager_host)上安装MHA Manager

4 创建配置文件

5 检查SSH连接

6 检查复制配置

7 启动manager

8 检查manager状态

9 停止manager

10 测试主故障转移

11 下一步

二 安装

1 下载 MHA Node 和 MHA Manager

2 安装 MHA Node

在RHEL/CentOS系统上

在Ubuntu/Debian系统上

通过源码进行安装

3 安装 MHA Manager

在RHEL/CentOS发行版上,

 在Ubuntu/Debian系统上

通过源码进行安装MHA Manager

三 配置

1 编写应用程序配置文件

2 编写全局配置文件

3 Binlog Server

四 要求与限制

1 SSH公钥认证

2 操作系统

3 单可写主服务器和多个从服务器或只读主服务器

4 管理三层或更多层次的复制环境

5 MySQL版本5.0或更高版本

6 对于MySQL 5.1+使用mysqlbinlog 5.1+

7 候选主服务器必须启用log-bin

8 所有服务器上的二进制日志和中继日志过滤规则必须相同

9 候选主服务器上必须存在复制用户

10 保留中继日志并定期清除

purge_relay_logs脚本

定期运行purge_relay_logs脚本的计划

不要在使用基于语句的二进制日志记录(SBR)时使用 LOAD DATA INFILE

五 基于 GTID 的故障切换


一 快速开始

简单故障转移

1 构建普通的复制环境

MHA本身不会构建复制环境,因此您需要自己搭建MySQL复制环境。换句话说,您可以在现有环境中使用MHA。例如,假设有四个主机:host1、host2、host3、host4。主服务器当前正在host1上运行,并且两个从服务器正在host2和host3上运行。因此,MySQL服务器正在host1、host2和host3上运行。让我们在host4(manager_host)上运行MHA Manager。

2 在host1-host4上安装MHA Node

请参阅安装MHA Node。

3 在host4(manager_host)上安装MHA Manager

请参阅安装MHA Manager。MHA Manager依赖于MHA Node软件包,因此您需要在管理服务器上同时安装这两个软件包。

4 创建配置文件

下一步是在MHA Manager上创建一个配置文件。参数包括每个MySQL服务器的主机名、MySQL用户名和密码、MySQL复制用户名和密码、工作目录名称等。所有参数都在参数页面中描述。

manager_host$ cat /etc/app1.cnf

[server default]
# mysql user and password
user=root
password=mysqlpass
ssh_user=root
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1

[server1]
hostname=host1

[server2]
hostname=host2

[server3]
hostname=host3

请注意,您没有指定host1是当前的主服务器。MHA会在内部自动检测当前的主服务器。

5 检查SSH连接

MHA Manager会通过SSH内部调用MHA Node软件包中包含的程序。MHA Node程序还通过SSH(scp)将差异中继日志文件发送给其他非最新的从服务器。为了使这些过程非交互式,需要设置SSH公钥身份验证。MHA Manager提供了一个简单的检查程序“masterha_check_ssh”,用于验证彼此之间是否可以建立非交互式的SSH连接。

# masterha_check_ssh --conf=/etc/app1.cnf

Sat May 14 14:42:19 2011 - [warn] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sat May 14 14:42:19 2011 - [info] Reading application default configurations from /etc/app1.cnf..
Sat May 14 14:42:19 2011 - [info] Reading server configurations from /etc/app1.cnf..
Sat May 14 14:42:19 2011 - [info] Starting SSH connection tests..
Sat May 14 14:42:19 2011 - [debug]  Connecting via SSH from root@host1(192.168.0.1) to root@host2(192.168.0.2)..
Sat May 14 14:42:20 2011 - [debug]   ok.
Sat May 14 14:42:20 2011 - [debug]  Connecting via SSH from root@host1(192.168.0.1) to root@host3(192.168.0.3)..
Sat May 14 14:42:20 2011 - [debug]   ok.
Sat May 14 14:42:21 2011 - [debug]  Connecting via SSH from root@host2(192.168.0.2) to root@host1(192.168.0.1)..
Sat May 14 14:42:21 2011 - [debug]   ok.
Sat May 14 14:42:21 2011 - [debug]  Connecting via SSH from root@host2(192.168.0.2) to root@host3(192.168.0.3)..
Sat May 14 14:42:21 2011 - [debug]   ok.
Sat May 14 14:42:22 2011 - [debug]  Connecting via SSH from root@host3(192.168.0.3) to root@host1(192.168.0.1)..
Sat May 14 14:42:22 2011 - [debug]   ok.
Sat May 14 14:42:22 2011 - [debug]  Connecting via SSH from root@host3(192.168.0.3) to root@host2(192.168.0.2)..
Sat May 14 14:42:22 2011 - [debug]   ok.
Sat May 14 14:42:22 2011 - [info] All SSH connection tests passed successfully.

如果masterha_check_ssh停止并出现错误或要求进行身份验证,则SSH配置对于MHA的正常工作无效。您需要修复它然后再次尝试。最可能的原因是SSH公钥身份验证未正确设置。

6 检查复制配置

为了使MHA正常工作,配置文件中定义的所有MySQL主服务器和从服务器都必须正常工作。MHA Manager提供了一个名为masterha_check_repl的命令,用于快速检查复制的健康状况。

manager_host$ masterha_check_repl --conf=/etc/app1.cnf
...
MySQL Replication Health is OK.

如果在这里遇到任何错误,请检查日志并修复问题。当前的主服务器不能是从服务器,并且所有其他从服务器必须从主服务器复制。TypicalErrors页面可能有助于修复设置错误。

7 启动manager

您已配置了MySQL复制,安装了MHA Node和MHA Manager,并配置了SSH公钥身份验证。下一步是启动MHA Manager。可以使用masterha_manager命令启动MHA Manager。

manager_host$ masterha_manager --conf=/etc/app1.cnf
....
Sat May 14 15:58:29 2011 - [info] Connecting to the master host1(192.168.0.1:3306) and sleeping until it doesn't respond..

如果所有配置都有效,masterha_manager会检查MySQL主服务器的可用性,直到主服务器死机。如果masterha_manager在监视主服务器之前出现错误而停止,请检查错误日志并修复配置。所有日志默认打印到标准错误(STDERR),但可以在"manager_log"配置参数中更改。常见的错误是MySQL复制配置无效,ssh_user没有足够的权限(最低要求是中继日志的读权限和远程工作目录的写权限)。默认情况下,masterha_manager在前台运行。如果向masterha_manager发送SIGINT(发送Ctrl+C),masterha_manager将停止监控并退出。

8 检查manager状态

在MHA Manager监视MySQL主服务器之后,除非主服务器变得不可达或管理器自身终止,否则不会打印任何内容。您可能想要检查MHA Manager是否真的正常工作。masterha_check_status命令可用于检查当前MHA Manager的状态。以下是一个示例。

manager_host$ masterha_check_status --conf=/etc/app1.cnf
app1 (pid:5057) is running(0:PING_OK), master:host1

"app1"是MHA内部处理的应用程序名称,是配置文件的前缀名称。

如果管理器停止或配置文件无效,则将返回以下错误:

manager_host$ masterha_check_status --conf=/etc/app1.cnf
app1 is stopped(1:NOT_RUNNING).

9 停止manager

您可以使用masterha_stop命令停止MHA Manager。

manager_host$ masterha_stop --conf=/etc/app1.cnf
Stopped app1 successfully.

如果无法停止(即挂起),请添加“--abort”参数。

一旦您了解了如何停止它,请再次启动masterha_manager。

10 测试主故障转移

现在MHA Manager正在监控MySQL主服务器的可用性。接下来,让我们测试主故障转移是否正常工作。为了模拟这种情况,您可以简单地在主服务器上杀死mysqld。

host1$  killall -9 mysqld mysqld_safe

在某些发行版(如Ubuntu)上,mysqld将通过angel进程自动重新启动。如果mysqld重新启动非常快(几秒钟),则在MHA开始故障转移之前,来自MHA的ping将再次成功。在这种情况下,故障转移不会开始。如果重新启动mysqld花费很长时间(即InnoDB崩溃恢复需要2分钟),则故障转移将开始。

如果您在测试杀死mysqld时遇到困难,或者想要测试Linux内核方面的问题,那么触发内核panic很容易。

host1#  echo c > /proc/sysrq-trigger

检查MHA管理器上的日志,并验证host2是否成为新主服务器,host3是否从host2复制。

当故障转移完成(或以错误结束)时,MHA Manager进程将停止。这是一种预期行为。如果您想永久运行MHA Manager,请阅读“在后台运行MHA Manager”部分。

11 下一步

现在我们已经完成了主故障转移的基本测试。在实践中,您可能希望执行以下操作。

  • 通过两个或更多网络路由检查MySQL主服务器的可用性,请参阅secondary_network_script参数的详细信息。
  • 编写主IP故障转移脚本 在上述教程中,新主服务器的IP地址(host2的IP)已从死掉的主服务器的IP地址(host1的IP)更改。因此,应用程序必须更改主服务器的IP地址。这并不有趣。为了解决此问题,使用master_ip_failover_script参数会有所帮助。您可以编写任何程序来更新主服务器的IP地址。例如,接管虚拟IP地址,更新全局目录数据库等。MHA Manager包中包含了一个示例脚本(请参阅MHA Manager目录)/samples/scripts/master_ip_failover。示例脚本包含在MHA Manager压缩包和GitHub分支中。
  • 在后台运行MHA Manager有关详细信息,请参阅Runnning_Background页面。
  • 关闭MySQL主服务器,以便永远不会发生脑裂,请参阅shutdown_script参数和MHA Manager包中包含的一个示例脚本(请参阅MHA Manager目录)/samples/scripts/power_manager。
  • 故障转移完成后发送电子邮件,请参阅report_script参数和MHA Manager包中包含的一个示例脚本(请参阅MHA Manager目录)/samples/scripts/send_report。
  • 故障转移错误和手动故障转移测试

您可能希望测试故障情况。请参阅下面的示例。

  terminal1# masterha_manager --conf=/etc/app1.cnf
  terminal2# mysql -hhost2 db1 -e "insert into t1 values (100, 100, 100)"
  terminal2# mysql -hhost1 db1 -e "insert into t1 values (100, 100, 100)"
  Check replication stops with error
  kill master
  Check master failover does not work.
  mysql_host2> set global slave_sql_skip_counter=1;
  mysql_host2> start slave;
  Check replication starts again.
  
  Test manual failover
  # remove error file
  # rm -f /var/log/masterha/mha_test50/mha_test50.failover.error
  # masterha_master_switch  --master_state=dead --conf=/path/to/conf --dead_master_host=host1

二 安装

MHA由MHA Manager和MHA Node两个包组成。MHA Manager运行在管理服务器上,而MHA Node运行在每个MySQL服务器上。MHA Node程序并不总是运行,而是在需要时(在配置检查、故障转移等时)从MHA管理程序中调用。MHA Manager和MHA Node都是用Perl编写的。

1 下载 MHA Node 和 MHA Manager

可以从 下载  部分下载MHA Node和MHA Manager。这些是稳定的软件包。

如果您想尝试源码开发,请检出GitHub源树。MHA Manager托管在这里,MHA Node托管在这里

官方文档中的下载地址不能下载最新版本的Node 和 Manager 了,可以从以下地址下载最新的0.58版本

Releases · yoshinorim/mha4mysql-manager · GitHub

2 安装 MHA Node

MHA Node具有以下脚本和依赖的Perl模块。

  • save_binary_logs:保存并复制挂掉的主服务器的二进制日志
  • apply_diff_relay_logs:识别差异中继日志事件并应用所有必要的日志事件
  • purge_relay_logs:清除中继日志文件

您需要将MHA Node安装到所有MySQL服务器(主服务器和从服务器)。您还需要在管理服务器上安装MHA Node,因为MHA Manager模块在内部依赖于MHA Node模块。MHA Manager在内部通过SSH连接到受管MySQL服务器并执行MHA Node脚本。MHA Node除了DBD::mysql之外不依赖于任何外部Perl模块,因此您应该能够轻松安装。

您可以按照以下步骤安装MHA Node的rpm软件包。

RHEL/CentOS系统
## If you have not installed DBD::mysql, install it like below, or install from source.
yum install perl-DBD-MySQL

## Get MHA Node rpm package from "Downloads" section.
rpm -ivh mha4mysql-node-X.Y-0.noarch.rpm
Ubuntu/Debian系统
## If you have not installed DBD::mysql, install it like below, or install from source.
# apt-get install libdbd-mysql-perl

## Get MHA Node deb package from "Downloads" section.
# dpkg -i mha4mysql-node_X.Y_all.deb
通过源码进行安装
## Install DBD::mysql if not installed
$ tar -zxf mha4mysql-node-X.Y.tar.gz
$ perl Makefile.PL
$ make
$ sudo make install

3 安装 MHA Manager

MHA Manager具有诸如masterha_manager、masterha_master_switch等管理命令行程序,以及相关的Perl模块。MHA Manager依赖于以下Perl模块。在安装MHA Manager之前,您需要先安装它们。不要忘记安装MHA Node。

  • MHA Node package
  • DBD::mysql
  • Config::Tiny
  • Log::Dispatch
  • Parallel::ForkManager
  • Time::HiRes (included from Perl v5.7.3)

您可以按照以下步骤安装MHA Manager的rpm软件包。

在RHEL/CentOS发行版上,
## Install dependent Perl modules
# yum install perl-DBD-MySQL
# yum install perl-Config-Tiny
# yum install perl-Log-Dispatch
# yum install perl-Parallel-ForkManager

## Install MHA Node, since MHA Manager uses some modules provided by MHA Node.
# rpm -ivh mha4mysql-node-X.Y-0.noarch.rpm

## Finally you can install MHA Manager
# rpm -ivh mha4mysql-manager-X.Y-0.noarch.rpm
 在Ubuntu/Debian系统
## Install dependent Perl modules
# apt-get install libdbd-mysql-perl
# apt-get install libconfig-tiny-perl
# apt-get install liblog-dispatch-perl
# apt-get install libparallel-forkmanager-perl

## Install MHA Node, since MHA Manager uses some modules provided by MHA Node.
# dpkg -i mha4mysql-node_X.Y_all.deb

## Finally you can install MHA Manager
# dpkg -i mha4mysql-manager_X.Y_all.deb
通过源码进行安装MHA Manager
## Install dependent Perl modules
# apt-get install libdbd-mysql-perl
# apt-get install libconfig-tiny-perl
# apt-get install liblog-dispatch-perl
# apt-get install libparallel-forkmanager-perl

## Install MHA Node, since MHA Manager uses some modules provided by MHA Node.
# dpkg -i mha4mysql-node_X.Y_all.deb

## Finally you can install MHA Manager
# dpkg -i mha4mysql-manager_X.Y_all.deb

三 配置

1 编写应用程序配置文件

要使MHA正常工作,您必须创建一个配置文件并设置参数。参数包括每个MySQL服务器的主机名、MySQL用户名和密码、工作目录名称等。所有参数都在参数页面进行了描述。

 所有参数解释

https://raw.githubusercontent.com/wiki/yoshinorim/mha4mysql-manager/Parameters.md

以下是一个示例配置文件。

manager_host$ cat /etc/app1.cnf

[server default]
# mysql user and password
user=root
password=mysqlpass
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# manager log file
manager_log=/var/log/masterha/app1/app1.log
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1

[server1]
hostname=host1

[server2]
hostname=host2

[server3]
hostname=host3

所有参数必须遵循“param=value”的语法。例如,以下参数设置是不正确的。

[server1]
hostname=host1
# incorrect: must be "no_master=1"
no_master

应用程序范围的参数应该写在 [server default] 块中。在 [serverN] 块中,您应该设置局部范围的参数。主机名是必需的局部范围参数,因此必须在此处写入。块名称应以“server”开头。在内部,服务器配置按块名称排序,排序顺序在MHA确定新主服务器时很重要(有关详细信息,请参阅FAQ)。

2 编写全局配置文件

如果您计划从单个管理服务器管理两个或更多MySQL应用程序((主服务器,从服务器)对),则创建全局配置文件会使配置变得更加容易。一旦您在全局配置文件中编写了参数,您就不需要为每个应用程序设置参数。如果在/etc/masterha_default.cnf创建一个文件,MHA Manager脚本会自动将该文件读取为全局配置文件。

您可以在全局配置文件中设置应用程序范围的参数。例如,如果所有MySQL服务器上的MySQL管理用户和密码相同,您可以在这里设置“user”和“password”。

全局配置示例:

[server default]
user=root
password=rootpass
ssh_user=root
master_binlog_dir= /var/lib/mysql
remote_workdir=/data/log/masterha
secondary_check_script= masterha_secondary_check -s remote_host1 -s remote_host2
ping_interval=3
master_ip_failover_script=/script/masterha/master_ip_failover
shutdown_script= /script/masterha/power_manager
report_script= /script/masterha/send_master_failover_mail

这些参数适用于所有由在主机上运行的MHA Manager监控的应用程序。

应用程序配置文件应分别编写。以下示例是配置app1(host1-4)和app2(host11-14)。

app1:

manager_host$ cat /etc/app1.cnf

[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/app1.log

[server1]
hostname=host1
candidate_master=1

[server2]
hostname=host2
candidate_master=1

[server3]
hostname=host3

[server4]
hostname=host4
no_master=1

在上述情况下,MHA Manager在/var/log/masterha/app1下生成工作文件(包括状态文件),并在/var/log/masterha/app1/app1.log生成日志文件。在监视其他应用程序时,您需要设置唯一的目录/文件名称。

app2:

manager_host$ cat /etc/app2.cnf

[server default]
manager_workdir=/var/log/masterha/app2
manager_log=/var/log/masterha/app2/app2.log

[server1]
hostname=host11
candidate_master=1

[server2]
hostname=host12
candidate_master=1

[server3]
hostname=host13

[server4]
hostname=host14
no_master=1

如果在全局配置文件和应用程序配置文件中设置了相同的参数,则使用后者(应用程序配置)。

3 Binlog Server

从MHA版本0.56开始,MHA支持新的[section]。在binlog部分中,您可以定义mysqlbinlog流式传输服务器。当MHA执行基于GTID的故障转移时,MHA会检查binlog服务器,如果binlog服务器领先于其他从服务器,MHA会在恢复之前将差异binlog事件应用于新主服务器。当MHA执行非基于GTID的(传统的)故障转移时,MHA会忽略binlog服务器

以下是一个示例配置。

manager_host$ cat /etc/app1.cnf

[server default]
# mysql user and password
user=root
password=mysqlpass
# working directory on the manager
manager_workdir=/var/log/masterha/app1
# manager log file
manager_log=/var/log/masterha/app1/app1.log
# working directory on MySQL servers
remote_workdir=/var/log/masterha/app1

[server1]
hostname=host1

[server2]
hostname=host2

[server3]
hostname=host3

[binlog1]
hostname=binlog_host1

[binlog2]
hostname=binlog_host2

四 要求与限制

要使MHA真正发挥作用,您需要验证以下设置。大多数设置都会在启动masterha_manager或masterha_check_repl时自动检查。

1 SSH公钥认证

MHA Manager内部通过SSH连接到MySQL服务器。最新的从服务器上的MHA Node也通过SSH(scp)内部发送中继日志文件到其他从服务器。为了使这些过程自动化,通常建议启用SSH公钥认证而不使用密码。您可以使用MHA Manager中包含的masterha_check_ssh命令来检查SSH连接是否正常工作。

当您使用masterha_secondary_check脚本检查附加网络连接时,您还需要验证MHA Manager到远程主机的SSH公钥访问是否可用。

MHA Manager内部并行执行恢复。在生成差异中继日志文件时,MHA以并行方式连接到最新的从服务器,并生成并发送差异中继日志文件到非最新的从服务器。如果您有数十个从服务器或将数十个MySQL实例合并到单个操作系统中,sshd可能会拒绝SSH连接请求,这将导致从服务器恢复错误。为了避免此问题,请提高/etc/ssh/sshd_config中的MaxStartups参数(默认值为10)并重新启动sshd。

2 操作系统

MHA仅在Linux上进行了测试。

3 单可写主服务器和多个从服务器或只读主服务器

在主服务器崩溃的情况下,MHA解决了从服务器之间的一致性问题。此外,MHA尝试保存从主服务器中未发送的二进制日志事件,并将事件应用于所有从服务器。如果您只有一个从服务器,则无需关心从服务器之间的一致性问题。即使您仅使用一个从服务器,只要通过SSH连接到崩溃的主服务器,MHA仍然有助于保存事件,但是使用半同步复制也可以解决此问题。

从MHA Manager版本0.52开始,支持多主复制配置。以下是使MHA与多主工作的一些注意事项。

只允许一个主要主服务器(可写)。其他MySQL主服务器必须设置“read-only=1”。 默认情况下,所有受管理的服务器(在MHA配置文件中定义)应该在两层复制通道中。有关详细信息,请参见下文。

在MHA Manager版本0.52之前,MHA检查所有受管理的主机,并仅在所有从服务器从同一主服务器复制时才开始监视/故障转移。也就是说,MHA不支持多主配置。通常,只要MHA管理自动故障转移,使用多主配置的原因是有限的,例如在线模式更改。如果您想临时使用多主配置(即仅用于模式更改),只需停止MHA并在操作期间配置多主。操作完成后,再次进行单主和多个从服务器配置,然后重新启动MHA。

4 管理三层或更多层次的复制环境

MHA不支持默认的三层或更多层次的复制结构(例如,Master1->Master2->Slave3)。 MHA只处理直接复制自当前主要主服务器的从服务器的故障转移和恢复。MHA可以管理master1和master2,并在master1崩溃时将master2提升为新主服务器,但是MHA无法监视和恢复slave3,因为slave3从不同的主服务器(master2)复制。为了使MHA与此类结构一起工作,可以进行以下配置。

  • 在这种情况下,仅在MHA配置文件中设置主服务器和第二层主机(master1和master2)
  • 使用“multi_tier_slave=1”参数并在MHA配置文件中设置所有主机

在这两种情况下,MHA只管理主要主服务器和第二层从服务器。这仍然非常有帮助,因为在主服务器(master1)崩溃的情况下可以进行从master1到master2的自动故障转移,并且第三层从服务器仍然可以正常工作。有关详细信息,请参阅UseCases页面。

5 MySQL版本5.0或更高版本

MHA支持MySQL版本5.0或更高版本。MHA不支持MySQL 4.1或更早版本。这是因为从MySQL 5.0开始,二进制日志格式发生了变化(称为binlog v4格式)。当MHA解析二进制日志以识别目标中继日志位置时,binlog格式必须是v4,因此MySQL 4.1在此处无法工作。MySQL 5.0或更高版本中的mysqlbinlog还要求binlog格式为v4。此外,较早版本的MySQL存在一些围绕MySQL复制处理的严重问题,因此强烈建议使用更高版本。特别是如果您使用的是MySQL 5.0.60之前的版本,请考虑升级。

6 对于MySQL 5.1+使用mysqlbinlog 5.1+

MHA使用mysqlbinlog将binlog事件应用于目标从服务器。如果主服务器使用基于行的格式,则行事件将写入二进制日志中。这样的二进制日志只能由MySQL 5.1或更高版本中的mysqlbinlog解析,因为MySQL 5.0中的mysqlbinlog不支持基于行的格式。可以如下检查mysqlbinlog(和mysql)版本。

[app@slave_host1]$ mysqlbinlog --version
mysqlbinlog Ver 3.3 for unknown-linux-gnu at x86_64

如果它包含在MySQL 5.1中,则mysqlbinlog版本应为3.3或更高。 MHA在所有从服务器上内部检查MySQL和mysqlbinlog版本。如果mysqlbinlog版本为3.2或更早版本,并且MySQL版本为5.1或更高版本,则MHA在开始监视之前会停止并显示错误。

7 候选主服务器必须启用log-bin

如果当前从服务器未设置log-bin,则显然它们无法成为新主服务器。MHA Manager内部检查log-bin设置,并且不会将其提升为新主服务器。如果当前没有从服务器设置log-bin,则MHA Manager不会继续执行故障转移。

8 所有服务器上的二进制日志和中继日志过滤规则必须相同

复制过滤规则(binlog-do-db,replicate-ignore-db等)在所有MySQL服务器上必须相同。MHA在启动时检查过滤规则,并且如果过滤规则不相同,则不会开始监视或故障转移。

9 候选主服务器上必须存在复制用户

故障转移完成后,所有其他从服务器都会执行CHANGE MASTER TO语句。要开始复制,必须在新主服务器上存在一个复制用户(具有REPLICATION SLAVE权限)。

10 保留中继日志并定期清除

默认情况下,从服务器上的中继日志会在SQL线程执行完毕后自动删除。但是,可能仍然需要这些中继日志来恢复其他从服务器。因此,您需要禁用自动中继日志清除,并定期清除旧的中继日志。但是,当手动清除中继日志时,您需要注意复制延迟问题。在ext3文件系统上,删除大文件需要很长时间,这将导致严重的复制延迟。为了避免复制延迟,临时创建中继日志的硬链接是有帮助的。有关详细信息,请参阅两张幻灯片。

purge_relay_logs脚本

MHA Node有一个命令行工具“purge_relay_logs”,用于执行上述幻灯片中描述的所有操作。也就是说,它创建硬链接,执行“SET GLOBAL relay_log_purge=1”,等待几秒钟以使SQL线程可以切换到新的中继日志(只要它明显落后),并执行“SET GLOBAL relay_log_purge=0”。

purge_relay_logs需要以下参数。purge_relay_logs内部连接到MySQL从服务器,因此需要MySQL身份验证参数。

  • --user MySQL username. By default, it's root.

  • --password MySQL password for --user. By default, it's empty.

  • --host MySQL hostname. By default, it's 127.0.0.1. --host must be the same server where you run purge_relay_logs. For example, if you pass --host=host2 on host1, purge_relay_logs aborts. If you have virtual hostname vhost1 on host1, passing --host=vhost1 on host1 is valid and purge_relay_logs does not abort.

  • --port MySQL port number. By default, it's 3306.

  • --workdir Tentative directory where hard linked relay logs are created and removed. After executing the script successfully, hard-linked relay log files are deleted. By default, it's /var/tmp. If you put relay log files on a different OS partition from /var/tmp, you need to explicitly set this parameter. This is because creating hard links between different OS partitions are not supported (You'll get "Invalid cross-device link" error). In this case, set --workdir to a directory which resides on a same OS partition as relay log files.

  • --disable_relay_log_purge By default, if relay_log_purge is ON(1) in MySQL, purge_relay_logs script exits without doing anything. So relay_log_purge is still ON(1). By setting --disable_relay_log_purge, purge_relay_logs script does not exit and automatically sets relay_log_purge to 0. So after executing the script, relay_log_purge becomes OFF(0).

定期运行purge_relay_logs脚本的计划

purge_relay_logs会在不阻塞SQL线程的情况下移除中继日志。中继日志需要定期清理(例如,每天一次,每6小时一次等),因此应该在每个从服务器上定期通过作业调度程序调用purge_relay_logs脚本。例如,您可以按照以下方式从cron中调用purge_relay_logs

[app@slave_host1]$ cat /etc/cron.d/purge_relay_logs
# purge relay logs at 5am
0 5 * * * app /usr/bin/purge_relay_logs --user=root --password=PASSWORD --disable_relay_log_purge >> /var/log/masterha/purge_relay_logs.log 2>&1

建议在从服务器之间使用不同的时间调用 cron。如果所有从服务器同时调用 purge_relay_logs,那么在发生故障时,可能会导致没有一个从服务器拥有必要的中继日志事件。

不要在使用基于语句的二进制日志记录(SBR)时使用 LOAD DATA INFILE

当主服务器在使用基于语句的二进制日志记录(SBR)完成 LOAD DATA INFILE 后立即崩溃时,如果使用非事务性存储引擎或过旧的 MySQL 版本(例如 5.0.45 等),MHA 可能无法生成差异中继日志事件。使用 LOAD DATA INFILE 与 SBR 存在一些已知问题,并且在 MySQL 5.1 中已被弃用。LOAD DATA INFILE 也会导致显著的复制延迟,因此没有积极的原因使用它。

如果您想使用 LOAD DATA,请使用 SET sql_log_bin=0; LOAD DATA … ; SET sql_log_bin=1; 更为推荐的方法。

五 基于 GTID 的故障切换

从 MHA 0.56 开始,MHA 支持基于 GTID 和传统的中继日志的故障切换。MHA 会自动区分选择哪种故障切换方式。要进行基于 GTID 的故障切换,需要满足以下所有条件:

使用 MySQL 5.6(或更新版本) 所有 MySQL 实例都使用 gtid_mode=1 至少有一个实例已启用 Auto_Position 参数

  • 33
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值