|
读写分离(Read-Write Splitting)是一种常见的数据库架构化策略,通过将数据库的读操作(查询)和写操作(插入、更新、删除)分离到不同的数据库例上,从而提高系统的性能、可扩展性和高可用性。
图片
图片
在项目中现读写分离目前主流的现技术是通过 Apache ShardingSphere 来现数据库的读写分离的。
从 Apache ShardingSphere 官网也可以看出读写分离是其提供的主要功能之一:
图片
图片
ShardingSphere 官网地址:https://shardingsphere.apache.org/document/current/cn/features/readwrite-splitting/
通过 ShardingSphere 可以轻松现 MySQL 数据库的读写分离,以下是基于比较新 ShardingSphere 5.x 版本的现步骤和关键代码:
1.核心现原理
ShardingSphere 通过 JDBC 驱动层透明代理现读写分离,其核心逻辑为:
SQL 路由:根据 SQL 类型(SELECT/WRITE)自动路由到主库或从库。
负载均衡:支持轮询、随机权重等算法分配读请求到多个从库。
主从同步:依赖 MySQL 原生主从复制机制保障数据一致性。
图片
图片
2.具体现步骤
步骤 1:搭建MySQL主从复制(前置条件)
复制
-- 主库配置(my.cnf)
server-id=1
log-bin=mysql-bin
binlog-format=ROW
-- 从库配置(my.cnf)
server-id=2
relay-log=relay-bin
read-notallow=1
-- 主库创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'P@ssw0rd';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
-- 从库配置主库连接
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='P@ssw0rd',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=592;
START SLAVE;
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
步骤 2:SpringBoot项目集成ShardingSphere-JDBC
添加 Maven 依赖
在 pom.xml 中添加 ShardingSphere 和数据库连接池的依赖:
复制
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
1.
2.
3.
4.
5.
6.
7.
8.
配置 application.yml
在 application.yml 中配置数据源和读写分离规则:
复制
spring:
shardingsphere:
datasource:
names: master,slave0
# 主库配置
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://master_ip:3306/db?useSSL=false
username: root
password: Master@123
# 从库配置
slave0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://slave_ip:3306/db?useSSL=false
username: root
password: Slave@123
# 从库2配置
slave1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://slave_ip:3306/db?useSSL=false
username: root
password: Slave@123
rules:
readwrite-splitting:
data-sources:
readwrite_ds:
type: Static
props:
write-data-source-name: master
read-data-source-names:
- slave0
- slave1
load-balancer-name: round_robin
load-balancers:
round_robin:
type: ROUND_ROBIN # 轮询
props:
sql-show: true # 显示际路由的SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
配置说明
数据源配置:
a.master:主库数据源,用于写操作。
b.slave0 和 slave1:从库数据源,用于读操作。
读写分离规则:
a.write-data-source-name:指定写操作的数据源。
b.read-data-source-names:指定读操作的数据源列表。
c.load-balancer-name:指定读操作的负载均衡算法。
负载均衡算法:
a.ROUND_ROBIN:轮询算法,读请求会在 slave0 和 slave1 之间轮询。
b.其他可选算法:RANDOM(随机)、WEIGHT(权重)等。
想要在市场上大有作为,悦数 数据库就要在原有的基础上加大力度进行产品的升级换代以便适应消费者的消费需求。悦数图数据库是一款完全自主研发的国产图数据库和原生分布式图数据库,具有高性能,易扩展,安全稳定,自主可控的特点.万亿级数据仅需毫秒级查询延时,应用于金融风控,实时推荐,知识图谱等业务场景。https://www.yueshu.com.cn/
|
|