这是《ShardingSphere 进阶》专栏的第3篇文章,往期文章如下:
今天聊一下如何通过Sharding-JDBC简单的实现读写分离~
读写分离则是将事务性的增、改、删操作在主库执行,查询操作在从库执行。
一般业务的写操作都是比较耗时,为了避免写操作影响查询的效率,可以使用读写分离。
当然读写分离并不是万能的,还有前面的分库分表方案。
MySQL搭建读写分离非常简单,一般有一主一从、一主多从,对于MySQL的主从的相关概念这里就不再详细介绍了。
下面陈某就以MySQL5.7为例,使用docker搭建一个一主一从的架构,步骤如下:
使用如下命令从镜像仓库中下载镜像:
MySQL数据和配置文件挂载的目录:
修改MySQL主节点的配置文件,内容如下:
修改MySQL从节点的配置文件,内容如下:
命令如下:
命令如下:
命令如下:
首先主服务器上查看master_log_file
、master_log_pos
两个参数,然后切换到从服务器上进行主服务器的连接信息的设置。
主服务上执行:
docker查看主服务器容器的ip地址:
从服务器上执行:
Slave_IO_Running: Yes,Slave_SQL_Running: Yes
即表示启动成功。
上面使用Docker搭建了一个MySQL的一主一从的架构,如下:
ip:port | 节点 | 数据库 |
---|---|---|
192.168.47.149:3306 | 主节点 | product_db_1 |
192.168.47.149:3307 | 从节点 | product_db_1 |
Sharding-JDBC对于读写分离的配置非常简单,分为如下几个步骤:
“关于数据库中的表的SQL就不再贴了,文末有案例源码,自己下载! ”
无论是分库分表还是读写分离,数据源的声明肯定是必须的,如下:
第①步仅仅配置了数据源,并未指定哪个是主库,哪个是从库,Sharding-JDBC 默认是不知道哪个主库还是从库的,因此需要自己配置。
配置规则如下:
这里的<master-slave-data-source-name>
一定要注意,这个是主从配置的名称(相当于逻辑数据源),名称可以随意,但是一定要唯一。
陈某的配置如下:
指定的逻辑数据源为ms,主库为ds1
,从库为ds2
。
“
load-balance-algorithm-type
:指定从库的负载均衡算法,后面文章介绍 ”
经过上面两步的配置,Sharding-JDBC的读写分离已经配置成功,下面来测试一下。
理想效果:
1、写操作
直接insert插入一条数据,查看Sharding-JDBC的日志,如下:
“可以看到都在ds1中执行了 ”
2、读操作
根据商品ID查询一条数据,效果如下:
“可以看到都在ds2中执行了 ”
本篇文章介绍了MySQL的读写分离架构搭建以及使用Sharding-JDBC去实现程序中无感知使用读写分离。
关于读写分离还有一些内容未介绍,将会放在后面文章详细介绍。