`
duantonghai
  • 浏览: 20349 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mycat主备切换分析

 
阅读更多

https://blog.csdn.net/boonya/article/details/76039070

 

public PhysicalDatasource

 

getSource() {

switch (writeType) {  

case WRITE_ONLYONE_NODE: {  //不区分,返回当前的,当前挂了,返回下一个

return writeSources[activedIndex];

}

case WRITE_RANDOM_NODE: { // 写操作随机发送,

 

int index = Math.abs(wnrandom.nextInt()) % writeSources.length;

PhysicalDatasource result = writeSources[index];

if (!this.isAlive(result)) {  //当前是死的,找所有活着的,在其中随机找个

 

// find all live nodes

ArrayList<Integer> alives = new ArrayList<Integer>(writeSources.length - 1);

for (int i = 0; i < writeSources.length; i++) {

if (i != index) {

if (this.isAlive(writeSources[i])) {

alives.add(i);

}

}

}

 

if (alives.isEmpty()) {

result = writeSources[0];

} else {

// random select one

index = Math.abs(wnrandom.nextInt()) % alives.size();

result = writeSources[alives.get(index)];

 

}

}

 

if (LOGGER.isDebugEnabled()) {

LOGGER.debug("select write source " + result.getName()

+ " for dataHost:" + this.getHostName());

}

return result;

}

default: {

throw new java.lang.IllegalArgumentException("writeType is "

+ writeType + " ,so can't return one write datasource ");

}

}

 

}

 

switch 属性:

 1 表示不自动切换

 2 基于mysql 主从状态决定是否切换

        show slave status

3  基于mysql galary cluster 的切换机制(适合集群)

   show status like 'wsrep%'

 

 

主要通过设置  activedIndex 来达到切换目的

/**

* 主从切换

*/

public boolean switchSource(int newIndex, boolean isAlarm, String reason) {

//如果write_type 不是0 ,直接返回

if (this.writeType != PhysicalDBPool.WRITE_ONLYONE_NODE || !checkIndex(newIndex)) {

return false;

}

 

final ReentrantLock lock = this.switchLock;

lock.lock();

try {

int current = activedIndex;

if (current != newIndex) {

 

// switch index

activedIndex = newIndex;

 

// init again  初始化数据库连接

this.init(activedIndex);

 

// clear all connections

this.getSources()[current].clearCons("switch datasource");

 

// write log

LOGGER.warn(switchMessage(current, newIndex, false, reason));

 

return true;

}

} finally {

lock.unlock();

}

return false;

}

 

 

/*

* 初始化当前的dataSource

*/

public void init(int index) {

 

//检查是否合法的index

if (!checkIndex(index)) {

index = 0;

}

 

int active = -1;

for (int i = 0; i < writeSources.length; i++) {

int j = loop(i + index);

//初始化数据库连接,由于是新切换的需要初始化 配置中的min个数据库连接

if (initSource(j, writeSources[j])) {

 

                //不切换-1时,如果主写挂了   不允许切换过去

                if(dataHostConfig.getSwitchType()==DataHostConfig.NOT_SWITCH_DS&&j>0)

                {

                   break;

                }

 

active = j;

activedIndex = active;

initSuccess = true;

LOGGER.info(getMessage(active, " init success"));

 

//保存记录到文件中

if (this.writeType == WRITE_ONLYONE_NODE) {

// only init one write datasource

MycatServer.getInstance().saveDataHostIndex(hostName, activedIndex);

break;

}

}

}

 

if (!checkIndex(active)) {

initSuccess = false;

StringBuilder s = new StringBuilder();

s.append(Alarms.DEFAULT).append(hostName).append(" init failure");

LOGGER.error(s.toString());

}

}

 

分享到:
评论

相关推荐

    MySQL DBA必备的mycat性能测试案例

    mycat是基于Java开发的,它可以将一个大型数据库逻辑上切割成多个数据库实例,实现数据的自动分片,提供读写分离、故障切换等功能。这对于处理大规模数据和高并发请求的Web应用来说非常有用。 2. **mycat性能测试...

    mycat分享技术

    - **故障切换**:Mycat 支持基于心跳检测的自动故障切换,能够及时检测到数据库实例的故障,并进行主备切换,保障服务的连续性。 #### 三、Mycat 实践案例 在实际部署中,Mycat 的使用场景非常广泛,下面以一个...

    mycat-definitive-guide.zip

    书中会阐述如何搭建MyCat集群,实现主备切换和负载均衡,确保服务的连续性和稳定性。此外,还会涉及故障检测和恢复机制,使系统在出现问题时能快速自我修复。 在管理和监控方面,《MyCat权威指南》会介绍MyCat的...

    Mycat-server-1.6.7.1-release-20200209222254-linux.tar.gz

    4. 高可用性:Mycat具有主备切换和故障恢复机制,确保服务的连续性。 5. SQL兼容:支持大部分MySQL的SQL语法,提供与MySQL一致的使用体验。 三、Mycat服务器安装与配置 1. 解压:使用tar命令解压Mycat-server-1.6....

    Mycat数据库中间件技术最佳实践手册-中台

    2.3. **架构分析**:Mycat采用主备结构,包含Server节点和管理节点。Server节点负责处理SQL路由和数据分发,管理节点用于监控和配置管理。此外,Mycat支持多租户,能为不同业务提供隔离的运行环境。 ### 3. 基本...

    Mycat-Server-1.6.5-RELEASE.rar

    5. 高可用:提供主备切换、故障自动恢复等功能,保证服务连续性。 二、Mycat配置 1. schema.xml:这是Mycat的核心配置文件,定义了数据库逻辑结构,包括数据节点(DataNode)、表的分片规则等。 2. server.xml:...

    mycat文档.zip

    Mycat集群中的Server节点可以设置为主备模式,当主节点故障时,备节点能够自动接管服务,实现平滑的故障切换。同时,Mycat还具备心跳检测和自动恢复机制,保证系统的稳定运行。 七、扩展性 Mycat的设计使其易于...

    sharding分库分表之Mycat技术栈.zip

    Mycat 是一个开源的分布式数据库系统,是基于 MySQL 协议的中间件,支持数据库的读写分离、分库分表、主备切换等功能。Mycat 作为数据库中间件,能够无缝连接 MySQL,实现对分布式数据库的管理和操作,为大规模的...

    MyCat 第3天-part1.7z

    MyCat - 集群 - keepalived启动及haproxy的高可用测试.avi`将带你理解keepalived的作用,它是实现高可用的关键组件,可以监控和切换MyCat的主备节点。 7. **keepalived作用及流程**:`07. MyCat - 集群 - ...

    mycat权威指南.pdf

    在故障转移和高可用性方面,Mycat提供了集群部署方案,当某个节点出现故障时,系统能够自动切换到其他节点,保证服务不中断。这部分内容将帮助你理解Mycat的集群部署策略和故障恢复机制。 安全性也是Mycat关注的...

    Mycat大型项目使用案例.doc

    同时,Keepalived和HAProxy的配置也很关键,它们能保证主备切换的平滑进行,以及负载的均衡分配。Keepalived会监控Mycat的服务状态,一旦主节点失效,会自动切换到备用节点。而HAProxy则负责接收客户端请求,根据...

    mycat-keepalived-mysql5.7.rar

    在Keepalived的配置文件中,需要指定主备服务器及心跳检测机制。 4. **测试与监控**:搭建完成后,需要进行充分的测试,确保在单个组件故障时能正常切换。同时,建立监控系统,监控各个组件的运行状态,以便及时...

    Mycat从入门到精通之故障排查、日志、命令行监控.zip

    同时,通过配置备库,实现故障切换,确保服务高可用。 3. 配置文件详解:熟悉`mycat.conf`和`schema.xml`等配置文件,能够帮助我们定制化Mycat的行为,满足特定业务需求。 4. 性能优化:理解SQL执行原理,优化SQL...

    商用App服务端数据访问架构改造研究.pdf

    首先,将单一MySQL数据库扩展为一主一备,通过原生的复制机制实现双向复制,再利用Mycat作为代理,实现读写负载均衡。当主库发生故障时,Mycat能自动切换到备用数据库,确保业务连续性。在代码层面,只需修改数据库...

    大型网站技术架构:核心原理与案例分析+李智慧.rar

    例如,使用主备模式或分布式复制保持数据安全,利用健康检查和监控系统及时发现并处理故障。 7. **CDN内容分发网络**:为了提高用户访问速度,大型网站通常会使用CDN服务,将静态资源分发到全球各地的边缘节点,...

    Java高级架构必备知识点

    - **数据库主备及高可用**:实现数据库的主备切换和高可用架构。 **7.10 性能调优专题-JVM调优** - **JVM原理剖析**:深入了解JVM的内部工作原理。 - **jvm内存模型及垃圾回收器的分析**:掌握JVM的内存管理和垃圾...

    sds:Java的数据库分片

    2. **MyCAT**: MyCAT(前身是Maatkit)是一个开源的数据库中间件,具有数据库分片、读写分离、主备切换等功能。MyCAT在Java环境下运行,支持多种数据库协议,适用于大数据和高并发场景。 3. **Apache Helix**: 虽然...

    国产数据库技术架构算法的方法论HotDBP.pdf

    跨数据中心级灾备双活功能验证方法论则是为了确保在灾难发生时,数据库能迅速切换到备份中心,保持业务连续性。这对于金融、电信等对数据安全要求极高的行业至关重要。文件提供了不同类型的容灾双活方案,分析了其...

    高性能高并发服务器架构

    例如,使用主备模式、集群模式,以及健康检查和自动恢复机制。 10. **优化数据库查询**:SQL优化、索引设计、数据库连接池等都是提高数据库性能的关键。如使用explain分析SQL执行计划,避免全表扫描,合理设置索引...

Global site tag (gtag.js) - Google Analytics