MyCat(读写分离/分库分表/高可用)
2021-02-25 23:29:51 0 举报
AI智能生成
MyCat(读写分离/分库分表/高可用)
作者其他创作
大纲/内容
原理
拦截SQL->分析SQL(分片、路由、读写分离、缓存)->转发SQL
配置文件
rule.xml:定义分片规则
schema.xml:定义逻辑库、表、分片节点等内容
server.xml:定义用户以及系统相关变量,如端口等
读写分离
schema配置
balance
0:不开启读写分离,所有读请求都发送到writeHost上
1:双主双从模式,M1只负责写,M2、S1、S2负责读
2:所有读请求随机的在writeHost、 readhost上分发
3:所有读请求分发到readhost,writerHost不负担读压力
writeType
0:所有写操作发送到第一个writeHost,第一个挂了切到第二个【默认】
1:所有写操作都随机的发送到配置的writeHost,1.5以后废弃【不推荐】
switchType
1:自动切换【默认】
-1:不自动切换
server配置
可配置数据库连接名称和密码
rule配置
根据主机数量配置rang-long标签下的autopartition-long.txt文件
配置PartitionMod数量<property name="count">1</property>
验证
insert into mytbl values(1,@@hostname)
连接上mycat查询:select * from mytbl;
分库分表
垂直拆分-分库
根据功能划分,比如将客户表和客户详情、订单表和订单详情分散到不同的库
注意分库不是在原有的数据库上操作,而是创建新库,将分库原则在mycat中配置
schema配置
在schema标签中添加table标签,声明A1,A2,A3表位于dn2节点,其他表默认dn1
<table name="A1,A2,A3" dataNode="dn2"></table>
<table name="A1,A2,A3" dataNode="dn2"></table>
使用dataNode节点分别绑定dn1、dn2为host1、host2,database同为xxx
<dataNode name="dn2" dataHost="host2" database="xxx"/>
<dataNode name="dn2" dataHost="host2" database="xxx"/>
是用dataHost节点,创建host1和host2,分别编写相关服务器配置
分库操作
在两台服务器上分别创建一个空白库xxx
create database xxx;
连接mycat切换到xxx库并执行建表语句,创建A1、A2、A3表和其他表
验证A1、A2、A3表位于dn2的host2服务器上,其他表位于dn1的host1服务器
水平拆分-分表
数据分片
根据主键ID或创建时间
效果不理想,查询具有时效性,历史订单查询次数少
根据客户ID
不同节点的访问量相差不大,同一客户的所有订单都在同一节点
分片配置
schema配置
在schema标签中添加table标签,声明xxx数据库的数据分散到dn1和dn2,并指定拆分规则
<table name="table_name" dataNode="dn1,dn2" rule="mod_rule"></table>
<table name="table_name" dataNode="dn1,dn2" rule="mod_rule"></table>
rule配置
复制一条规则,修改名称为schema中指定的mod_rule,配置字段和规则
注意
dn1和dn2服务器上都必须有table_name这张表,没有的话手动新建,关联紧密的表也需要分片
全局表,所有节点都需要的表,但数据量不大,会有数据冗余,节点上没有的话需手动创建
常用分片规则
取模:mod_rule
分片枚举:hash-int
范围约定:rang-long
按照日期(天):ShardingByDate
全局序列
唯一主键
唯一主键
0:本地文件方式【不推荐】
优点:本地加载,读取速度较快
缺点:抗风险能力差,MyCat所在主机宕机后无法读取
1:数据库方式【推荐】
利用数据库的一个表来进行计数累加,不是每次生成序列都要读写数据库(效率太低)
MyCat会预加载一部分,用完再去数据库读取【利用数据库的函数来创建全局序列】
MyCat会预加载一部分,用完再去数据库读取【利用数据库的函数来创建全局序列】
初始化记录表:insert into mycat_sequence(Name,current_value,increment)values('ORDERS',400000,100);
修改sequence_db_conf.properties,指定生成全局序列的表位于哪个节点
修改server.xml中sequnceHandlerType的值为 1
2:时间戳方式【不推荐】
优点:配置简单
缺点:18位ID过长
3:自主生成全局序列
使用redis的incr或者雪花算法
高可用(集群)
使用 HAProxy + Keepalived 配合两台Mycat搭起Mycat集群
HAProxy实现了MyCat集群的高可用和负载均衡
HAProxy自身的高可用则可以通过Keepalived来实现
安全(server.xml)
权限配置
user标签
配置用户密码
配置是否只读:readOnly
privileges标签
【权限】
【权限】
check
true:开启权限检查
false:不开启,默认
配置说明
0000
0010
1110
1111
SQL拦截
firewall标签
【防火墙】
【防火墙】
fwhitehost标签(白名单)
只有白名单用户可进
blacklist标签(黑名单)
selectAllow
deleteAllow
updateAllow
insertAllow
......
监控工具
Mycat-web:8082 + zookeeper:2181
访问 主机地址:8082/mycat
添加zookeeper服务器配置
配置mycat服务管理
0 条评论
下一页