一、mycat分布式存储服务部署
1. 安装java运行环境(db01)
[root@db01~]# yum install -y java2. 下载、解压mycat包
# 上传解压mycat程序包
[root@db01 ~]# tar xf Mycat-server-1.6.7.4-release-20200105164103-linux_.tar.gz -C /usr/local/
[root@db01 ~]# ll /usr/local/mycat
# 配置服务程序环境变量
[root@db01~]# vim /etc/profile
export PATH=/usr/local/mycat/bin:$PATH
[root@db01~]# source /etc/profile3. 运行启动服务程序并测试连接mycat:
[root@db01~]# mycat start
[root@db01~]# mysql -uroot -p123456 -h 127.0.0.1 -P8066
或者
[root@db01~]# mysql -uroot -p123456 -h 127.0.0.1 -P8066 --default-auth=mysql_native_password
-- 有可能会出现连接不上的情况,因为mycat程序库中,使用的java连接驱动器版本为5.1版本,和数据库8.0可能有兼容问题
[root@db01~]# cp mysql-connector-java-8.0.21/mysql-connector-java-8.0.21.jar /usr/local/mycat/lib/
[root@db01~]# mycat restart
-- 可以进行mycat连接驱动更新操作,可以解决mycat连接问题
二、mycat实现读写分离
1.程序目录配置说明
目录信息 | 解释说明 | 文件信息 | 解释说明 |
---|---|---|---|
bin | 程序脚本目录 | ||
conf | 配置文件目录 | schema.xml | 管理节点信息配置文件(主配置文件) 节点信息、读写分离、高可用设置、调用分片策略... |
rule.xml | 定义分片规则配置文件(分片策略定义、功能使用方法) | ||
server.xml | 服务功能本身配置文件(服务有关配置) 用户、网络、权限、策略、资源... | ||
xx.txt | 分片参数定义文件 | ||
log4j2.xml | 相关日志记录配置 | ||
lib | 驱动程序目录 | ||
logs | 日志文件目录 | wrapper.log | 服务运行启动日志文件 |
mycat.log | 服务运行情况日志文件 |
2.schema.xml 配置文件(实现读写分离)
[root@db01 ~]# cd /usr/local/mycat/conf/
[root@db01 conf]# vim schema.xml
# 逻辑库schema部分
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="cqshzl" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_cqshzl"></schema>
-- schema表示mycat逻辑库
<schema name="proc_t" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_proc_t"></schema>
<dataNode name="node_cqshzl" dataHost="host_cqshzl" database="cqshzl" />
-- database 指向真实的数据库
<dataNode name="node_proc_t" dataHost="host_cqshzl" database="proc_t" />
<dataHost name="host_cqshzl" maxCon="4000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="172.16.130.8:3306" user="jczz" password="12366">
<readHost host="hostS1" url="172.16.9.233:3306" user="jczz" password="12366"></readHost>
<readHost host="hostS2" url="172.16.10.176:3306" user="jczz" password="12366"></readHost>
<readHost host="hostS3" url="172.16.130.11:3306" user="jczz" password="12366"></readHost>
</writeHost>
</dataHost>
</mycat:schema>
schema区域配置文件说明:
配置参数 | 配置方法 | 解释说明 |
---|---|---|
checkSQLschema | checkSQLschema=true | 表示检查是否使用数据库.表的方式调取数据信息 |
checkSQLschema=false | 表示忽略检查使用数据库.表的方式调取数据信息(默认已经进入到指定库中了) | |
sqlMaxLimit | 数值信息 | 表示实现分片功能的行数限制(也可以理解为是分页功能) |
dataNode | 字符信息 | 表示逻辑数据库需要连接访问的后端节点信息 |
dataNode区域配置文件说明:
配置参数 | 配置方法 | 解释说明 |
---|---|---|
name | 字符信息 | 表示自定义的后端节点名称(与schema中的dataNode配置要相同) |
dataHost | 字符信息 | 表示自定义的后端主机组或实例组名称 |
database | 字符信息 | 表示指定需要访问后端的真实数据库信息 |
dataHost区域配置文件说明:
配置参数 | 配置方法 | 解释说明 |
---|---|---|
name | 字符信息 | 表示自定义的后端主机组或实例组名称(与dataNode中的dataHost配置要相同) |
maxCon | 数值信息 | 表示服务承载的最大并发连接数(单节点 写-500~100 读-1000~10000) |
minCon | 数值信息 | 表示服务预先准备的连接池数量,当服务启动之后,在后端节点上自动开启的连接线程 当释放连接资源的最低值,预先准备好连接资源可以减少CPU计算压力 在数据库主节点上,可以使用show processlist命令查询到,已经准备好的sleep连接信息(通常20~50) |
balance | 指定数值 | 表示指定读操作的负载均衡类型,目前的应用取值有三种: 当数值为0,不开启读写分离机制,所有读操作都发送到当前可用的writeHost上; 当数值为1,全部的readHost与standby writeHost参与select语句的负载均衡 简述:当双主双从模式(M1-S1,M2-S2,M1与M2互为主备),M2 S1 S2都参与select语句的负载 当数值为2,所有读操作都随机的在writeHost、readHost上分发 |
writeType | 布尔信息 | 表示指定写操作的负载均衡类型,目前的应用取值有两种: 当数值为0时,所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost 重新启动后已切换后的为主,切换信息记录在配置文件中(dnindex.properties) 当数值为1时,所有写操作都随机的发送到配置writeHost节点上(不推荐使用) |
switchType | 数值信息 | 表示主节点故障切换的方式设定 当数值为-1时,表示不自动切换; 当数值为1时,表示默认值设置,会实现自动切换; 当数值为2时,基于mysql主从同步的状态决定是否切换,心跳语句为show slave status,进行datahost切换 |
tempReadHostAvailable | 布尔信息 | 当数值设置为1时,表示1主1从时(1个writehost,1个readhost时) 可以开启此参数,表示写节点故障时,对应读节点依然可以正常工作; 当数值设置为0时,如果2主2从时(2个writehost,2个readhost时) 可以关闭此参数,表示写节点故障时,对应读节点随之停止正常工作; |
3.server.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="useHandshakeV10">1</property>
<property name="useOffHeapForMerge">0</property>
</system>
<!-- 指定mycat要连接的用户名和密码,以及需要展示的数据库,展示的数据库需要与schema配置文件中schema对齐 -->
<user name="jczz" defaultAccount="true">
<property name="password">12366</property>
<!--<property name="schemas">TESTDB</property>-->
<property name="schemas">cqshzl,proc_t</property>
<property name="defaultSchema">cqshzl</property>
</user>
</mycat:server>
3.mycat实现读写分离
1.配置文件修改
[root@db01 conf]# vim schema.xml<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="cqshzl" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_cqshzl"></schema> -- schema表示mycat逻辑库 <schema name="proc_t" checkSQLschema="false" sqlMaxLimit="100" dataNode="node_proc_t"></schema> <dataNode name="node_cqshzl" dataHost="host_cqshzl" database="cqshzl" /> -- database 指向真实的数据库 <dataNode name="node_proc_t" dataHost="host_cqshzl" database="proc_t" /> <dataHost name="host_cqshzl" maxCon="4000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="172.16.130.8:3306" user="jczz" password="12366"> <readHost host="hostS1" url="172.16.9.233:3306" user="jczz" password="12366"></readHost> <readHost host="hostS2" url="172.16.10.176:3306" user="jczz" password="12366"></readHost> <readHost host="hostS3" url="172.16.130.11:3306" user="jczz" password="12366"></readHost> </writeHost> </dataHost> </mycat:schema>
2. 在db01-3307主节点进行操作
[root@db01 ~]# mysql -S /data/3307/mysql.sock -e "source /root/world.sql"
# 重新加载修改后配置文件或重启mycat
[root@master conf]# mysql -uroot -p123456 -h 10.0.0.51 -P9066
mysql> reload @@config_all;
[root@db01 ~]# mycat restart3. 读写分离测试操作
[root@db01~]# mysql -uroot -p123456 -h 10.0.0.51 -P8066
mysql> select @@server_id;
+-------------+
| @@server_id |
+-------------+
| 9 |
+-------------+
1 row in set (0.05 sec)
-- 测试读效果mysql> begin;select @@server_id;commit;
+-------------+
| @@server_id |
+-------------+
| 7 |
+-------------+
1 row in set (0.00 sec)
-- 测试写效果
三、mycat运行维护
[root@db01 ~]# mysql -uroot -p123456 -h 10.0.0.51 -P9066
mysql> show @@help;
-- 获取查看帮助信息
mysql> show @@server;
-- 查看mycat服务状态情况
mysql> show @@datanode;
-- 查看分片信息情况
mysql> show @@datasource;
-- 查看数据源信息
mysql> reload @@config;
-- 重新加载配置信息-schema.xml
mysql> reload @@config_all;
-- 重新加载配置信息-所有配置重新加载