前置文章:
MySQL基础-分库分表(一),该文主要讲了分库分表概念、MyCat安装及快速入门。
MySQL基础-分库分表(二) ,该文主要讲了MyCat配置、常用的分片规则等内容。
零、本文纲要
一、MyCat管理及监控
- MyCat原理
- MyCat管理
- Mycat-Web
二、读写分离
- 一主一从
- 双主双从
一、MyCat管理及监控
1. MyCat原理
执行:SQL解析 → 分片分析 → 路由分析 → 读写分离分析
返回:结果合并 → 聚合处理 → 排序处理 → 分页处理
2. MyCat管理
Mycat默认开通2个端口:
8066 数据访问端口,即进行 DML 和 DDL 操作;
9066 数据库管理端口,即 mycat 服务管理控制功能,用于管理mycat的整个集群状态。
连接管理控制台:
mysql -h 192.168.200.210 -p 9066 -uroot -p123456
命令 | 含义 |
---|---|
show @@help | 查看Mycat管理工具帮助文档 |
show @@version | 查看Mycat的版本 |
reload @@config | 重新加载Mycat的配置文件【配置后无需重启,使用该命令重加载即可】 |
show @@datasource | 查看Mycat的数据源信息 |
show @@datanode | 查看MyCat现有的分片节点信息 |
show @@threadpool | 查看Mycat的线程池信息 |
show @@sql | 查看执行的SQL【最近执行的SQL】 |
show @@sql.sum | 查看执行的SQL统计 |
3. Mycat-Web
Mycat eye 需要Zookeeper作为配置中心
Mycat eye官方下载地址
- ① 使用
先启动zookeeper:zkServer.sh start
然后启动mycat eye:start.sh
访问地址:http://192.168.200.210:8082/mycat
二、读写分离
注意:此处省略了数据库的配置,数据库的主从配置还是需要手动完成的,不要遗漏。
1. 一主一从
M1->S1
- ① schema.xml配置
注意:此处逻辑表可以省略。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 配置逻辑库 -->
<schema name="STONE_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="dhost1" database="stone" />
<dataHost name="dhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="master1" url="jdbc:mysql://192.168.200.211:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" >
<readHost host="slave1" url="jdbc:mysql://192.168.200.212:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" />
</writeHost>
</dataHost>
</mycat:schema>
balance属性
参数值 | 含义 |
---|---|
0 | 不开启读写分离机制 , 所有读操作都发送到当前可用的writeHost上【默认值】 |
1 | 全部的readHost 与 备用的writeHost 都参与select 语句的负载均衡 (主要针对于双主双从模式) |
2 | 所有的读写操作都随机在writeHost , readHost上分发 |
3 | 所有的读请求随机分发到writeHost对应的readHost上执行, writeHost不负担读压力 |
- ② 存在问题
当主节点Master宕机之后,业务系统就只能够读,而不能写入数据。
2. 双主双从
M1->S1,M2->S2,并且 M1 与 M2 互为主备
- ① schema.xml配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 配置逻辑库 -->
<schema name="STONE_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="dhost1" database="stone" />
<dataHost name="dhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="master1" url="jdbc:mysql://192.168.200.211:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" >
<readHost host="slave1" url="jdbc:mysql://192.168.200.212:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" />
</writeHost>
<writeHost host="master2" url="jdbc:mysql://192.168.200.213:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" >
<readHost host="slave2" url="jdbc:mysql://192.168.200.214:3306?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8" user="root" password="1234" />
</writeHost>
</dataHost>
</mycat:schema>
balance="1"
代表全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡。简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡;
writeType="0"
写操作都转发到第1台writeHost, writeHost1挂了, 会切换到writeHost2上;如果为1,所有的写操作都随机地发送到配置的 writeHost 上 ;
switchType="1"
表示writeHost1宕机,则自动切换至writeHost2;如果为1,不自动切换。
三、结尾
以上即为MySQL基础-分库分表(三)的全部内容,感谢阅读。
网友评论