Mycat多节点协调——rebalance流程
2015-12-27 21:09:39 0 举报
Mycat多节点协调中的rebalance流程是指当集群中新增或删除某个节点时,Mycat会自动对数据进行重新分配,以保证数据的均衡性和可用性。具体来说,当新增一个节点时,Mycat会将该节点加入到集群中,并将该节点上的数据同步到其他节点上;当删除一个节点时,Mycat会将该节点从集群中移除,并将该节点上的数据同步到其他节点上。这个过程需要保证数据的一致性和完整性,因此需要进行一系列的操作,包括锁定表、备份数据、恢复数据等。
作者其他创作
大纲/内容
根据新的上下文switchMyCatSource()mycat切换db节点
persistenceClusterInfo持久化新的配置信息
doFinishToReBalance
doPrepareToReBalance参数:serviceNodesmycatClusterInfo
?可以往前提根据缓存mycatClusterInfo的rebalanceId判断是否是第一次初始化
mycatNode isHealth false该节点服务置为只读
备份mycatCluster的Nodes并将更新的nodes装配金mycatClusterInfo
怎么办?目前仅仅报警,该步骤失败服务就不可用了
成功
怎么办?目前仅仅报警,该步骤失败失败的机器在mycat层面配置配置为只读(getConnection里只获取只读db),让其自身通过论寻机制调整为可读。这样不影响成功节点可写了。
LeaderManager reBalance(nodes)nodes需要更新的节点只有主节点进行
失败
RemoteNodeServicedoFinishToReBalance切换上下文
executeOnlyReadSqlsql:set global read_only = 1从缓存的mycatClusterInfo获取配置并发对当前db写节点进行只读设置
doFinishToReBalance移除上下文
主节点所有db变为只读changeDbOnlyRead
生成rebalanceId
doAbortToReBalance所有节点回滚将mycatClusterInfo的node替换为旧的node
RemoteNodeServiceprepareToReBalance方法主要进行备份将更新信息存入contxt上下文rebalanceId : msg
serviceNodeMap的修改只能通过 removeNodes addNodes
RebalanceHandler handler方法接收 并判断消息类型
nodes节点从当前缓存的serviceNodeMap中获取
怎么办?目前仅仅报警。主节点放弃自身为主自己监控和mysql的链接,一旦健康了,再加入集群
RemoteNodeServicedoFinishToReBalance方法将contxt中rebalanceId信息删除
FrontendConnection queryHandler setReadOnly该节点服务置为只读
报警退出reb
rebalance流程梳理只由主节点操控db的可写只读其实就是让所有节点更新一下mycatClusterInfo
reWriteDb所有db恢复可写
如果失败了怎么办?
并发向所有节点发送prepare信息
0 条评论
下一页