MySQL Master High Available 理论篇(二)

六、核心参数详解

6.1 参数矩阵图

Local Scope

每个server域的参数 在application 配置文件(app.cnf)中:[server_xxx] 下面写的参数

App Scope

每个{master,slave}对的参数 这些参数在application配置(app.cnf)中: [server_default] 写的参数

Global Scope

所有{master,slave}对的参数 这些参数在global 配置(masterha_default.cnf)中:[server_default]写的参数

6.2 核心参数详解

hostname

目标MySQL服务器的 hostname 或者 ip 这个参数必须配置在 application 配置文件的[server_xxx]下面

ssh_connection_timeout

0.54开始支持,默认5秒,以前是硬编码

ssh_options

0.53开始支持,SSH命令额外的参数

candidate_master

候选master,如果设置为1,那么这台机器被选举为新master的机会就越大(还要满足:binlog开启,无大延迟) 如果你设置了N台机器都为candidate_master=1,那么优先选举的顺序为: 从上到下 ([server_xxx]). [server_1]([server_xxx]). [server_2]([server_xxx]). [server_3]

no_master

如果对某台机器设置了no_master=1 , 那么这台机器永远都不可能成为新master如果没有master选举了,那么MHA会退出

ignore_fail

默认情况下,如果slave有问题(无法通过mysql,ssh连接,sql线程停止等等),MHA 将停止failover 如果你不想让MHA manager停止,可以设置ignore_fail=1

skip_init_ssh_check

跳过SSH检测

skip_reset_slave

0.56才支持的参数,failover后,不执行reset slave all

user,password,repl_user,repl_password,ssh_user

* user

默认root,MySQL 的用户名,如果是root,因为要执行很多命令如:STOP SLAVE, CHANGE MASTER, RESET SLAVE* password user的密码 * repl_user 复制线程的用户名(最好加上) * repl_password 复制线程的密码(最好加上),尤其是--orig_master_is_new_slave之后,老master要change master到新master,它不知道密码 * ssh_user 操作系统的用户名(Manager,Node),因为要应用,解析各种日志,最好权限大点,默认是MHA manager上的当前OS 用户

disable_log_bin

在slave上应用差异relay log的时候,可以不记录到binlog日志中

remote_workdir

MHA Node的工作目录,默认 /var/tmp

master_binlog_dir

master上产生binlog的binlog 目录。默认是:/var/lib/mysql,/var/log/mysql

manager_workdir

MHA Manager的工作目录,默认: /var/tmp

manager_log

MHA manager 的日志目录,如果不设置,就是标准输出,和标准错误输出

check_repl_delay

默认情况下,如果slave落后master100M左右的relay log,MHA会放弃选择这个slave作为new master如果设置check_repl_delay=0,MHA会忽略这个限制 如果你想让某个candidate_master=1特定的slave成为maseter,那么这个参数特别有用

check_repl_filter

如果过滤规则不一样,MHA停止monitor和failover 可以通过设置check_repl_filter=0忽略,但是要特别小心这么做

ping_interval

MHA manager多久去ping SQL 一次master如果三次间隔都没反应,那么MHA认为master挂了 默认3秒 如果MHA Manager连不上Master是因为too many connection错误或者认证失败,这些将不会认为master挂了

secondary_check_script

一般来讲, 非常推荐使用更多网络上机器是不同路由策略上的机器来检查MySQL Master是否存活。 默认情况下,只有MHA Manager通过一个路由来检查Master是否存活。这个也是不推荐的。 MHA可以通过外部secondary_check_script配置的脚本来做到从多个路由策略下进行检查.

secondary_check_script = masterha_secondary_check -s remote_host1 -s remote_host2

在大多数场景下,内置的masterha_secondary_check都可以允许良好

Manager-(A)->remote_host1-(B)->master_host Manager-(A)->remote_host2-(B)->master_host

在所有的路由中,如果A成功,B失败,那么MHA认为master就真的挂了,其他情况,一律认为master还是活的

通常来讲,remote_host1,remote_host2,应该和MHA manager在不同的网段中

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

master_ip_failover_scriptMHA 不做vip 漂移动作,这些事情你必须自己做

master_ip_failover_script= /usr/local/sample/bin/master_ip_failover

MHA manager会调用master_ip_failover_script三次

