51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1233|回复: 0

[原创文章] MHA常见问题记录

[复制链接]
  • TA的每日心情
    开心
    2019-10-10 16:07
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    发表于 2019-10-17 16:38:00 | 显示全部楼层 |阅读模式
    1、从库ip地址更换,会导致从库同步假死,停止接收,但不报任何错误,直接stop  slave 再走start slave 即可
    在使用mha过程中,就会发现切换一直卡住下不去

    2、业务用户权限不正确,如果使用的用户有super权限,那么在切换的过程中,设置read-only是不起作用的,所以用户必须去掉super权限。

    3、误切换的风险,如果只是mha manager节点到主库之间的问题,会被误认为主库已经宕机(或者失联),从而强行启动切换,并且在切换中由于已经无法连接主库,那么主库也是不能被设置为readonly或者上锁,就会出现问题。通过增加旁路检测可以避免这样的风险。

    4、主从数据库版本不一致。在切换中mha要设新的主库,必须是版本最旧的mysql实例才能作为新的从库。如果主库版本比从库版本要高,在手动切换的时候会出错。
    ServiceManager.pm  中的 get_bad_candidate_masters,源码如下 :
    1. <p style="margin: 8px 0px;"># The following servers can not be master:</p>
    2. <p style="margin: 8px 0px;"># - dead servers</p>
    3. <p style="margin: 8px 0px;"># - Set no_master in conf files (i.e. DR servers)</p>
    4. <p style="margin: 8px 0px;"># - log_bin is disabled</p>
    5. <p style="margin: 8px 0px;"># - Major version is not the oldest</p>
    6. <p style="margin: 8px 0px;"># - too much replication delay</p>
    7. <p style="margin: 8px 0px;">sub get_bad_candidate_masters($) {</p>
    8. <p style="margin: 8px 0px;"> <wbr> my $self <wbr>  <wbr>  <wbr>  <wbr>  <wbr>
    9. <wbr>  <wbr>  <wbr>  <wbr>  <wbr> = shift;</p>
    10. <p style="margin: 8px 0px;"> <wbr> my $latest_slave <wbr>  <wbr>  <wbr>  <wbr>
    11. <wbr>  <wbr> = shift;</p>
    12. <p style="margin: 8px 0px;"> <wbr> my $check_replication_delay = shift;</p>
    13. <p style="margin: 8px 0px;"> <wbr> my $log <wbr>  <wbr>  <wbr>  <wbr>  <wbr>
    14. <wbr>  <wbr>  <wbr>  <wbr>  <wbr>  <wbr>= $self->{logger};</p>
    15. <p style="margin: 8px 0px;">
    16. </p>
    17. <p style="margin: 8px 0px;"> <wbr> my @servers <wbr>  <wbr>  <wbr>=
    18. $self->get_alive_slaves();</p>
    19. <p style="margin: 8px 0px;"> <wbr> my @ret_servers = ();</p>
    20. <p style="margin: 8px 0px;"> <wbr> foreach (@servers) {</p>
    21. <p style="margin: 8px 0px;"> <wbr>  <wbr> if (</p>
    22. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr>  <wbr>  <wbr>$_->{no_master}
    23. >= 1</p>
    24. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr> || $_->{log_bin} eq '0'</p>
    25. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr> || $_->{oldest_major_version}
    26. eq '0'</p>
    27. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr> || (</p>
    28. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr>  <wbr> $latest_slave</p>
    29. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr>  <wbr> && (
    30. $check_replication_delay</p>
    31. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr>  <wbr>  <wbr> &&
    32. $self->check_slave_delay( $_, $latest_slave ) >= 1 )</p>
    33. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr> )</p>
    34. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr> )</p>
    35. <p style="margin: 8px 0px;"> <wbr>  <wbr> {</p>
    36. <p style="margin: 8px 0px;"> <wbr>  <wbr>  <wbr> push( @ret_servers, $_ );</p>
    37. <p style="margin: 8px 0px;"> <wbr>  <wbr> }</p>
    38. <p style="margin: 8px 0px;"> <wbr> }</p>
    39. <p style="margin: 8px 0px;"> <wbr> return @ret_servers;</p>
    40. <p style="margin: 8px 0px;">}</p>
    复制代码



    5、GTID的潜在风险。
    gtid模式由于不使用文件和位移,直接使用gtid编号来同步,所以实际在使用中,切换之后新的gtid必须是连续才能设置成功。
    假设A 原来是主库,B、C是从库,都指向A
    B从建库之后,执行了几个自己的命令,如更改了用户权限表等,就产生了一个GTID,如UUID-B-1
    这个GTID-B-1 在binlog文件中,随着时间推移,日志文件被清理掉了
    突然有一天A故障,B被提升为主库,C将主库指向B,这时C就无法找到GTID-B-1,于是同步就出错了。mha切换程序会一直卡在那里。
    这种风险需要被消除。处理上是比较简单的,我们在C上指定一个空事务来作为GTID-B-1,这样c就会从后面GTID-B-2开始找。
    但是在自动切换中需要提前检测并解决该问题。


    讲师作品: MySQL实战校园业务数据库:http://www.atstudy.com/course/2001


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-3-28 22:55 , Processed in 0.063600 second(s), 25 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表