MySQL中的MHA怎么用

55次阅读
没有评论

共计 3144 个字符,预计需要花费 8 分钟才能阅读完成。

本篇文章为大家展示了 MySQL 中的 MHA 怎么用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

提到 MySQL 高可用性,很多人会想到,亦或者 +,不过这些方案的复杂性常常让人望而却步,与之相对,利用 MySQL 复制实现高可用性则显得容易很多,目前大致有,,等方案可供选择:MMM 是最常见的方案,可惜它问题太多(,);至于 PRM,它还是个新项目,暂时不推荐用于产品环境,不过作为的作品,它值得期待;如此看来目前只能选 MHA 了,好在经过大规模的实践应用证明它是个靠谱的工具。
 
安装:
作为前提条件,应先配置 MySQL 复制,并设置 SSH 公钥免密码登录。下面以 CentOS 为例来说明,最好先安装 EPEL,不然 YUM 可能找不到某些软件包。
 
MHA 由 Node 和 Manager 组成,Node 运行在每一台 MySQL 服务器上,也就是说,不管是 MySQL 主服务器,还是 MySQL 从服务器,都要安装 Node,而 Manager 通常运行在独立的服务器上,但如果硬件资源吃紧,也可以用一台 MySQL 从服务器来兼职 Manager 的角色。
 
安装 Node:
 
shell yum install perl-DBD-MySQL
shell rpm -Uvh http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.52-0.noarch.rpm 安装 Manager:
 
shell yum install perl-DBD-MySQL
shell yum install perl-Config-Tiny
shell yum install perl-Log-Dispatch
shell yum install perl-Parallel-ForkManager
shell rpm -Uvh http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.52-0.noarch.rpm
shell rpm -Uvh http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.52-0.noarch.rpm 配置:
配置全局设置:
 
shell cat /etc/masterha_default.cnf
[server default]
user=…
password=…
ssh_user=… 配置应用设置:
 
shell cat /etc/masterha_application.cnf
[server_1]
hostname=…
 
[server_2]
hostname=… 注:MHA 配置文件中参数的详细介绍请参考官方文档。
 
检查
检查 MySQL 复制:
 
shell masterha_check_repl –conf=/etc/masterha_application.cnf 检查 SSH 公钥免密码登录:
 
shell masterha_check_ssh –conf=/etc/masterha_application.cnf 实战
首先启动 MHA 进程:
 
shell masterha_manager –conf=/etc/masterha_application.cnf 注:视配置情况而定,可能会提示 read_only,relay_log_purge 等警告信息。
 
然后检查 MHA 状态:
 
shell masterha_check_status –conf=/etc/masterha_application.cnf 注:如果正常,会显示『PING_OK』,否则会显示『NOT_RUNNING』。
 
到此为止,一个基本的 MHA 例子就能正常运转了,不过一旦当前的 MySQL 主服务器发生故障,MHA 把某台 MySQL 从服务器提升为新的 MySQL 主服务器后,如何通知应用呢?这就需要在配置文件里加上如下两个参数:
 
master_ip_failover_script
master_ip_online_change_script
说到 Failover,通常有两种方式:一种是虚拟 IP 地址,一种是全局配置文件。MHA 并没有限定使用哪一种方式,而是让用户自己选择,虚拟 IP 地址的方式会牵扯到其它的软件,这里就不赘述了,以下简单说说全局配置文件,以 PHP 为实现语言,代码如下:
 
#!/usr/bin/env
?php
$longopts = array(
  command: ,
  ssh_user: ,
  orig_master_host: ,
  orig_master_ip: ,
  orig_master_port: ,
  new_master_host:: ,
  new_master_ip:: ,
  new_master_port:: ,
);
 
$options = getopt(null, $longopts);
 
if ($options[ command] == start ) {
  $params = array(
  ip   = $options[new_master_ip],
  port = $options[new_master_port],
  );
 
  $string = ?php return . var_export($params, true) . ?
 
  file_put_contents(config.php , $string, LOCK_EX);
}
 
exit(0);
? 注:用其它语言实现这个脚本也是 OK 的,最后别忘了给脚本加上可执行属性。
 
如果要测试效果的话,可以 kill 掉当前的 MySQL 主服务器,稍等片刻,MHA 就会把某台 MySQL 从服务器提升为新的 MySQL 主服务器,并调用 master_ip_failover_script 脚本,如上所示,我们在 master_ip_failover_script 脚本里可以把新的 MySQL 主服务器的 ip 和 port 信息持久化到配置文件里,这样应用就可以使用新的配置了。
 
有时候需要手动切换 MySQL 主服务器,可以使用 masterha_master_switch 命令,不过它调用的不是 master_ip_failover_script 脚本,而是 master_ip_online_change_script 脚本,但调用参数类似,脚本可以互用。
 
shell masterha_master_switch –conf=/etc/masterha_application.cnf –master_state=dead –dead_master_host=…
shell masterha_master_switch –conf=/etc/masterha_application.cnf –master_state=alive –new_master_host=… 注:针对原来的 MySQL 主服务器是否已经宕机,执行命令所需的参数有所不同。
 
需要说明的是,缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机时间间隔不足八小时的话,则不会进行 Failover,之所以这样限制是为了避免 ping-pong 效应。不过为了自动化,我们往往希望能取消这种限制,此时可以用如下方式启动 Manager:
 
shell nohup masterha_manager –conf=/etc/masterha_application.cnf –ignore_last_failover –remove_dead_master_conf 注:请确保 Manager 的运行用户对 masterha_application.cnf 有写权限

上述内容就是 MySQL 中的 MHA 怎么用,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计3144字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)