ShardingSphere-Proxy简介
摘自官网:ShardingSphere-Proxy是ShardingSphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。
- 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
- 适用于任何兼容MySQL/PostgreSQL协议的的客户端。
说白了就是一个封装了各种分库分片规则的程序,客户端调用就像之前使用数据库一样无感知,本质数据的存储还是放在配置分片规则的真实数据库中。类似Mycat的功能
使用配置
-
官网下载ShardingSphere-Proxy最新软件
ShardingSphere-proxy下载 -
下载之后解压,4.1.1的版本有坑在下载解压之后lib目录中有些文件的后缀丢失,需要将所有不是.jar结尾的文件更正成.jar文件,否则会报class Not Found
-
修改Server.yaml文件 配置ShardingSphere服务器信息,其实很简单,将authentication节点之后的注释打开改改就好。这里没有配置编排治理相关,相关参考官方文档。
authentication: # proxy的数据库连接账号 类似mysql的 账号功能 users: root: password: admin sharding: password: admin # 类似数据库 类似create dabase test_sharding_proxy authorizedSchemas: test_sharding_proxy # 其他可以使用默认 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. # LOCAL: Proxy will run with LOCAL transaction. # XA: Proxy will run with XA transaction. # BASE: Proxy will run with B.A.S.E transaction. proxy.transaction.type: LOCAL proxy.opentracing.enabled: false proxy.hint.enabled: false query.with.cipher.column: true # 把sql打印可以打开 sql.show: true allow.range.query.with.inline.sharding: false
-
配置config-sharding.yaml文件 配置分片策略
有了前面的配置sharding这个文件几乎跟之前sharding-JDBC一模一样
schemaName: test_sharding_proxy # 配置真实数据源 dataSources: ds_0: url: jdbc:mysql://127.0.0.1:3306/ss1?serverTimezone=UTC&useSSL=false username: root password: admin connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 ds_1: url: jdbc:mysql://127.0.0.1:3306/ss2?serverTimezone=UTC&useSSL=false username: root password: admin connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 # 分片规则 shardingRule: tables: user: actualDataNodes: ds_${0..1}.user_${0..1} # 分表规则 tableStrategy: inline: shardingColumn: id algorithmExpression: user_${id % 2} keyGenerator: type: SNOWFLAKE column: id bindingTables: - user # 默认分库规则 defaultDatabaseStrategy: inline: shardingColumn: id algorithmExpression: ds_${id % 2} defaultTableStrategy: none:
-
启动ShardingSphere-proxy
进入bin目录 window start.bat 如果是linux start.sh 如果需要传入端口则 start.sh ${proxy_port}即可 默认3307
-
测试 现在就可以使用mysql cli 或者 navicat等其他客户端工具连接localhost:3307这个数据库
根据上面的配置可以使用root@admin这个账号进入,这里navicat我数据库的展示有BUG展示的是之前数据库的信息,这里直接使用命令行show dabases;即可看到test_sharding_proxy数据库.
SHOW DABASES;
因为使用的之前用的user表在使用test_sharding_proxy之后即可查询到数据
USE test_sharding_proxy; SELECT * FROM user;
然后尝试插入会根据具体的分库分片策略进行插入真实的数据库
比如下面这条记录id为666是偶数会插入ss1数据中的user_0这个表
INSERT INTO user (`id`, `name`, `age`) VALUES (666, 'name111', 666);
-
-
配置读写分离 修改config-master_slave.yaml 跟之前配置jdbc类似
# 读写分离数据库名 schemaName: test_read_write_sperator dataSources: master_ds: url: jdbc:mysql://127.0.0.1:3306/test_master?serverTimezone=UTC&useSSL=false username: root password: admin connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 slave_ds_0: url: jdbc:mysql://127.0.0.1:3306/test_slave?serverTimezone=UTC&useSSL=false username: root password: admin connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 masterSlaveRule: name: ms_ds masterDataSourceName: master_ds slaveDataSourceNames: - slave_ds_0
-
测试读写分离
USE test_read_write_sperator;
-- 可以看到查询出来的所有数据都是在slave数据中的
SELECT * FROM USER;