ITPub博客

首页 > 数据库 > MySQL > MySQL Fabric之HighAvailability

MySQL Fabric之HighAvailability

原创 MySQL 作者:鲍远森 时间:2014-06-11 10:36:39 0 删除 编辑

mysql fabric介绍:

mysql fabric提供了2种特性:
    1. High Availability,故障检测和切换
    2.scaling out using data sharding,路由数据库的请求

HA:需要至少2个或者以上节点的replication,功能类似与MMM和MHA,fabric是基于mysql 5.6的新特性GTIDs(全局事务ID),切换过程简单易懂。

局限性:
    1.sharding对应用还不是完全透明的,应用不需要知道数据在哪个mysql server上,也不需要知道这些数据是否被转移,只需要提供sharding key去访问数据库
    2.自增长ID不能被使用作为sharding key
    3.所有的事务和查询必须被限制在一个single sharding中。
    4.Because the connectors perform the routing function, the extra latency involved in proxy-based solutions is avoided but it does mean that Fabric-aware connectors are required - at the time of writing these exist for PHP, Python and Java
    5.mysql fabric进程本身不提供故障容错,当出现故障时,需要进行重启。当mysql fabric不可用时,the connectors能够通过本地的cache继续路由操作

安装及基本操作:

mysql utilit安装:
[root@svr76 tmp]# rpm -ivh mysql-connector-python-1.2.2-1.el6.noarch.rpm 
[root@svr76 tmp]# rpm -ivh mysql-utilities-1.4.3-1.el6.noarch.rpm 

基本操作:
#当数据库单节点出故障后,需要先蒋节点变成SPARE候选的,才能再切换至SECONDARY
mysqlfabric server set_status aa1c47b9-c9f5-11e3-a7cd-001e6783a352 SPARE
mysqlfabric server set_status aa1c47b9-c9f5-11e3-a7cd-001e6783a352 SECONDARY

#启动fabric服务
mysqlfabric manage start

#激活组监控
mysqlfabric group activate group_id-1

#切换primary
mysqlfabric group promote group_id-1 --slave_id aa1c47b9-c9f5-11e3-a7cd-001e6783a352

#查看组信息:
mysqlfabric group lookup_servers group_id-1


highavailability.py代码分析:

    代码中提供了2个class:
        1.PromoteMaster
        2.DemoteMaster

PromoteMaster:
    当进行failover操作,或者是switchover操作时提升master。即当master出现了故障,会从group中找一个符合条件的slave进行升级为master,或者需要将master offline进行维护操作。
    触发条件:手工执行mysqlfabric group groupname promote或者failover

DemoteMaster:
    降级当前的master为slave,注意在这个class里面,没有slave被提升为master

PromoteMaster操作流程:
触发DEFINE_HA_OPERATION事件:
1.如果为手工switch,且master status <> FAULTY
  则阻塞master写操作:
    设置库为read only
    设置group,将master临时的从group中unset

2.若为failover:
2.1.执行find_candidate,循环查找合适的候选slave(代码有问题,不完善)
    检查是否满足master条件
    如果是手工执行switch,则检查slave的状态
2.2.执行check_candidate,检查候选slave是否满足条件
    不明白为什么find_candidate已经check了,这里还需要再check
2.3.执行wait_slave,等待候选slave以及其他slaves应用所有relaylog日志
2.4.执行change_to_candidate,提升candidate为master
    stop slave
    change master to
    start slave

3.若为switch
3.1.执行find_candidate,循环查找合适的候选slave(代码有问题,不完善)
    检查是否满足master条件
    检查slave的状态
3.2.执行check_candidate,检查候选slave是否满足条件
    不明白为什么find_candidate已经check了,这里还需要再check 
3.3.执行wait_slave,等待候选slave以及其他slaves应用所有relaylog日志
3.4.执行change_to_candidate,提升candidate为master
    stop slave
    change master to
    start slave

DemoteMaster操作流程:
这种模式主要为master做升级或者配置,这个步骤不会有slave被提升为master。
[root@svr78 ~]# mysqlfabric help group demote
group demote group_id  [--update_only] [--synchronous]  

Demote the current master if there is one.

If users just want to update the state store and skip provisioning steps     such as configuring replication, the update_only parameter must be set to     true. Otherwise any write access to the master is blocked, slaves are synchronized with the master, stopped and their replication configuration     reset. Note that no slave is promoted as master.

1.阻塞master写,master设置read only
2.如果update only不为true,将触发WAIT_SLAVES_DEMOTE事件
    同步slave
    停止所有slave同步
3.如果master为global group中的master
    stop其他group中的master的slave进程
    stop当前global的其他master
    切换当前global group 的slave为master

总结:

    mysql fabric的HA管理,主要是利用mysql 5.6的GTIDs新特性,切换比较简单。提供自动的failover以及switch功能,大大降低了维护人员的工作,也降低了误操作概率。
    但是单纯使用fabric,依旧会丢数据。可以考虑结合mysql 5.7版本以上的Semi-Synchronous Replication持久化数据来进一步降低master宕机所造成的数据丢失。





来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25704976/viewspace-1180262/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-07-12

  • 博文量
    13
  • 访问量
    309765