MySQL中的MHA怎么用
创始人
2024-12-20 23:03:17
0次

提到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
$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 = '';
 
    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有写权限

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...