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

目录

一 快速开始

简单故障转移

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 参数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/583459.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每周一算法:单源次短路

题目描述 “您的个人假期”旅行社组织了一次比荷卢经济联盟的巴士之旅。 比荷卢经济联盟有很多公交线路。每天公共汽车都会从一座城市开往另一座城市。沿途汽车可能会在一些城市(零或更多)停靠。 旅行社计划旅途从 S S S 城市出发,到 F …

新书速览|ChatGLM3大模型本地化部署、应用开发与微调

实战文本生成、智能问答、信息抽取、财务预警应用开发,掌握ChatGLM3大模型部署、开发与微调技术 01 本书内容 《ChatGLM3大模型本地化部署、应用开发与微调》作为《PyTorch 2.0深度学习从零开始学》的姊妹篇,专注于大模型的本地化部署、应用开发以及微…

挤压激励注意力 SE | Squeeze-and-Excitation Networks

论文名称:《Squeeze-and-Excitation Networks》 论文地址:https://arxiv.org/pdf/1709.01507.pdf 代码地址: https://github.com/hujie-frank/SENet 卷积神经网络 (CNN) 的核心构建块是卷积运算符,它使网络能够通过在每一层的局…

C++ | Leetcode C++题解之第50题Pow(x,n)

题目: 题解: class Solution { public:double quickMul(double x, long long N) {if (N 0) {return 1.0;}double y quickMul(x, N / 2);return N % 2 0 ? y * y : y * y * x;}double myPow(double x, int n) {long long N n;return N > 0 ? qu…

谷歌CEO谈拥有“最好的”AI、1000 种新云产品和Workspace

谷歌首席执行官桑达尔皮查伊 (Sundar Pichai) 在谷歌财报中发表了大胆言论,其中包括将 Workspace 吹捧为网络安全领域的领导者、谷歌云和 YouTube 到今年年底的总运行额将达到 1000 亿美元,以及为什么需要“强大的合作伙伴计划”来推动人工智能发展。 谷…

70、栈-最小栈

思路: 除了最后一个获取最小值以外,其他都可以使用一个栈来实现,但是如果当前一个最小值被移除了,如果获取第二小的值,这个是需要记录的。所以最好的办法是两个栈。一个作为主栈存放数据,一个作为辅栈&…

C++之类和对象

目录 一:再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 二. static成员 2.2 特性 三. 友元 3.1 友元函数 3.2 友元类 四: 内部类 五:匿名对象 六. 再次理解类和对象 一:再谈构造函数 1.1 构造…

关于discuz论坛网址优化的一些记录(网站地图sitemap提交)

最近网站刚上线,针对SEO做了些操作,为了方便网站网页百度被收录,特此记录下 discuz有免费的sitemap插件可以用,打开后台管理,找到插件栏,然后找到更多插件,进入插件市场。 选择这个免费的sitem…

ios CI/CD 持续集成 组件化专题四-(手动发布私有库-组件化搭建)

一 、创建私有索引库 1.1 、第一步 首先检查本地是否存在需要的私有索引库 pod repo list 例如:dp_base_ios_spec 在本地不存在该私有索引库 1.2 、第二步 在git下下创建一个新的库,这个库用来保存私有库的podspec文件,取名叫xxxSpec用以…

计算机组成实验(5)

一、实验目的和要求 1.1 实验目的 1. 复习二进制加减、乘除的基本法则 2. 掌握补码的基本原理和作用 3. 了解浮点数的表示方法及加法运算法则 4. 进一步了解计算机系统的复杂运算操作 1.2 实验要求 1. 熟悉二进制原码补码的概念,了解二进制加减乘除的原理与操作实现。 …

力扣HOT100 - 207. 课程表

解题思路&#xff1a; class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {int[] inDegree new int[numCourses];//存每个结点的入度List<List<Integer>> res new ArrayList<>();//存结点之间依赖关系Queue<Integer>…

buuctf——web题目练习

1.极客大挑战2019 easysql 密码或者用户输入万能密码即可 关于万能密码的理解和原理&#xff0c;可以参考这篇BUUCTF[极客大挑战 2019] EasySQL 1_[极客大挑战 2019]easysql 1-CSDN博客 2.极客大挑战2019 have fun 题目源码 需要构造payload 网页传参可参考&#xff1a;…

设计模式 基本认识

文章目录 设计模式的作用设计模式三原则设计模式与类图设计模式的分类 设计模式的作用 设计模式是在软件设计过程中针对常见问题的解决方案的一种通用、可重用的解决方案。设计模式提供了一种经过验证的方法&#xff0c;可以帮助开发人员解决特定类型的问题&#xff0c;并在软…

C++常用的输入输出方法(ACM模式)

文章目录 前言一、输入输出方法1、cin2、getline()3、getchar() 二、算法案例1、一维数组1.1 输入固定长度1.2长度不固定 2、固定二维数组3、以非空格隔开的元素输入3、常见数据结构定义以及输入3.1 链表 前言 C中的输入输出函数有很多&#xff0c;我们本章只针对大部分算法题…

Makefile 快速入门

参考自:Makefile 20分钟入门&#xff0c;简简单单&#xff0c;展示如何使用Makefile管理和编译C代码_哔哩哔哩_bilibili 注: 视频中用的是C&#xff0c;博主这里用C语言实现 喜欢老师的于老师的还请多多点赞&#xff0c;觉得博主写得不错的&#xff0c;也可以点赞、收藏哦 本…

mars3d实现获取线上不同历里程的坐标

mars3d实现获取线上不同历里程的坐标应用效果 线路数据是这样的&#xff0c;由很多段组成的&#xff0c;是不是就只能一段一段去计算看处于哪一段上具体位置 相关说明&#xff1a;想要实现以上效果的话&#xff0c;mars3d实现需要以下两点 1、需要合并线 2、可以利用 http://m…

学习周报:文献阅读+Fluent案例+有限体积法理论学习

目录 摘要 Abstract 文献阅读&#xff1a;基于物理信息神经网络的稀疏数据油藏模拟 文献摘要 文章讨论|结论 各方程和原理简介 PINN简介 域分解 实验设置 单相油藏问题 油水两相问题 Fluent实例&#xff1a;Y型弯管中的流体混合分析 几何建模部分 网格划分 求解器设…

贝叶斯统计实战:Python引领的现代数据分析之旅

贝叶斯统计这个名字取自长老会牧师兼业余数学家托马斯贝叶斯(Thomas Bayes&#xff0c;1702—1761)&#xff0c;他最先推导出了贝叶斯定理&#xff0c;该定理于其逝世后的1763年发表。但真正开发贝叶斯方法的第一人是Pierre-Simon Laplace(1749—1827)&#xff0c;因此将其称为…

C++|STL-list运用(1)

cplusplus.com/reference/list/list/?kwlist list介绍 list是一个双向循环链表&#xff0c;双向循环链表它的每个节点都有两个链接&#xff0c;一个指向前一个节点&#xff0c;另一个指向下一个节点&#xff0c;且最后一个结点指向头节点。 结点组成 1.数据域 2.指针域 &a…

多校园版 校园跑腿小程序源码系统 跑腿达人自主入住接单 带完整的安装代码包以及部署教程

近年来&#xff0c;随着移动互联网的普及和高校信息化的推进&#xff0c;校园跑腿服务逐渐成为了校园内的一种新兴业态。然而&#xff0c;市场上的校园跑腿小程序大多功能单一、缺乏个性化定制&#xff0c;难以满足不同高校、不同用户的需求。因此&#xff0c;小编给大家分享一…
最新文章