`
duantonghai
  • 浏览: 19773 次
  • 性别: 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());

}

}

 

分享到:
评论

相关推荐

    Mycat源码分析

    Mycat源码分析Mycat源码分析Mycat源码分析Mycat源码分析Mycat源码分析

    MyCAT实现读写分离,主从切换[实例精华]

    MyCat支持双主多从,如果有N个主,那么就配置N个writeHost兄弟节点;如果有M个从节点,那么就配置M个readHost节点即可。 注: 需要注意mycat数据节点dataNode配置的database物理数据库名,要与mysql主从复制中master...

    windows下mysql主备双向复制与mycat负载均衡

    windows下mysql主备双向复制与mycat负载均衡windows下mysql主备双向复制与mycat负载均衡

    Mycat从入门到精通视频教程

    第9课 Mycat案例分析 Mycat线上案例分析 第10课 MySQL 优化 MySQL通用调优 MySQL 主键问题 MySQL字段类型问题 MySQL Cache问题 MySQL常见误区 第11课 Mycat eye Mycat eye的规划方向 Mycat eye功能介绍 ...

    mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源

    mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源mycat 资源...

    mycat从入门到跑路

    第7课 Mycat高可用方案 读写分离机制 集群机制 高可靠性的几种生产方案 第8课 Mycat项目实施方案 Mycat较佳实践 Mycat项目改造路线 Mycat数据扩容与迁移 第9课 Mycat案例分析 Mycat线上案例分析 第10课 MySQL 优化 ...

    MyCat测试报告(单机MyCAT对比多机MyCAT)1

    测试数据如下: 第一组163264128MyCat 1台 QPS12625.512373.634076.246335.3MyCat 1台 TPS4591.094

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

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

    MYCAT.zip MYCAT.zip

    MYCAT.zip MYCAT.zip MYCAT.zip

    Mycat-server-1.6.6.1 + MyCat-Web1.0

    Mycat发展到目前版本,已经不在是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NOSQL方式的存储...MYCAT-WEB是监控MYCAT和分析问题的工具。

    MyCat.tar.gz-Delete

    MyCAT是一款由阿里Cobar演变而来...MyCAT原理MyCAT主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。

    MyCat权威指南 更新于2018年7月25

    它是一个开源的分布式...将一些计算分析后的数据灌入到 Hadoop 中,并能用 Mycat+Storm/Spark Stream 引擎做大规模数据分析,看 到这里,你大概明白了,Mycat 是什么?Mycat 就是 BigSQL,Big Data On SQL Database。

    Mycat文档.zip

    Mycat资料

    Mycat原理、应用场景

    Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分 片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的...

    Mycat中间件

    mycat mycat mycat mycat mycat中间件 mycat中间件 mycat中间件

    mycat-linux版

    mycat linux版的中间件,mysql分库分表、读写分离,

    mycat安装与测试

    mycat的安装与测试,mycat在服务器上的安装方式等,还有分片的一些介绍

    Mycat性能调优指南

    Mycat性能调优指南 各个部分的调优方式和经验参数 MyCAT 性能调优指南 JVM调优: 内存占用分两部分:java堆内存

    mycat-start.jar

    mycat zk

    分布式数据库架构及企业实践-基于Mycat中间件

    分布式数据库架构及企业实践-基于Mycat中间件【高清版本】这是个压缩包,里面是个pdf文件,详细的介绍了mycat中间件的使用方法。...第 7 章 Mycat 核心技术分析 241 第 8 章 Mycat多数据库支持原理与实现 275

Global site tag (gtag.js) - Google Analytics