ShardingSphere 5.0.0-alpha 分库分表解决方案(五)——读写分离

timo-nbktp 1年前 ⋅ 1438 阅读

1. ShardingSphere-JDBC 读写分离

读写分离:写数据往主库写,读数据从从库读。

1.1 环境搭建

环境说明:SpringBoot 2.5.7MyBatisPlus + ShardingSphere-JDBC 5.0.0-alpha + DruidMySQL 8.0

1.1.1 pom.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.13</version>
    </dependency>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.3</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
    <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
        <version>5.0.0-alpha</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

1.1.2 创建数据库和表

按照水平分表的方式,创建数据库和数据库表

  • 创建数据库:ss_course_db_1ss_course_db_2ss_dict_db
  • 具体操作,可以参考前面两篇文章

对三个数据库都进行了主从配置,但此处只用读写分离,还不涉及分库分表,所有只涉及ss_dict_db数据库

对于配置多个数据库的主从配置,需要在MySQL的my.ini文件中,配置同步多个数据库即可,配置如下,主从配置文件都要加。

binlog-do-db=ss_dict_db
binlog-do-db=ss_course_db_1
binlog-do-db=ss_course_db_2

1.1.3 编写业务代码

此处编写业务代码略,具体代码可以下面的源码地址。代码里集成了Swagger,用于方便测试。

1.1.4 配置文件

server.port=8004

spring.shardingsphere.enabled=true
# 打开sql输出日志
spring.shardingsphere.props.sql-show=true

# 配置数据源,给数据源起名称
spring.shardingsphere.datasource.names=m1,m2

# 配置第一个数据源具,主数据库
spring.shardingsphere.datasource.common.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.common.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.m1.url=jdbc:mysql://127.0.0.1:3306/ss_dict_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
spring.shardingsphere.datasource.m1.username=root
spring.shardingsphere.datasource.m1.password=123456

# 配置第二个数据源,从数据库
spring.shardingsphere.datasource.m2.url=jdbc:mysql://127.0.0.1:3307/ss_dict_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
spring.shardingsphere.datasource.m2.username=root
spring.shardingsphere.datasource.m2.password=root

# 负载均衡算法
spring.shardingsphere.rules.replica-query.load-balancers.round-robin.type=ROUND_ROBIN
# 不配置此项会报错
spring.shardingsphere.rules.replica-query.load-balancers.round-robin.props.default=0
# 主库
spring.shardingsphere.rules.replica-query.data-sources.prds.primary-data-source-name=m1

# 从库
spring.shardingsphere.rules.replica-query.data-sources.prds.replica-data-source-names=m2
spring.shardingsphere.rules.replica-query.data-sources.prds.load-balancer-name=round_robin

1.1.5 测试结果

启动程序,在浏览器输入:http://localhost:8004/swagger-ui.html

初始时数据:3306为主库,3307为从库

添加公共数据

日志打印只向m1数据源中插入数据,即3306主数据库。

查看数据库表数据

查看所有数据

日志显示,只从m2数据源查询,即3307从数据库。

2. 说明

源码地址:https://github.com/Hofanking/springboot-shardingsphere-example

源代码目录结构说明:

springboot-shardingsphere-example

​ |— shardingsphere-database (分库分表)

​ |— shardingsphere-database-table-write-read (分库分表读写分离)

 |— shardingsphere-proxy-table (使用proxy分表)

​ |— shardingsphere-public (公共表)

 |— shardingsphere-table (分表)

​ |— shardingsphere-write-read (读写分离)

 

--end--

 

版权 本着开源共享、共同学习的精神,本文转载自 https://blog.csdn.net/zxd1435513775/article/details/122398608 , 如果侵权之处,请联系博主进行删除,谢谢~