Mycat读写分离,主从切换,分库分表(未使用)记录

1、MyCat简单介绍

MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理(类似于Mysql Proxy),用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。

Mycat关键特性:

-  支持SQL92标准
-  遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理
-  基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群
-  支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
-  基于Nio实现,有效管理线程,高并发问题
-  支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页
-  支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join
-  支持通过全局表,ER关系的分片策略,实现了高效的多表join查询
-  支持多租户方案
-  支持分布式事务(弱xa)
-  支持全局序列号,解决分布式下的主键生成问题
-  分片规则丰富,插件化开发,易于扩展
-  强大的web,命令行监控
-  支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉
-  支持密码加密
-  支持服务降级
-  支持IP白名单
-  支持SQL黑名单、sql注入攻击拦截
-  支持分表(1.6)
-  集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)

2、Mycat不适合的应用场景

-  设计使用Mycat时有非分片字段查询,请慎重使用Mycat,可以考虑放弃!
-  设计使用Mycat时有分页排序,请慎重使用Mycat,可以考虑放弃!
-  设计使用Mycat时如果要进行表JOIN操作,要确保两个表的关联字段具有相同的数据分布,否则请慎重使用Mycat,可以考虑放弃!
-  设计使用Mycat时如果有分布式事务,Mycat并没有根据二阶段提交协议实现 XA事务,而是只保证 prepare 阶段数据一致性的 弱XA事务。得先看是否得保证事务得强一致性,否则请慎重使用Mycat,可以考虑放弃

详细介绍:https://blog.csdn.net/u013235478/article/details/53178657

3、安装MyCat实现读写分离

1、上传安装Mycat-server-1.6.5-release-20180122220033-linux.tar

2、解压安装包tar –zxvf  

3、配置schema.xml 和server.xml

4、客户端连接端口号: 8066

文件

说明

server.xml

Mycat的配置文件,设置账号、参数等

schema.xml

Mycat对应的物理数据库和数据库表的配置

rule.xml

Mycat分片(分库分表)规则

 

4、server.xml配置



	
   

   
    
        123456
        mycat_testdb

        
        
    

    
    
        user
        mycat_testdb
        true
    
	


5、schema.xml配置

配置文件




    
		
    
	
	
	
    
			
    
	
	
    
    
        select user()
        
        
            
            
        
    

schemaxml文件中配置dataHost的重要参数解释

1 属性

 

balance

的取值决定了负载均衡对非事务内的读操作的处理。balance 属性负载均衡类型,目前的取值有 4 种:

writeType

writeType="0"   所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
writeType="1"   所有写操作都随机的发送到配置的 writeHost。
writeType="2"   没实现。

slaveThreshold

近似的主从延迟时间(秒)Seconds_Behind_Master < slaveThreshold ,读请求才会分发到该Slave,确保读到的数据相对较新。

switchType 

switchType="-1":  不自动切换
switchType="1":   默认值,自动切换
switchType="2":   基于MySQL主从同步的状态来决定是否切换。需修改heartbeat语句(即心跳语句):show slave status
switchType="3":   基于Mysql Galera Cluster(集群多节点复制)的切换机制。需修改heartbeat语句(即心跳语句):show status like 'wsrep%'

2、标签

heartbeat标签

这个标签内指明用于和后端数据库进行心跳检查的语句。例如,MYSQL可以使用select user(),Oracle可以使用select 1 from dual等。
这个标签还有一个connectionInitSql属性,主要是当使用Oracla数据库时,需要执行的初始化SQL
 
语句就这个放到这里面来。例如:altersession set nls_date_format='yyyy-mm-dd hh24:mi:ss'
 
1.4主从切换的语句必须是:showslave status

writeHost标签、readHost标签

这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。
 
唯一不同的是:writeHost指定写实例、readHost指定读实例,组着这些读写实例来满足系统的要求。
 
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。
另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。

Mycat读写分离(负载均衡)、主从自动切换

  1. balance为1:让全部的readHost及备用的writeHost参与select的负载均衡。 
  2. switchType为2:基于MySQL主从同步的状态决定是否切换。 
  3. heartbeat:主从切换的心跳语句必须为show slave status




    
           
    
	
    
		show slave status
		
			
			
		
		
		
     
    

 

7、分表分库功能介绍

 MyCat支持10种分片策略

1、求模算法 2、分片枚举 3、范围约定 4、日期指定 5、固定分片hash算法 6、通配取模 7、ASCII码求模通配 8、编程指定 9、字符串拆分hash解析

schema.xml




  
        
        
show slave status

rule.xml





  
                    
        
            id                  
            mod-long
        
    
  
    
        
        2        
    

http://www.mycat.io/document/mycat-definitive-guide.pdf

你可能感兴趣的:(MyCat)