栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyCat中间件高可用、读写分离、分片、主从切换、ER分片

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyCat中间件高可用、读写分离、分片、主从切换、ER分片

mysql实现了主从数据自动同步,如果主服务器故障,应用程序怎么切换到非故障服务器? mysql不会自动切换;要中间件做。

mycat:数据库中间件,可以实现高可用(解决数据量太大,高并发等问题)

功能:实现主从节点自动切换(一个节点故障时可以切换到其他节点);读写分离;数据分片;

具体实现:

(1)首先安装好jdk,mycat

(2)虚拟机切换到mycat文件夹下的bin文件夹

 ./mycat start开启服务

然后查看状态./mycat status

经常运行mycat:加到profile路径中:

vi /etc/profile

在文档最后,添加一行:

export PATH=/home/mycat/bin:$PATH

wq存盘退出;

输入命令:source /etc/profile,使得配置文件生效

然后直接在任何一个目录下,都可以操作mucat命令

比如输入mycat status、mycat start等等

mycat端口 :8066

mysql -uroot -p123456 -P8066 -h192.168.126.151

密码保存在server.xml中

server.xml在/mycat/conf/server.xml

(3)修改server.xml和schema.xml,进行一些配置

server.xml修改,这里是前端的应用程序连接mycat需要配置的

这里我定义用户名为root,密码为123456,连接mycat后,显示的逻辑数据库名称为FakeEasymall


        123456
        FakeEasymall
        
        
        
    

配置前端对应的逻辑数据库后,mycat需要配置与之对应的真正的数据库

在schema.xml文件中,修改以下信息

checkSQLschema="false"这个参数说明前端sql查询中要不要带上FakeEasymall,false就不用带上。

这里我们定义逻辑数据库FakeEasymall中有一个表book031,并且真正数据配置在节点dn1,dn2上面

而dn1配置在localhost1集群中,dn2就配置在localhost2集群中,

并且说明真正数据库名称为easymall

每个集群可以有多个服务器节点,可以有专门写和读的节点

在集群localhost1中定义了心跳机制hearbeat,用于不断向集群节点发出请求,检测节点是否故障。

同时定义了一个写节点,IP地址是192.168.218.134


		
	
	
	
		select user()
		
		
	
	
		select user()
		
		
	 

(4)修改完后,重启mycat

mycat restart

并查看状态mycat status

(5)测试mycat的运行

使用sqlyog连接mycat这个数据库,连接的用户名和密码就是server.xml里面配置的。

连接成功后,就可以看到fakeEasyMall

然后在192.168.218.134的节点中对easymall中的表book031插入数据,那么在mycat中查询book031后,发现数据也增加了相同的数据,至此,就实现了mycat的中间件功能,当应用程序发出sql请求时,由mycat决定从哪个节点获取和修改数据。

下面实现MyCat高可用故障转移(双机热备)

 writeHost:只能是主节点;主要负责写;

多个writeHost:发生故障,自动转移;

mysql双向主从复制:仅是实时备份数据;并不是自然高可用,还要中间件mycat支持

双机热备高可用:首先要配置好双向主从复制; 

如果SwitchType=-1,则不支持;down掉第一个;读写:出错

下面实现2个写节点主从复制,mycat自动切换故障节点

 

这里必须一个集群里面要有2个写节点 ,然后参数switchtype等于1说明自动切换

然后一个节点垮了会自动切换到另外一个

这里记得2个写节点的名称不能一样,分别为hostM1,hostM2

mycat通过心跳机制判断节点是否宕机,然后进行自动切换

这里主从复制,那么2个写节点的数据都是相同的,因此,mycat进行查询获取数据,是随机选择一个节点进行查询的,并记录当前已经读到这个节点。

读写分离

 直接在writehost里面嵌套多个readhost节点

参数设置:

(1)switchType = -1; //不故障转移,变为1则进行转移

(2)writeType:0:所有写操作在第1个writehost中完成;

   writeType :1  //随机写;1.6以上新版本不用,但兼容 ;写:一般在一台服务器上做;否则网络临时有问题,同步不了;会有一致性问题(同时写某张表的某记录);写操作很大:分片;

查看版本:select version();

(3)balance:控制读的逻辑,配合writeType=0实现

0:不开启读写分离;所有读在第1个writehost中进行

1:开启读写分离;大部分读在除了第一个writehost之外读;除非其它主机读线程全满了(并发量超大),才会到第一个writehost读;

2:所有读操作,在所有的writehost和readhost中随机进行

3:所有读操作,在readhost中完成。如果集群中没有配置readhost,都到第一个writehost中完成

合理的方式:一般blance可以配置为1;writetype=0;switchType=1

分配多个从节点;进行读;readHost:只能负责读;可以是主、从。

下图就是一个经典的集群localhost

数据分片(水平分片)

 首先必须dataNode需要超过2个节点,这样才有考虑分片,分片规则为rule参数的设定

rule属性:计算分片的逻辑;默认值是auto-sharding-long

auto-sharding-long的实现在rule.xml里面配置:

autopartition-long.txt中定义:根据整数id分片;0-500W;500-1000W;1000W-1500W;1,2,3分片;:默认是3分片,我们按需修改 

 

我们也可以自己定义分片规则,不是根据id分片,那么修改rule的值为custom-sharding-long


        

    
    
    
    
                   writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
        select user()
                            password="123456">
        

    

                   writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
        select user()
                            password="123456">
        

    

相应的,在rule.xml文件中,我们也要定义分片规则


        
            book_id
            custom-rang-long
        

    

        >
        autopartition-long.txt
    
 

以上都是采用auto-shrading-long: 分片按照长整型; 不能按照字符串分片

如果按照字符串分片,字符串等主键用:sharding-by-murmur: hash一致性; 分片

 下面讲解特殊的分片:多张分片表关联关系的确定

(1)全局表

t_product商品表; 数据量大

t_category: 商品类别表;数据量小;变化不大;非分片

连接查询:查询商品信息以及在哪个分类;select t_product.id, t_product.t_name, t_category.id from t_product INNER JOIN t_category on t_product.cid=t_category.id

这种情况我们就设置t_category为全局表,每个节点都有相同信息,即一个表对应多个分片;不需要设置rule规则,则为全局表;

在schema..xml配置如下

(2)ER分片表:跨库操作:影响效率;

t_order:订单表

t_order_item:订单明细表

2个表都很大;都要分片; 不能用全局表;

一个订单对应多个订单明细;

schema.xml实现

        

joinKey: 从表的字段;外键;

parentKey: 主表的字段;主键

最后总结一下mycat结合mysql实现主从复制

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号