likes
comments
collection
share

MyCat06——搭建读写分离

作者站长头像
站长
· 阅读数 75

MyCat06——搭建读写分离

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

1 修改mycat配置

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

MyCat06——搭建读写分离

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

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和端口

MyCat06——搭建读写分离

  • 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>

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

MyCat06——搭建读写分离

2 重新启动mycat

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

mycat restart

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

MyCat06——搭建读写分离 通过日志可以发现,两个数据库都已成功连接。

可能会出现的问题:

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

3 验证读写分离

3.1 进入到mycat数据端口

mysql -uroot -p123456 -h 192.168.137.3 -P8066

查看并切换到 TESTDB 数据库下

MyCat06——搭建读写分离

查询之前创建的 student 表及表中的记录 MyCat06——搭建读写分离

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

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

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

因 @@hostname 主机名长度超过了原先数据表的设置,因此会报错。 MyCat06——搭建读写分离

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

alter table student modify column name varchar(30);

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

MyCat06——搭建读写分离

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

MyCat06——搭建读写分离

3.3 数据验证

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

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

MyCat06——搭建读写分离

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

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

转载自:https://juejin.cn/post/7227672630941007930
评论
请登录