四时宝库

程序员的知识宝库

Mysql读写分离方案之Mycat2(mysql5.7读写分离)

官网地址:http://www.mycat.org.cn/

场景

10.4.7.100 mysql-master

10.4.7.101 mysql-slave

10.4.7.102 mycat

Mysql主从部署

Mycat部署

下载相关软件包

http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar

http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip

安装jdk

已有的略过即可

解压软件包

cd /data/soft
unzip mycat2-install-template-1.21.zip
mv mycat /data/
cp mycat2-1.21-release-jar-with-dependencies.jar /data/mycat/lib/

修改自带数据源

cd /data/mycat/conf/datasources
vim prototypeDs.datasource.json

配置文件内容如下:

{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"prototypeDs",
        "password":"1qaz@wsx?Z",
        "type":"JDBC",
        "url":"jdbc:mysql://10.4.7.100:3306/mysql?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"root",
        "weight":0
}

修改server配置

主要修改内容为添加"serverVersion":"5.7.40-mycat-2.0",根据自己的服务器版本进行修改

{
  "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,
    "serverVersion":"5.7.40-mycat-2.0",
    "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"
    }
  }
}

配置mycat用户

{
	"dialect":"mysql",
	"ip":null,
	"password":"mycat@123",
	"transactionType":"proxy",
	"username":"root"
}

启动mycat

cd /data/mycat/bin/
chmod +x ./*
./mycat start

测试连接

这个时候我们是看不到我们配置的数据库

创建逻辑数据库

创建数据源

cd /data/mycat/conf/datasources
cp prototypeDs.datasource.json m7-100-a1.datasource.json
cp prototypeDs.datasource.json s7-101-a1.datasource.json

配置说明

配置文件名称:

m7-100-a1.datasource.json:master 10.4.7.100 a1库

s7-101-a1.datasource.json:slave 10.4.7.101 a1库

根据自己的需求进行配置,名称格式为:数据源名称.datasource.json

  • name:数据源名称,要全局唯一,后面配置集群时会用到这个名称
  • url:数据库连接字符串,根据自己的环境配置即可
  • maxConnectTimeout:单位millis,配置中的定时器主要作用是定时检查闲置连接
  • initSqlsGetConnection:true|false,默认:false,对于jdbc每次获取连接是否都执行initSqls
  • type:数据源类型,没有必要不要使用NATIVE
    • JDBC,默认,只使用JDBC驱动连接
    • NATIVE_JDBC,该数据源同一个配置同时可以使用NATIVE,JDBC
    • NATIVE,只使用NATIVE协议(即Mycat自研的连接MySQL的协议)
  • queryTimeout:jdbc查询超时时间 默认不超时(1.20,以及早期1.21默认30mills)
  • instanceType:配置实例只读还是读写,读节点可以设置为READ,可选参数:READ_WRITE、READ、WRITE,在集群中,是READ_WRITE的类型,被设置到replicas,对该集群是READ的,但是它也被设置到masters则为READ_WRITE,这个属性要配合集群的负载均衡使用
  • weight:负载均衡特定用的权重

数据源配置文件内容

  • m7-100-a1.datasource.json
{
  "dbType":"mysql",
  "idleTimeout":60000,
  "initSqls":[],
  "initSqlsGetConnection":true,
  "instanceType":"READ_WRITE",
  "maxCon":1000,
  "maxConnectTimeout":3000,
  "maxRetryCount":5,
  "minCon":1,
  "name":"m7-100-a1",
  "password":"1qaz@wsx?Z",
  "type":"JDBC",
  "url":"jdbc:mysql://10.4.7.100:3306/test_sync_a1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
  "user":"root",
  "weight":0
}
  • s7-101-a1.datasource.json
{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"s7-101-a1",
	"password":"1qaz@wsx?Z",
	"type":"JDBC",
	"url":"jdbc:mysql://10.4.7.101:3306/test_sync_a1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
	"user":"root",
	"weight":0
}

配置schemas

配置文件位置:/data/mycat/conf/schemas

修改配置文件test_sync_a1.schema.json

配置文件完整内容如下:

{
	"customTables":{},
	"globalTables":{},
	"normalProcedures":{},
	"normalTables":{},
	"schemaName":"test_sync_a1",
  "targetName":"test_sync_a1_cluster",
	"shardingTables":{},
	"views":{}
}

targetName:目标集群名称,要和下面配置的cluster集群名称一致

配置cluster

配置说明

配置文件目录:/data/mycat/conf/clusters

cluster配置文件格式为:{集群名称}.cluster.json

  • clusterType:集群类型

配置选项:

    • SINGLE_NODE:单一节点
    • MASTER_SLAVE:普通主从
    • GARELA_CLUSTER:garela cluster/PXC集群
    • MHA:1.21-2022年1月完善
    • MGR:1.21-2022年1月完善,MIC集群可以使用此配置
  • readBalanceType :查询负载均衡策略

配置选项:

    • BALANCE_ALL(默认值):获取集群中所有数据源
    • BALANCE_ALL_READ:获取集群中允许读的数据源
    • BALANCE_READ_WRITE:获取集群中允许读写的数据源,但允许读的数据源优先
    • BALANCE_NONE:获取集群中允许写数据源,即主节点中选择
  • switchType:切换类型
    • NOT_SWITCH:不进行主从切换
    • SWITCH:进行主从切换

集群配置文件内容

新建配置文件:test_sync_a1_cluster.cluster.json

{
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetry":3,
                "minSwitchTimeInterval":300,
                "slaveThreshold":0
        },
        "masters":[
                "m7-100-a1"
        ],
        "replicas":[
                "s7-101-a1"
        ],
        "maxCon":200,
        "name":"test_sync_a1_cluster",
        "readBalanceType":"BALANCE_ALL",
        "switchType":"SWITCH"
}

重启mycat

/data/mycat/bin/mycat restart

连接测试

可以发现现在已经可以看到相关表

读写分离测试

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接