前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyCat06——搭建读写分离

MyCat06——搭建读写分离

原创
作者头像
用户8100582
发布2023-11-23 20:26:17
1670
发布2023-11-23 20:26:17
举报
文章被收录于专栏:Java多线程Java多线程

在完成了MySQL主从复制的搭建后,下边通过MyCat来实现数据库的读写分离。

1 修改mycat配置

进入到 mycat 安装目录 conf 目录下,打开 schema.xml 文件。

在文件中关键节点信息如下:

1.1 schema节点

节点中各属性配置:

  • name 在 server.xml 中进行配置,应与该配置名称包括大小写在内,完全一致。
  • checkSQLschema 是否自动检查数据表的名字
  • sqlMaxLimit 一次最大读取的数据量
  • dataNode 数据的分片节点名称

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"> </schema>

1.2 dataNode节点

在该节点中主要配置的是分片信息。

节点中各属性配置:

  • name 应与 schema 节点中的 dataNode 属性值相同
  • dataHost 用于在 dataHost 节点中 name 属性的配置,以此关联;
  • database 在数据库中真实存在的database名称

在之前验证主从复制功能时,创建了数据库 test,这里也配置上该数据库。

<dataNode name="dn1" dataHost="db_host" database="test" />

1.3 物理数据库配置

主要是配置的dataHost节点。

  • dataHost节点中各属性配置:
  • name 与 dataNode节点中 dataHost 属性值相同;
  • maxCon 最大连接数
  • minCon 最小连接数
  • balance 读操作的负载均衡类型,取值范围主含义如下:

取值

含义

0

所有读操作都将发送到 writeHost 服务器中

1

所有读操作都将发送到 readHost 服务器中

2

读操作将随机发送到 writeHost 或 readHost 服务器中

  • writeType 写操作的类型,取值范围及含义如下: | 取值 | 含义 | | --- | --- | | 0 | 所有写操作都将发送到 writeHost 服务器中 | | 1 | 所有写操作都将发送到 readHost 服务器中 | | 2 | 写操作将随机发送到 writeHost 或 readHost 服务器中 |
  • dbType 数据库类型
  • dbDriver 数据库驱动
  • switchType 自动切换

<dataHost name="db_host" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

1.4 writeHost、readHost节点

节点中各属性配置:

  • host 服务名称,应有唯一性
  • url 数据库服务器的IP和端口,如果是采用容器启动的数据库,这里的IP和端口都需要配置为容器所在物理机的IP和端口
  • user 访问数据库的用户名
  • password 访问数据库的密码

使用之前配置的主从数据库,master 节点用于写,slave 节点用于读。

需要注意的是,readHost 节点被包裹在 writeHost 节点中。

<writeHost host="hostM1" url="192.168.137.3:3366" user="root" password="123456"><readHost host="hostM2" url="192.168.137.3:3377" user="root" password="123456"/>

</writeHost>

修改后完全的配置信息如下:

2 重新启动mycat

修改完配置信息后,通过指令重启mycat服务。

mycat restart

可以通过查看 logs 目录下 mycat.log 日志,观察服务启动是否正常。

通过日志可以发现,两个数据库都已成功连接。

可能会出现的问题:

新版本mycat的lib库下,只有mysql8版本的驱动类,如果我们的mysql服务器是使用的5.7版本,需要在网上找到5.7的驱动类上传到服务上,并替换原来的mysql8驱动类。

3 验证读写分离

3.1 进入到mycat数据端口

mysql -uroot -p123456 -h 192.168.137.3 -P8066

查看并切换到 TESTDB 数据库下

查询之前创建的 student 表及表中的记录

3.2 向数据库中插入一条记录

其中 @@hostname 代表主机名,即执行这条语句的数据库所在服务器的主机名,用来验证该条 SQL 语句,被哪个数据库服务器执行。

insert into student values(2, @@hostname);

因 @@hostname 主机名长度超过了原先数据表的设置,因此会报错。

需要先修改数据表该字段的长度

alter table student modify column name varchar(30);

修改完成后,重新执行插入语句

数据插入成功后,执行查询

3.3 数据验证

再来观察数据库两个节点的服务器名称。

因容器中服务器的名称,与容器ID相同,通过 docker ps 可以看到它们的对应关系。

经过分析,可以发现,在mycat执行的 insert 语句时,被插入的服务器名称,就是用作写操作的 master 节点的容器ID,因此,可以证明:执行该语句的正是 master 节点。

一个简单的读写分离,即配置完成。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 修改mycat配置
    • 1.1 schema节点
      • 1.2 dataNode节点
        • 1.3 物理数据库配置
          • 1.4 writeHost、readHost节点
          • 2 重新启动mycat
          • 3 验证读写分离
            • 3.1 进入到mycat数据端口
              • 3.2 向数据库中插入一条记录
                • 3.3 数据验证
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com