MySQL高可用实战( MHA)

MySQL高可用实战( MHA),第1张

修改mysql的所有节点mysql的主配置文件 ( /etc/my.cnf )

Master 节点

Slave1,Slave2节点

MHA官网:https://code.google.com/archive/p/mysql-master-ha/

GitHub地址:https://github.com/yoshinorim/mha4mysql-manager

文档:https://github.com/yoshinorim/mha4mysql-manager/wiki

当一个 master 崩溃时,MHA 会恢复下面的 rest slave。

MHA 由 MHA Manager 和 MHA Node 组成,如下所示:

下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

下载地址:https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

/opt/mysql-mha/master_ip_failover ,下面配置文件中会用到

给该脚本添加可执行权限:

candidate_master=1

check_repl_delay=0

第一次配置需要在master节点上手动启动虚拟IP,标签要和master_ip_faioverl配置文件中my $key = '1'一样

先在当前的主库服务器slave1上查看二进制日志和同步点

再在 原master 服务器上执行同步 *** 作

有两种方法,一种方法使用mysql的checktable和repairtable的sql语句,另一种方法是使用MySQL提供的多个myisamchk,isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1.checktable和repairtable登陆mysql终端:mysql-uxxxxx-pdbnamechecktabletabTest如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:repairtabletabTest进行修复,修复之后可以在用checktable命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。2.myisamchk,isamchk其中myisamchk适用于myisam类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用myisam作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:myisamchktablename.MYI进行检测,如果需要修复的话,可以使用:myisamchk-oftablename.MYI关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。-----------------------------另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:[-x/tmp/mysql.sock]&&/pathtochk/myisamchk-of/DATA_DIR/*/*.MYI其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用rpm安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

某天晚上,数据库 hang 住,现象是:

无奈之下通过强制 kill 掉进程,重启数据库恢复。

这里暂且不说 hang 住的原因,仅分析数据库 hang 住,但是 MHA 未触发切换。

先说下结论,MHA 默认使用长连接对数据库做 ping 健康 检测(执行 select 1 as Value ),4次无法连接 MySQL 则触发切换。 前面数据库 hang 住只是新的连接无法建立,但是老连接却没有影响,且 MHA 的 健康 检测语句很简单,只在 server 层进行了检测,不涉及到 InnoDB 层,所以 MHA 认为 MySQL 是 健康 的,并没有作出任何决策。

MHA 从 0.53 版本开始支持 ping_type 参数设置如何检查 master 的可用性。支持3个 value :

通过将 ping_type 修改设置为 connect ,MHA 每次进程状态检测,需要新建连接,新链接无法成功建立,就触发了切换。

三种检测机制代码:

MHA 配置文件

模拟服务器CPU满负载,数据库无法建立新连接 编写一个简单的c程序,如下:

编译:

执行:

另外再跑两个 mysqlslap 压测程序:

有兴趣的同学可自行测试一下

调用链路:

MHA 监控进程启动后,会持续监控主节点的状态,主要的 健康 检测函数是 wait_until_unreachable()。

在这个函数中会有一个死循环,持续地进行 健康 检测

1.首先,测试连接,连接正确返回0,否则返回1。

2.测试连接成功后,则进行 健康 状态检测(前面说的3种方式);如果连续4次连接失败,则在第4次的时候会使用第二脚本进行检测(如果定义了的话),如果检测通过,则认为 master 挂掉

关键函数 wait_until_unreachable()代码:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8724676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存