* 第一次:检查阶段 --command=status --ssh_user=(current master's ssh username) --orig_master_host=(current master's hostname) --orig_master_ip=(current master's ip address) --orig_master_port=(current master's port number) * 第二次:当前master 关闭阶段 --command=stop or stopssh --ssh_user=(dead master's ssh username, if reachable via ssh) --orig_master_host=(current(dead) master's hostname) --orig_master_ip=(current(dead) master's ip address) --orig_master_port=(current(dead) master's port number) * 第三次:新master激活阶段 --command=start --ssh_user=(new master's ssh username) --orig_master_host=(dead master's hostname) --orig_master_ip=(dead master's ip address) --orig_master_port=(dead master's port number) --new_master_host=(new master's hostname) --new_master_ip=(new master's ip address) --new_master_port(new master's port number) --new_master_user=(new master's user) --new_master_password(new master's password)

在当前master shutdown阶段,你可以调用shutdown_script 关闭当前master

在当前master shutdown阶段,你可以删除dead master在配置文件中 在新master激活阶段,你可以指定虚拟ip在新master上,并且可以更改数据库路由设置 在新master激活阶段,你可以新增和更改新maser的记录 另外,你可以做任何事情让应用可写新master,例如:SET GLOBAL read_only=0,创建用户,权限

但是,默认的MHA manager参数是空,不会做任何事情

master_ip_online_changes_script

这个参数有点类似于master_ip_failover_script,但这个参数不用于master 故障转意,只使用到master在线的切换

* 冻结当前master写的阶段 --command=stop or stopssh --orig_master_host=(current master's hostname) --orig_master_ip=(current master's ip address) --orig_master_port=(current master's port number) --orig_master_user=(current master's user) --orig_master_password=(current master's password) --orig_master_ssh_user=(from 0.56, current master's ssh user) --orig_master_is_new_slave=(from 0.56, notifying whether the orig master will be new slave or not) * new master赋予写权限阶段 --command=start --orig_master_host=(orig master's hostname) --orig_master_ip=(orig master's ip address) --orig_master_port=(orig master's port number) --new_master_host=(new master's hostname) --new_master_ip=(new master's ip address) --new_master_port(new master's port number) --new_master_user=(new master's user) --new_master_password=(new master's password) --new_master_ssh_user=(from 0.56, new master's ssh user)

MHA在冻结写的切换过程中会在Master上执行FlUSH TABLES WITH READ LOCK,在这个优雅的切换过程不会有任何写入的。 在新的Master在开始授权写的过程中,你可以做和master_ip_failover_script一样的事情。 例如: 创建用户及权限, 执行set global read_only=0 如果脚本执行exit code不是0 或是10, MHA Manager异常退出并发不会继续进行master切换。

默认这个参数是空的,所以MHA Manager在默认情况下什么也不做。

shutdown_script

report_script

init_conf_load_script

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2016-08-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏项勇

[Android笔记9]使用wifi连接adb打印数据

21250
来自专栏康怀帅的专栏

MongoDB 安装配置

官方网站:https://www.mongodb.com/ MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩...

30970
来自专栏菩提树下的杨过

spring cloud: 使用consul来替换config server

上一篇提到了,eureka 2.x官方停止更新后,可以用consul来替代,如果采用consul的话,其实config server也没必要继续使用了,cons...

24030
来自专栏沈唁志

如何使用Tahoe-LAFS将您的数据保存在云中

虽然Tahoe-LAFS可能类似于其他分散或分布式文件系统,如Gluster,Ceph或其他,但它解决的问题却不同。在最权威文件存储(LAFS)设计了以下事项:

26520
来自专栏性能与架构

Meteor平台下网站开发只需数小时?

前阶段看到一篇文章,说以往花费数周时间才能完成的网站,现在使用 Meteor 只需要几小时 很好奇Meteor是个什么技术?怎么大幅提高开发效率的?就了解并试用...

37740
来自专栏北京马哥教育

MySQL Master High Available 理论篇(一)

一、概况 MHA 提供自动master故障转移以及在最短的时间内(10~30秒)提升slave为new master MHA 解决了切换后的数据不一致问题 所有...

36370
来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第五卷 RAC and Grid

编辑手记:RAC是Oracle最重要的高可用架构之一,具有扩展性良好、实现负载均衡等多维度的优势,Oracle RAC提供了相应的集群软件和存储管理软件,今天我...

33140
来自专栏JackeyGao的博客

Django小技巧04: 自动日期时间字段

Django 的DateTimeField和DateField有两个非常有用的参数,用于自动管理时间。如果你需要跟踪保存纪录的创建时间和更改时间,则无须手动执行...

37530
来自专栏腾讯云数据库团队的专栏

MySQL 数据库的高可用性分析

MySQL 数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在 MySQL 数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目...

9.4K10
来自专栏小狼的世界

通过设置双网卡实现VirtualBox虚机上网及主宿互访

最近,经过一些研究,终于调通了VirtualBox虚拟机互连、主宿机互连、以及主宿机连接互联网。下面分享一下。

15520

扫码关注云+社区

领取腾讯云代金券