MyCat实现分库分表读写分离

本文介绍了如何使用MyCat中间件来实现分库分表、读写分离等功能。

1.安装

下载地址 http://mycat.io/

下载完成解压即可。

2.分表

2.1.使用id的范围来分表

1、添加访问用户和使用的逻辑数据库
conf/server.xml




    
        root
        db
    

2、配置逻辑数据库的表节点、以及指定rang-long分片规则
conf/schema.xml




    
    
        
        
    
    
        select user()
        
        
            
            
        
    


这里逻辑数据库db下的逻辑表tb对应 127.0.0.1:3306 下物理数据库db1下的tb0、tb1、tb2字表,这里分表的规则为根据id使用rang-long规则来分表

3、配置分片规则
conf/rule.xml




    
    
        
            id
            
            rang-long
        
    
    
    
        
        autopartition-long.txt
    

4、配置具体id对应的表范围
conf/autopartition-rang.txt

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

配置0-500w选择tb$0、500w-1000w选择tb$1、1000w-1500w选择tb$2

4、测试

CREATE TABLE `db1`.`tb0`(  
  `id` BIGINT NOT NULL,
  `name` VARCHAR(100),
  PRIMARY KEY (`id`)
);

新建 数据库db1以及数据表tb0、tb1、tb2、
然后连接Mycat的逻辑数据库db,往逻辑表tb里插入3条数据,地址127.0.0.1:8066


逻辑表
INSERT INTO tb(id,NAME) VALUES(2500000,'tb0');
INSERT INTO tb(id,NAME) VALUES(7500000,'tb1');
INSERT INTO tb(id,NAME) VALUES(12500000,'tb2');
SELECT * FROM tb;

查看物理表里的数据


物理表.gif

可以看到三条数据分别进入到三个物理表,至此单库分表已经完成。

3.分库

3.1.根据id取模

1、添加访问用户和使用的逻辑数据库
conf/server.xml




    
        root
        db
    

2、配置逻辑数据库的表节点、以及指定mod-long分片规则
conf/schema.xml




    
    
        
        
select user() select user()

这里逻辑数据库db下的逻辑表tb对应 127.0.0.1:3306 下物理数据库db1下和db2里的tb表,这里分库的规则为根据id使用mod-long规则来分表

3、配置mod-long分片规则
conf/rule.xml




    
        
            id
            mod-long
        
    
    
        
        2
    

4.测试

INSERT INTO tb(id,NAME) VALUES(1,'db1.tb');
INSERT INTO tb(id,NAME) VALUES(2,'db2.tb');
物理数据库

4.读写分离

1、添加访问用户和使用的逻辑数据库
conf/server.xml




    
        root
        db
    

2、配置逻辑数据库的表节点、以及指定mod-long分片规则
conf/schema.xml




    
    
    
    
    
    
    
        select user()
        
        
            
            
        
    

这里逻辑数据库db对应127.0.0.1:3306 和 127.0.0.1:3307 下的db1数据库,其中3306负责写,3307负责读,3307作为3306的从库。
这里面,有两个参数需要注意,balance和 switchType。

其中,balance指的负载均衡类型,目前的取值有4种:

  1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
  2. balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
  3. balance="2",所有读操作都随机的在writeHost、readhost上分发。
  4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

switchType指的是切换的模式,目前的取值也有4种:

  1. switchType='-1' 表示不自动切换
  2. switchType='1' 默认值,表示自动切换
  3. switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status
  4. switchType='3'基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。

参考:
MyCAT实现MySQL的读写分离

你可能感兴趣的:(MyCat实现分库分表读写分离)