Spring Cloud 微服务系列之 ShardingSphere-Proxy 数据库代理

ShardingSphere-Proxy是在数据库和应用程序之间起到了一个桥梁的作用,对于应用程序来说,它不需要感知ShardingSphere-Proxy的存在,依然可以使用原来的方式操作数据库 。1. 简介ShardingSphere-Proxy是ShardingSphere分布式数据库中间件的一部分,它提供了「数据库代理」功能 。通过引入ShardingSphere-Proxy , 可以在无需改动应用程序代码的情况下,实现分库分表的数据库分片、读写分离、逻辑表达式分片等功能 。ShardingSphere-Proxy独立运行于应用程序和数据库之间,充当数据库的代理,自动将请求路由至相应的数据库节点 。
官网地址:https://shardingsphere.Apache.org
2. 下载代理数据库官网下载(5.4.0版本):https://shardingsphere.apache.org/document/current/cn/downloads/
官网下载很慢,网盘下载(推荐):「apache-shardingsphere-5.4.0-shardingsphere-proxy-bin.tar.gz」来自UC网盘分享https://drive.uc.cn/s/cc1882af6a9a4
3. 配置MySQL驱动下载 mysql-connector-JAVA-8.0.11.jar,并将其放入 ext-lib 或 lib 目录下 。
mysql-connector-java-8.0.11.jar包下载地址:来自UC网盘分享https://drive.uc.cn/s/f9b1c5d7c0f64
4. 配置 server.yamlconf目录下server.yaml配置文件,主要配置代理数据库的用户名、密码、权限 。

  • 用户名 root
  • 密码 123456
  • 权限 ALL_PERMITTED
authority:users:- user: rootpassword: 123456privilege:type: ALL_PERMITTEDprops:max-connections-size-per-query: 1kernel-executor-size: 16# Infinite by default.proxy-frontend-flush-threshold: 128# The default value is 128.sql-show: falsecheck-table-metadata-enabled: false5. 配置 config-sharding.yamlconf目录下sconfig-sharding.yaml配置文件,主要配置具体的分库分表规则:
  • 代理数据库名称 sharding_db 。
  • 逻辑数据源 ds_0 指向 jdbc:mysql://127.0.0.1:3306/sharding_0 。
  • 逻辑数据源 ds_1 指向 jdbc:mysql://127.0.0.1:3306/sharding_1 。
  • company表的分片规则是id_inline,根据id取模 。
  • product表没有配置分片规则,用默认分配规则,根据company_id取模 。
  • permission表是广播表,插入(更新)数据的时候每张表都会插入(更新),读取的时候随机一张表读取 。
  • 取模算法ds_$->{id % 2} 偶数在ds_0,奇数在ds_1 。
databaseName: sharding_dbdataSources:ds_0:url: jdbc:mysql://127.0.0.1:3306/sharding_0?serverTimezone=UTC&useSSL=falseusername: rootpassword: "123456"ds_1:url: jdbc:mysql://127.0.0.1:3306/sharding_1?serverTimezone=UTC&useSSL=falseusername: rootpassword: "123456"rules:- !SHARDINGtables:company:actualDataNodes: ds_$->{0..1}.companydatabaseStrategy:standard:shardingColumn: idshardingAlgorithmName: id_inlineproduct:actualDataNodes: ds_$->{0..1}.productdefaultDatabaseStrategy:standard:shardingColumn: company_idshardingAlgorithmName: database_inlineshardingAlgorithms:database_inline:type: INLINEprops:algorithm-expression: ds_$->{company_id % 2}id_inline:type: INLINEprops:algorithm-expression: ds_$->{id % 2}- !BROADCASTtables: # 广播表规则列表- permission注意上面是url,而不是jdbcUrl,官方这么说的:
Spring Cloud 微服务系列之 ShardingSphere-Proxy 数据库代理

文章插图
图片
否则启动代理数据库会出现如下异常:
Unable to find property 'jdbcUrl' on class: org.apache.shardingsphere.proxy.backend.config.yaml.YamlProxyDataSourceConfiguration6. 配置 config-readwrite-splitting.yamlconf目录下config-readwrite-splitting.yaml配置文件,主要配置数据库的读写分离 。
往write_ds数据库写数据的时候会自动同步到read_ds_0、read_ds_1两个库中 。读取数据的时候会随机从read_ds_0、read_ds_1选择一个数据源进行读取 。
databaseName: readwrite-splitting_dbdataSources:write_ds:url: jdbc:mysql://127.0.0.1:3306/demo_write_ds?serverTimeznotallow=UTC&useSSL=falseusername: rootpassword: 123456read_ds_0:url: jdbc:mysql://127.0.0.1:3306/demo_read_ds_0?serverTimeznotallow=UTC&useSSL=falseusername: rootpassword: 123456read_ds_1:url: jdbc:mysql://127.0.0.1:3306/demo_read_ds_1?serverTimeznotallow=UTC&useSSL=falseusername: rootpassword: 123456rules:- !READWRITE_SPLITTINGdataSources:readwrite_ds:writeDataSourceName: write_dsreadDataSourceNames:- read_ds_0- read_ds_1