mysql 配置主从关系这里不写了,这里只说mycat部分
mycat官网地址:http://www.mycat.org.cn/
1. mycat也需要mysql数据库,在主节点上新建一个mycat数据库
2. 安装Mycat2.0,下载安装包
http://dl.mycat.org.cn/2.0/
centos系统中下载jar包和zip包:
wget http://dl.mycat.org.cn/2.0/1.22-release/mycat2-1.22-release-jar-with-dependencies-2022-4-27.jar
wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip
unzip mycat2-install-template-1.21.zip
chmod 777 mycat/bin/*
cp mycat2-1.22-release-jar-with-dependencies-2022-4-27.jar mycat/lib/
3. 配置 Mycat 原型库的数据源(datasource)信息
cd /home/papis/mycat2/mycat/conf/datasources vim prototypeDs.datasource.json
{
// 数据库类型
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// 数据库读写类型:READ、WRITE、READ_WRITE。Mycat 对数据库需要是可读可写的
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称,这里不要修改
"name":"prototypeDs",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 数据库连接
"url":"jdbc:mysql://192.168.10.80:3306/mycat?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
4. 添加 master_slave 数据库的数据源信息,我这里配置的是两主两从,可以根据自己需要配置
cp prototypeDs.datasource.json master01.datasource.json cp prototypeDs.datasource.json master02.datasource.json cp prototypeDs.datasource.json slave01.datasource.json cp prototypeDs.datasource.json slave02.datasource.json
vim master01.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// 数据库读写类型。在数据库集群时,Mycat 对主节点都是可读可写的
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称。在后面配置数据库集群时会用到
"name":"master01",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 主节点数据库连接
"url":"jdbc:mysql://192.168.10.80:3306/papis_cloud?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
vim master01.datasource.json
如果只配一个主节点,不需要再写如下配置
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// 数据库读写类型。在数据库集群时,Mycat 对主节点都是可读可写的
"instanceType":"READ_WRITE",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称。在后面配置数据库集群时会用到
"name":"master02",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 主节点数据库连接
"url":"jdbc:mysql://192.168.10.81:3306/papis_cloud?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
vim slave01.datasource.json
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// READ数据库只读写类型。在数据库集群时,Mycat 对从节点都是只读的
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称。在后面配置数据库集群时会用到
"name":"slave01",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 从节点数据库连接
"url":"jdbc:mysql://192.168.10.80:3307/papis_cloud?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
vim slave02.datasource.json
如果只有一个从节点,不需要再写如下配置,如果有多个从节点,可以配多份
{
"dbType":"mysql",
"idleTimeout":60000,
"initSqls":[],
"initSqlsGetConnection":true,
// READ数据库只读写类型。在数据库集群时,Mycat 对从节点都是只读的
"instanceType":"READ",
"maxCon":1000,
"maxConnectTimeout":3000,
"maxRetryCount":5,
"minCon":1,
// 数据源名称。在后面配置数据库集群时会用到
"name":"slave02",
// 数据库密码
"password":"123456",
"type":"JDBC",
// 从节点数据库连接
"url":"jdbc:mysql://192.168.10.81:3307/papis_cloud?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
// 数据库用户
"user":"root",
"weight":0
}
5. 配置 master_slave 数据源的集群(cluster)信息
cd /home/papis/mycat2/mycat/conf/clusters
注意: 这里不要删除 prototype.cluster.json,否则启动 Mycat 时会报错
cp prototype.cluster.json master-slave.cluster.json vim master-slave.cluster.json
{
// 集群类型:SINGLE_NODE(单节点)、MASTER_SLAVE(普通主从)、GARELA_CLUSTER(garela cluster/PXC集群)等
"clusterType":"MASTER_SLAVE",
"heartbeat":{
"heartbeatTimeout":1000,
"maxRetry":3,
"minSwitchTimeInterval":300,
"slaveThreshold":0
},
"masters":[
// 主节点数据源名称
"master01",
"master02"
],
"replicas":[
// 从节点数据源名称
"slave01",
"slave02"
],
"maxCon":200,
// 集群名称。在后面配置物理库(schema)时会用到
"name":"master-slave",
//查询负载均衡策略
"readBalanceType":"BALANCE_ALL_READ",
// NOT_SWITCH(不进行主从切换)、SWITCH(进行主从切换)
"switchType":"NOT_SWITCH"
}
重点说一下几个配置参数:
readBalanceType: 查询负载均衡策略
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
---
switchType: 主从切换设置
NOT_SWITCH:不进行主从切换
SWITCH:进行主从切换
6. 配置物理库(schema)和 Mycat 中数据源/数据源集群的关系
cd /home/papis/mycat2/mycat/conf/schemas vim master_slave.schema.json
{
// 物理库
"schemaName": "papis_cloud",
// 指向集群,或者数据源
"targetName": "master-slave",
// 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项
"normalTables": {}
}
vim master_slave2.schema.json
如果只对外暴露一个数据库,此处不需要写
{
// 物理库
"schemaName": "nacos_config",
// 指向集群,或者数据源
"targetName": "master-slave",
// 这里可以配置数据表相关的信息,在物理表已存在或需要启动时自动创建物理表时配置此项
"normalTables": {}
}
7. 修改 Mycat 登录用户信息
cd /home/papis/mycat2/mycat/conf/users vim root.user.json
{
"dialect":"mysql",
// ip 为 null,允许任意 ip 登录
"ip":null,
//登录密码
"password":"papis-passw0rd",
"transactionType":"xa",
//登录账户
"username":"root"
}
8. Mycat 服务端口等信息根据情况修改,此处不修改
cd /home/papis/mycat2/mycat/conf vim server.json
{
"loadBalance":{
"defaultLoadBalance":"BalanceRandom",
"loadBalances":[]
},
"mode":"local",
"properties":{},
"server":{
"bufferPool":{
},
"idleTimer":{
"initialDelay":3,
"period":60000,
"timeUnit":"SECONDS"
},
"ip":"0.0.0.0",
"mycatId":1,
"port":8066,
"reactorNumber":8,
"tempDirectory":null,
"timeWorkerPool":{
"corePoolSize":0,
"keepAliveTime":1,
"maxPendingLimit":65535,
"maxPoolSize":2,
"taskTimeout":5,
"timeUnit":"MINUTES"
},
"workerPool":{
"corePoolSize":1,
"keepAliveTime":1,
"maxPendingLimit":65535,
"maxPoolSize":1024,
"taskTimeout":5,
"timeUnit":"MINUTES"
}
}
}
9. 启动 Mycat
./bin/mycat start
./bin/mycat status
./bin/mycat stop
./bin/mycat pause
./bin/mycat restart
./bin/mycat console
tail -f ./logs/wrapper.log
10. 测试读写分离
mysql -u root -P8066 -h 127.0.0.1 -p
show databases
use xxx
select * from xxx;
begin;
commit;
|