- 1. ShardingSphere-Proxy基本介绍
- 2. ShardingSphere-Proxy安装
- 2.1 下载
- 2.2 解压
- 2.3 配置
- 2.3.1 server.yaml
- 2.3.2 config-sharding.yaml
- 2.3.3 启动ShardingSphere
- 2.3.4 连接
- 3. ShardingSphere-Proxy 分表
- 3.1 环境搭建
- 3.1.1 pom.xml
- 3.1.2 编写业务代码
- 3.1.3 配置文件
- 3.1.5 测试结果
- 4. 说明
- 5.坑
之前使用的ShardingSphere-JDBC
的原理架构是这样的:对于每一个应用都需要配置Sharding-JDBC
。
上面这样是不是和麻烦呢,来看下ShardingSphere-Proxy
的原理图:是不是一目了然
没错,ShardingSphere-Proxy
提供透明化的数据库代理端,而不用每个应用服务都要独立的配置ShardingSphere-JDBC
向应用程序完全透明,可直接当做MySQL
使用
下载ShardingSphere-Proxy
最新版
https://shardingsphere.apache.org/document/current/cn/downloads/
2.2 解压把下载之后压缩文件,解压,启动bin
目录启动文件就可以了,但需要做相关配置,暂时先不要启动
配置server.yaml
,把下面的配置的 #
注释打开,改为符合自己的配置。
authentication:
users:
root:
password: root
sharding:
password: sharding
authorizedSchemas: sharding_db
props:
max-connections-size-per-query: 1
acceptor-size: 16 # The default value is available processors count * 2.
executor-size: 16 # Infinite by default.
proxy-frontend-flush-threshold: 128 # The default value is 128.
proxy-transaction-type: LOCAL
proxy-opentracing-enabled: false
proxy-hint-enabled: false
query-with-cipher-column: true
sql-show: true
check-table-metadata-enabled: false
2.3.2 config-sharding.yaml
配置分表规则, config-sharding.yaml
,把最下面MySQL
的注释改为符合自己的配置
# 只配置分表
schemaName: sharding_db
dataSourceCommon:
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
maintenanceIntervalMilliseconds: 30000
dataSources:
ds_0:
url: jdbc:mysql://127.0.0.1:3306/ss_course_db_proxy_1?serverTimezone=UTC&useSSL=false
rules:
- !SHARDING
tables:
t_course:
actualDataNodes: ds_${0}.t_course_${1..2}
tableStrategy:
standard:
shardingColumn: cid
shardingAlgorithmName: t_course_inline
keyGenerateStrategy:
column: cid
keyGeneratorName: snowflake
bindingTables:
- t_course
defaultDatabaseStrategy:
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_0
t_course_inline:
type: INLINE
props:
algorithm-expression: t_course_${cid % 2 + 1}
keyGenerators:
snowflake:
type: SNOWFLAKE
props:
worker-id: 123
如果需要自己制定ShardingSphere-Proxy
创建的数据库名称,需要自己手动改下上面配置文件中的authorizedSchemas
、schemaName
两个属性
这地方要注意的是:如果后端连接 MySQL
数据库,需要手动下载MySQL
对应版本的驱动包并将其放入 lib
目录下
启动ShardingSphere-Proxy
服务,ShardingSphere-Proxy
默认端口号 3307
。由于我之前配置从数据库的端口是3307
,所以此处在启动的时候我把ShardingSphere-Proxy
端口设为3308
连接方式和连接MySQL
一样,使用MySQL命令行工具进行连接,并进行命令操作,看到只有一个库
在sharding_db
数据库创建表,该代理层会根据分库分表规则自动在后端对应的分库中创建表
向表添加一条记录
回到本地3306
端口实际数据库中,看到已经创建好了表和添加数据
环境说明:SpringBoot 2.5.7
+ MyBatisPlus
+ ShardingSphere-JDBC 5.0.0-alpha
+ Druid
+ MySQL 8.0
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
com.alibaba
druid
1.1.13
com.baomidou
mybatis-plus-boot-starter
3.4.3
mysql
mysql-connector-java
8.0.27
org.springframework.boot
spring-boot-starter-test
test
注意:此处在pom文件中,要移除shardingsphere-jdbc-core-spring-boot-starter依赖
3.1.2 编写业务代码此处编写业务代码略,具体代码可以下面的源码地址,经过本人调试过。代码里集成了Swagger
,用于方便测试。
server.port=8006
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 此处要连接sharding-proxy库
spring.datasource.url=jdbc:mysql://localhost:3308/sharding_db?useServerPrepStmts=true&cachePrepStmts=true
spring.datasource.username=root
spring.datasource.password=root
此处要连接sharding-proxy库,和操作MySQL数据库一样
3.1.5 测试结果启动程序,在浏览器输入:http://localhost:8006/swagger-ui.html
插入数据
Sharding-Proxy
服务日志,忽略乱码吧
数据插入数据库成功
查询数据
Sharding-Proxy
服务查询日志
源码地址: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 (读写分离)
5.坑本人在实际操作的过程中,没有将shardingsphere-jdbc-core-spring-boot-starter
依赖移除,导致项目运行不起来,看配置也没有问题,后来尝试将shardingsphere-jdbc-core-spring-boot-starter
依赖移除,发现就可以了。
在项目的配置文件中,只需要配置数据源,而且写的sharding-proxy
的地址,这样就完全将sharding-proxy
当MySQL
一样用了。
可能是我本人一开始没有理解吧。对于基于sharding-proxy
的分库分表,读写分离,就不在往下研究了,因为只需要把sharding-jdbc
的配置研究明白,其他的都类似。只不过sharding-proxy
的配置是在conf
目录下的指定配置文件中,这一条路算是趟过了。