共计 10561 个字符,预计需要花费 27 分钟才能阅读完成。
这篇文章主要讲解了“MYSQL 的 MHA 参数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“MYSQL 的 MHA 参数有哪些”吧!
Local:指每一个配置块内部。Local 功能的参数需要放置在 [server_xxx] 块下面
App:参数作用于 master/slave,这些参数需要配置在[server_default] 块的下面
Global : 作用于 master/slave,Global 级别的参数用于管理多组 master/slave 结构,可以统一化管理一些参数。
hostname
配置 MySQL 服务器的机器名或是 IP 地址,这个配置项是必须的,而且只能配置在 [server_xxx] 这个块下面。
如:
参数名 是否必须 作用域 默认值 例子及说明
hostname Yes Local Only – hostname=mysql_server1, hostname=192.168.0.1, etc
ip
MySQL 服务器的 ip 地址。默认从 gethostname($hostname)中获得。默认不用配置这个参数,MHA 可以通过 hostname 自动获取,MHA 通过 IP 地址连接 MySQL 服务器及 SSH 连接。
如:
参数名 是否必须 作用域 默认值 例子及说明
ip No Local Only 通过 gethostbyname($hostname) 获得 ip=192.168.1.3
port
MySQL 运行的端口号。默认是 3306. MHA 使用 IP 和端口号连接 MySQL
如:
参数名 是否必须 作用域 默认值 例子及说明
port No Local/App/Glbal 3306 port=3306
ssh_host
(从 MHA 0.53 后开始支持)MHA 要 ssh 上 MySQL 目标服务器使用 hostname 或是 ip 地址。这个参数主要用于在使用多个 VLAN 的环境中。为了安全原因 ssh 默认不允许。默认这个参数和 hostname 相同。
如:
参数名 是否必须 作用域 默认值 例子及说明
ssh_host No Local Only 和 hostname 相同 ssh_host=mysql_server1, ssh_host=192.168.0.1, etc
ssh_ip
(从 MHA 0.53 后开始支持)和 ssh_host 作用相同。默认是 gethostname($ssh_host)获得。
如:
参数名 是否必须 作用域 默认值 例子及说明
ssh_ip No Local Only gethostbyname($ssh_host) ssh_ip=192.168.1.3
ssh_port
(从 MHA 0.53 后开始支持)SSH 使用的端口号,默认是 22.
如:
参数名 是否必须 作用域 默认值 例子及说明
ssh_port No Local/App/Global 22 ssh_port=22
ssh_connection_timeout
(从 MHA 0.54 后支持)默认是 5 秒。在没添加这个参数之前 ssh 超时时间是写死的。
如:
参数名 是否必须 作用域 默认值 例子及说明
ssh_connection_timeout No Local/App/Global 5 ssh_connect_timeout=5
ssh_options
(从 MHA 0.53 后支持)添加 ssh 命令行的支持参数,例如加上特别文件名的 key 的支持等。
如:
参数名 是否必须 作用域 默认值 例子及说明
ssh_options No Local/App/Global“”空的 ssh_options=”-i /root/.ssh/id_dsa2″
candidate_master
你可能对于同一组 slave 中有着不同的规划,有的其望在 Master 故障时,提升为新的 Master(如:Raid1 的 slave 比 Raid0 的 slave 更适合做 Master)
这个参数的作用是当设计 candidate_master = 1 时,这个服务器有较高的优先级提升为新的 master(还要具备:开启 binlog, 复制没有延迟)。所以当设置了 candidate_master = 1 的机器在 master 故障时必然成为新的 master. 但这是很有用的设置优先级的一个参数。
如果设置了多台机器的 caddidate_master = 1 , 优先策略依赖于块名字 ([server_xxx]). [server_1] 优衔权高于[server_2].
如:
参数名 是否必须 作用域 默认值 例子及说明
candidate_master No Local Only 0 candidate_mast=1
no_master
当设置了 no_master = 1 的服务器,这个服务器永远不会提升为新的 master. 这个参数据对于永远不期望成为 master 的机器很有用。如:你可能需要在使用 raid0 的机器上设置 no_master = 1 或是你希望在远程的 idc 里运行一个 slave. 注意:当没有可以成为新 master 的机器是 MHA 就直接退出来了同时停止监控和 master 故障切换。
如:
参数名 是否必须 作用域 默认值 例子及说明
no_master No Local Only 0 no_master=1
ignore_fail
在默认情况下,MHA manager 不会在 slave 存在故障的情况下(已经不能通过 SSH/MySQL 进行连接,或是 SQL Thread 已经停止出错,其它原因)的情况下进行 Master 的故障切换(当不存在 slave 时 MHA manager 也会退出)。但有些情况下你期望在 slave 存在问题的情况下,也进行故障切换。所以当设置了 ignore_fail = 1 时,MHA 会在所有的机器有问题的时间也会进行故障切换。默认是 0.
如:
参数名 是否必须 作用域 默认值 例子及说明
ignore_fail No Local Only 0 ignore_fail=1
#skip_init_ssh_check#
在 MHA manager 启动时跳过 ssh 检查。
如:
参数名 是否必须 作用域 默认值 例子及说明
skip_init_ssh_check No Local Only 0 skip_init_ssh_check=1
skip_reset_slave
(从 MHA 0.56 开始支持) Master 故障切换后新的 master 上执行 RESET SLAVE(ALL).
如:
参数名 是否必须 作用域 默认值 例子及说明
skip_reset_slave No Local/App/Global 0 skip_reset_slave=1
user
用于管理 MySQL 的用户名。这个最后需要 root 用户,因为它需要执行:stop slave; change master to , reset slave. 默认: root
如:
参数名 是否必须 作用域 默认值 例子及说明
user No Local/App/Global root user=mysql_root
password
MySQL 的管理用户的密码。默认是空的
如:
参数名 是否必须 作用域 默认值 例子及说明
password No Local/App/Global 空的 password=rootpass
repl_user
MySQL 用于复制的用户,也是用于生成 CHANGE MASTER TO 每个 slave 使用的用户。这个用户必须有 REPLICATION SLAVE 权限在新的 Master 上。默认情况下 repl_user 会在将来成为 master 的机器上运行 show slave status 获取到。
如:
参数名 是否必须 作用域 默认值 例子及说明
repl_user No Local/App/Global 从 show slave status repl_user=repl
repl_password
MySQL 中 repl_user 用户的密码。默认是当前复制用的密码。当你使用 online_master_switch 时,当使用–orig_master_is_new_slave(原来的 Master 成为新 Master 的一个 slave)时,如果没有 repl_password 开启同步就会失败了。因为当前 master 上用于复制的用户名和密码都是空的(MHA 在原来的 Master 上执行 change master to 时没有带复制的密码,虽然其它 slave 上设置了复制的密码)
如:
参数名 是否必须 作用域 默认值 例子及说明
repl_password No Local/App/Global 当前复制用的密码 repl_password=replpas
disable_log_bin
当设置了这个参数,在 slave 应用差异的 relay log 时不会产生二进制日志。内部实现通过 mysqlbinlog 的 disable-log-bin 实现。
如:
参数名 是否必须 作用域 默认值 例子及说明
disable_log_bin No Local/App/Global 0 disable_log_bin=1
master_pid_file
指定 MySQL 的 pid 文件。这个参数在一台服务器上运行多个 MySQL 服务进程时非常有用。
如:
参数名 是否必须 作用域 默认值 例子及说明
master_pid_file No Local/App/Global – master_pid_file=/var/lib/mysql/master1.pid
ssh_user
MHA Mananger, MHA node 系统上的用户。这个帐号需要在远程机器上有执行权限 (Manager- MySQL), 在 slave 成员之间复制差异的 relay-log(MySQL- MySQL)
这个用户必须有读取 MySQL 的 binary/relay 日志和 relay_log.info 的权限,还需要对远程 MySQL 上 remote_workdir 目录的写权限。
这个用户还必须可以直接 ssh 到远程机顺上,推荐使用 ssh pbulic key . 一般使用的 ssh_user 也是运行 manager 那个那个用户。
如:
参数名 是否必须 作用域 默认值 例子及说明
ssh_user No Local/App/Global 当前使用的系统用户 ssh_user=root
remote_workdir
MHA node 上工作目录的全路径名。如果不存在,MHA node 会自动创建,如果不允许创建,MHA Node 自动异常退出。需要注意 MHA manager 或是 MHA node 上需要检查空间是否可用,所以需要注意检查这个。一般默认, remote_workdir 是的”/var/tmp”
如:
参数名 是否必须 作用域 默认值 例子及说明
remote_workdir No Local/App/Global /var/tmp remote_workdir=/var/log/masterha/app1
master_binlog_dir
master 上用于存储 binary 日志的全路径。这个参数用于当 master 上 mysql 死掉后,通过 ssh 连到 mysql 服务器上,找到需要 binary 日志事件。这个参数可以帮助用于无法找到 master 进程死掉后 binary 日志存储位置。
一般: master_binlog_dir 是”/var/lib/mysql/, /var/log/mysql”.“/var/lib/mysql/”是大多数系统发行版本的存放位置,”/var/log/mysql”是 ubuntu 发行版本的存放位置。你也可以设置多个存放位置用逗号隔开。
如:
参数名 是否必须 作用域 默认值 例子及说明
master_binlog_dir No Local/App/Gobal /var/lib/mysql master_binlog_dir=/data/mysql1,/data/mysql2
log_level
设置 MHA manager 记录 LOG 的级别。默认是 info 级别而且大多数情况也是比较适合。同样可以设置为: debug/info/warning/error.
如:
参数名 是否必须 作用域 默认值 例子及说明
log_level No App/Global info log_level=debug
manager_workdir
用于指定 mha manager 产生相关状态文件全路径。如果没设置 默认是 /var/tmp
如:
参数名 是否必须 作用域 默认值 例子及说明
manager_workdir No App /var/tmp manager_workdir=/var/log/masterha
manager_log
指定 mha manager 的绝对路径的文件名日志文件。如果没设置 MHA Manager 将打印到 STDOUT/STDERR。当手工执行故障切换(交互模式切换),MHA Manager 会忽略 manager_log 设置直接将日志输出到 STDOUT/STDERR.
如:
参数名 是否必须 作用域 默认值 例子及说明
manager_log No App STDERR manager_log=/var/log/masterha/app1.log
check_repl_delay
在默认情况下,当一个 slave 同步延迟超过 100M relay log(需要应用超过 100M relay log), MHA 在做故障切换时不会选择这个 slave 做为新的 master, 因为恢复需要经过很长时间. 当设置了 check_repl_delay = 0, MHA 将忽略被选择的 slave 上的同步延迟。这个选项在设置了 candidate_master = 1 特声明的期望这台机器成为 master 的情况下特别有用。
如:
参数名 是否必须 作用域 默认值 例子及说明
check_repl_delay No App/Golbal 1 check_repl_delay=0
check_repl_filter
在默认下情况,当 master 和 slave 设置了不同了 binary log/replication 过滤规则时,MHA 直接报错不会进行监控和故障切换。这些将会导致出现一些异想不到的错误”Table not exists”。如果你 100% 确认不同的过滤规则不会导致恢复中的错误,设置 check_repl_filter=0。需要注意:当使用了 check_repl_filter = 0 时,MHA 不会检查过滤规则在应用差异的 relay 日志,所以有可能会出现”Table not exists”的错误。当你设置了这个参数请小心处理。
如:
参数名 是否必须 作用域 默认值 例子及说明
check_repl_filter No App/Global 1 check_repl_filter=0
latest_priority
在默认情况下,和 Master 最接近的 slave(一个 slave 从 Master 上获得了最一个 binlog 事件)是最有优先权成为新的 master。如果你想控制一下切换的策略(如: 先选择 host2,如果不行,选 host3;host3 不行,选 host4…)那么设置 latest_priority = 0 就可以了。
如:
参数名 是否必须 作用域 默认值 例子及说明
latest_priority No App/Global 1 latest_priority=0
multi_tier_slave
从 MHA 0.52 开始, 多层复制可以支持了。在默认情况下,不支持三层或是更多层的复制配置。如果:host2 从 host1 上复制,host3 从 host2 上复制。在默认配置的情况下不支持写 host{1,2,3},因为这是一个三层的复制,MHA Manager 会停止报错。当设置了 multi_tier_slave, MHA Manager 就不会在三层复制报错停止。但是会忽略第三层的机器。也就是如果 host1 挂了,host2 将会成为新的 master,host3 还是从 host2 上进行复制。
这个参数在 MHA Manager 0.52 后的版开始支持。
如:
参数名 是否必须 作用域 默认值 例子及说明
muli_tier_slave No App/Global 0 multi_tier_slave=1
ping_interval
这个参数设置 MHA Manager 多长时间去 ping 一下 master(执行一些 SQL 语句). 当失去和 master 三次偿试,MHA Manager 会认为 MySQL Master 死掉了。也就是说,最大的故障切换时间是4次 ping_interval 的时间,默认是 3 秒。
如果 MHA Manager 在和 MySQL 创建连接时都收到多连接错误或是认证错误,这个就不做重试就会认为 master 已经挂掉。
如:
参数名 是否必须 作用域 默认值 例子及说明
ping_interval No App/Global 3 ping_interval=5
ping_type
(从 MHA 0.53 后开始支持) 在默认情况下,MHA manager 和 MySQL 创建一个连接执行”select 1″(ping_type=select)用于检查 master 是否健康。但有一些情况:每次检测都连接 / 然后断开会比较好一点,这样对于 tcp 方面的错误感知更快一点。设置 ping_type=CONNECT 就行了。从 MHA 0.56 后 pint_type=INSERT 也被添加。
如:
参数名 是否必须 作用域 默认值 例子及说明
ping_type No App/Global SELECT ping_type=CONNECT
secondary_check_script
一般来讲,非常推荐使用更多网络上机器是不同路由策略上的机器来检查 MySQL Master 是否存活。默认情况下,只有 MHA Manager 通过一个路由来检查 Master 是否存活。这个也是不推荐的。MHA 可以通过外部 secondary_check_script 配置的脚本来做到从多个路由策略下进行检查。
secondary_check_script = masterha_secondary_check -s remote_host1 -s remote_host2
secondary_check_script 包含在 MHA Manager 发行包中。MHA 中内置的 secondary_check_script 在大多数情况下工作良好,但并不是任何地都可以使用这个脚本。
在上面的例子中,MHA Manager 通过 Manager- (A)- remote_host1- (B)- master_host 和 Manager- (A)-remote_host2- (B)- master_host 来检查 MySQL master 是否存活。如果在连接过程中通过 A 可以都成功,通过B是都失败,secondary_\check_\script 返回0,而且认为 master 已经死掉,进行故障切换。如果通过 A 成功,但返回代码为: 2, 则 MHA manager 有会认为是网络问题,则不会进行故障切换。如果A成功,B也成功,masterha_secondary_check 退出返回:3 则 MHA Manager 就为认为 MySQL Master 为存活状态,则不会进行故障切换。
一般来讲,remote_host1 和 remote_host2 是和 MHA Manager 及 MySQL Server 位于不同的网段中。
MHA 会调用 secondary_check_script 声明的脚本并自动带上一些参数。masterha_secondary_check 在很多场景都是适用的,但是你也可以自已实现这个程序带有更多的功能。
–user=(在远程机器上使用的 SSH 用户名。ssh_user 的值将被使用)
–master_host = (master 的 hostname)
–master_ip = (master 的 ip 地址)
–master_port = (master 的端口号)
注意:内置的 masterha_secondary_check 脚本依赖于的 Perl 的 IO::Socket::INET(Perl 5.6.0 中是默认支持包含这个模块)。masterha_secondary_check 需要通过 ssh 连接到远程的机器上,所以需要 manager 到远程机器上建立 public key 信任。另外 masterha_secondary_check 是通过和 Master 建立 TCP 的连接测试 Master 是否存活,所以 mysql 设置的 max_connections 不起作用。但每次 TCP 连接成功后,MySQL 的 Aborted_connects 值都会加 1。
如:
参数名 是否必须 作用域 默认值 例子及说明
secondary_check_script No App/Global null secondary_check_script= masterha_secondary_check -s remote_dc1 -s remote_dc2
master_ip_failover_script
如:
参数名 是否必须 作用域 默认值 例子及说明
master_ip_failover_script No App/Global null master_ip_failover_script=/usr/local/custom_script/master_ip_failover
master_ip_online_changes_script
这个参数有点类似于 master_ip_failover_script, 但这个参数不用于 master 故障转意,只使用到 master 在线的切换。
冻结 Master 写的过程:
–command=stop or stopssh
–orig_master_host = (当前 master 的主机名)
–orig_master_ip = (当前 master 的 ip 地址)
–orig_master_port = (当前 master 的 port 端口号)
–orig_master_user = (当前 master 的用户)
–orig_master_password = (当前 master 的用户名)
–orig_master_ssh_user = (从 0.56 支持, 当前 master 的 ssh 的用户名)
–orig_master_is_new_slave = (从 0.56 , 是否把原 Master 更改为新的 slave)
新的 Master 接受写的过程:
–command=start
–orig_master_host = (原 master 的机器名)
–orig_master_ip = (原 master 的 ip)
–orig_master_port = (原 master 的端口号)
–new_master_host = (新 master 的机器名)
–new_master_ip = (新 master 的 ip)
–new_master_port = (新 master 的端口号)
–new_master_user = (新 master 上的用户名)
–new_master_password = (新 master 上的用户名及密码)
–new_master_ssh_user = (从 0.56 支持,新 master 上的 ssh 用户)
MHA 在冻结写的切换过程中会在 Master 上执行 FlUSH TABLES WITH READ LOCK, 在这个优雅的切换过程不会有任何写入的。在新的Master 在开始授权写的过程中,你可以做和 master_ip_failover_script 一样的事情。例如:创建用户及权限,执行 set global read_only=0, 更新数据库路由表竺。如果脚本执行退出码不是 0 或是 10, MHA Manager 异常退出并发不会继续进行 master 切换。
默认这个参数是空的,所以 MHA Manager 在默认情况下什么也不做。
可以在 (MHA Manager package)/samples/scripts/master_ip_online_change。里找到例子脚本。例子脚本包含于 MHA Manager 源文件或是 GitHub 的分支中。
如:
参数名 是否必须 作用域 默认值 例子及说明
master_ip_online_change_script No App/Global null master_ip_online_change_script= /usr/local/custom_script/master_ip_online_change
shutdown_script
如:
参数名 是否必须 作用域 默认值 例子及说明
shutdown_script No App/Global null shutdown_script= /usr/local/custom_script/master_shutdown
report_script
在 Master 故障完毕后,也许想发一个送一个报告(如 email)报告一下切换完毕或是发生的错误。report_script 可以完成这个工作。MHA Manager 可以通过以下参数使用:
–orig_master_host = (死掉 master 机器名)
–new_master_host = (新的 master 机器名)
–new_slave_hosts = (新的 slave 机器名列表,用逗号隔开)
–subject = (邮件名)
–body = (正文)
默认这些参数是空的。所以默认 MHA Manager 什么事情也不做。
可以在 (MHA Manager package)/samples/scripts/send_report 里找到例子脚本。例子脚本包含于 MHA Manager 源文件或是 GitHub 的分支中。
如:
参数名 是否必须 作用域 默认值 例子及说明
report_script No App/Global null report_script= /usr/local/custom_script/report
init_conf_load_script
这个参数用于不想设置明文在配置文件中(如:密码相关)。只用返回”name=value”这样的值。这个可以用来复盖 global 配置中的一些值。一个例子脚本如下。
#!/usr/bin/perl
print“password=$ROOT_PASS\n”;
print“repl_password=$REPL_PASS\n”;
如:
参数名 是否必须 作用域 默认值 例子及说明
init_conf_load_script No App/Global null report_script= /usr/local/custom_script/init_conf_loader
感谢各位的阅读,以上就是“MYSQL 的 MHA 参数有哪些”的内容了,经过本文的学习后,相信大家对 MYSQL 的 MHA 参数有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!