标签:驱动 是什么 pat 地址 sch 扩容 clu 问题 用户
Mycat 是数据库中间件。主要是做数据分布式存储,也有Atlas普通版的读写分离功能,其最重要还是分布式
Mycat是java语言开发的。是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信
,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里
支持Mysql集群,可以作为Proxy使用
支持JDBC连接多数据库
支持各种数据库,包括Mysql、mongodb、oracle、sqlserver、hive 、db2 、 postgresql。
支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群
自动故障切换,高可用性
支持读写分离,支持Mysql双主多从,以及一主多从的模式
支持全局表,数据自动分片到多个节点,用于高效表关联查询
支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询
支持一致性Hash分片,有效解决分片扩容难题
多平台支持,部署和实施简单
支持Mysql存储过程调用
以插件方式支持SQL拦截和改写
支持自增长主键、支持Oracle的Sequence机制
单纯的读写分离,此时配置最为简单,支持读写分离
,主从切换
分表分库
,对于超过1000万的表进行分片,最大支持1000亿的单表分片
多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多 租户化
报表系统,借助于Mycat的分表能力,处理大规模报表的统计
分表分库虽然能解决大表对数据库系统的压力,但它并不是万能的,也有一些不利之处,因此首要问题是,分不分库,分哪些库,什么规则分,分多少分片。
总体上来说,分片的选择是取决于最频繁的查询SQL的条件
,因为不带任何Where语句的查询SQL,会便利所有的分片,性能相对最差,因此这种SQL越多,对系统的影响越大,所以我们要尽量避免这种SQL的产生。
搭建一主一从,一个主机用于处理所有写请求,一台从机负责所有读请求,架构图如下:
yum -y install java-openjdk
wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz
tar -zxf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/
echo ‘export PATH=/usr/local/mycat/bin:$PATH‘ >> /etc/profile source /etc/profile
schema.xml 主配置文件(读写分离、高可用、分表、节点控制)
server.xml mycat软件本身相关的配置
rule.xml 分片规则配置文件(分片规则列表、使用方法)
mycat.log Mycat工作日志
mycat.pid pid文件
wrapper.log Mycat启动相关日志
编辑schema.xml主配置文件
mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycat_testdb" checkSQLschema="flase" sqlMaxLimit="100" dataNode="dn1"> </schema> <dataNode name="dn1" dataHost="host1" database= "school" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="2" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="abc123"> <readHost host="hostS1" url="192.168.1.130:3306" user="root" password="abc123" /> </writeHost> </dataHost> </mycat:schema>
修改server.xml配置文件 在server.xml配置文件最底部
#定义mycat工作库mycat_testdb是mycat的一个逻辑库,可以自定义,但是涉及另外一个server.xml配置文件。mycat_testdb逻辑库对应dn1这个数据节点 <schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> # 定义名为dn1这个数据节点的逻辑主机地址。和真实的后端数据库中的school库名。 <dataNode name="dn1" dataHost="host1" database="school" />
# host1这个逻辑主机的最大并发连接数。最小连接(类似预热数据,提前连接好,节省临时连接的消耗)。balance默认为1,为负载均衡到所有从库读操作。 writeType默认为0,写操作只分配到第一个writeHost数据库实例组。指定后端数据库软件类型。 dbDriver是驱动。 switchType="1"是主库宕机,自动切换到其他预备主数据库实例组 dbDriver(使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb,其他类型的则需要使用JDBC驱动来支持。) <dataHost name="ost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
# mycat监控后端mysql是否可用,走的心跳信息 <heartbeat>select user()</heartbeat>
# 定义localhost1逻辑主机中的真实主机,这是逻辑主机中的一个真实“可写”节点 <writeHost host="hostM1" url="192.168.1.128:3306" user="root" password="abc123">
# 定义localhost1逻辑主机中的真实主机,这是逻辑主机中的一个真实“可读”节点 <readHost host="hostS1" url="192.168.1.130:3306" user="root" password="abc123" />
server.xml说明
mycat start
标签:驱动 是什么 pat 地址 sch 扩容 clu 问题 用户
原文地址:https://www.cnblogs.com/psc0218/p/13555350.html