我司当前的一个数据库,分了51个数据库及表,使用 Sharding-JDBC 去独立连接。(Sharding-JDBC是Sharding-Sphere的第一个产品,也是Sharding-Sphere的前身。 它定位为轻量级Java框架,在Java的JDBC层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。) 问题是,我们的51个分库都在同一个实例上,MySQL 实例的连接成了瓶颈。 仅仅这 51 个数据库,7个应用去连接,若每个连接设置 10 个连接池,总共就使用了 3570( 51*7*10)个MySQL连接。还有公司人员,因为数据库太分散不好统计数据,又单独配置 mycat 给内部人员使用,占用一部分连接池。由于 MySQL 使用阿里云RDS,不能调整连接,只能加钱升级配置。
Sharding-JDBC 架构:
在使用 mycat 也遇到许多问题,所以再部署 Sharding-Proxy 探索对比看看。Sharding-Proxy是Sharding-Sphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端
Sharding-Proxy 架构:
Sharding-Proxy 最新发行版地址 :
https://github.com/sharding-sphere/sharding-sphere-doc/raw/master/dist/sharding-proxy-3.0.0.tar.gz
文件解压可使用,Sharding-Proxy 很简洁,只有4个文件夹(bin、conf、lib、logs)。
以下只是一个被剪辑过的示例,仅供参考。
配置分表规则:
vim /opt/sharding-proxy-3.0.0/conf/config-sharding.yaml
######################################################################################################
#
# Here you can configure the rules for the proxy.
# This example is configuration of sharding rule.
#
# If you want to use sharding, please refer to this file;
# if you want to use master-slave, please refer to the config-master_slave.yaml.
#
######################################################################################################
# 逻辑数据库名称(自定义)
schemaName: testdb
# 各个节点的名称及数据库连接地址
dataSources:
ds_Default:
url: jdbc:mysql://10.10.10.10:3306/testdb?characterEncoding=utf8&useSSL=true
username: root
password: mysql
autoCommit: true
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
maximumPoolSize: 5
ds_0:
url: jdbc:mysql://10.10.10.10:3306/testdb_d0?characterEncoding=utf8&useSSL=true
username: root
password: mysql
autoCommit: true
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
maximumPoolSize: 5
ds_1:
url: jdbc:mysql://10.10.10.10:3306/testdb_d1?characterEncoding=utf8&useSSL=true
username: root
password: mysql
autoCommit: true
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
maximumPoolSize: 5
ds_2:
url: jdbc:mysql://10.10.10.10:3306/testdb_d2?characterEncoding=utf8&useSSL=true
username: root
password: mysql
autoCommit: true
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
maximumPoolSize: 5
# 分表规则
shardingRule:
tables:
table_a: #逻辑表名(与原表保持一致吧)
actualDataNodes: ds_${0..2}.table_a #各个节点实际的表名。ds_${0..2} 表示:ds_0,ds_1,ds_2
#这里还可以设置分表规则,现在统一在下面的 defaultDatabaseStrategy 设置
table_b:
actualDataNodes: ds_${0..2}.table_b
table_c:
actualDataNodes: ds_Default.table_c # 不分库的表,配置到该节点 ds_Default
table_d:
actualDataNodes: ds_Default.table_d
#绑定表规则列表
bindingTables:
- table_a,table_b,table_c,table_d
#默认数据库分片策略,同分库策略。根据表字段 user_id 哈希路由到三个节点:ds_0,ds_1,ds_2
defaultDatabaseStrategy:
inline:
shardingColumn: user_id
algorithmExpression: ds_${user_id % 3}
#默认表分片策略,同分库策略
defaultTableStrategy:
none:
#默认自增列值生成器类名称
defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator
服务器级别配置:
vim /opt/sharding-proxy-3.0.0/conf/server.yaml
######################################################################################################
#
# If you want to configure orchestration, authorization and proxy properties, please refer to this file.
#
######################################################################################################
#dataSources: #省略数据源配置
#shardingRule: #省略分片规则配置
#masterSlaveRule: #省略读写分离规则配置
#orchestration:
# name: orchestration_ds # 数据治理实例名称
# overwrite: true # 本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
# registry: #注册中心配置
# serverLists: localhost:2181 #连接注册中心服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
# namespace: orchestration #注册中心的命名空间
# digest: #连接注册中心的权限令牌。缺省为不需要权限验证
# operationTimeoutMilliseconds: #操作超时的毫秒数,默认500毫秒
# maxRetries: #连接失败后的最大重试次数,默认3次
# retryIntervalMilliseconds: #重试间隔毫秒数,默认500毫秒
# timeToLiveSeconds: #临时节点存活秒数,默认60秒
# 设置 sharding-proxy 的登录账号密码
authentication:
username: admin
password: adminpwd
props:
# max.connections.size.per.query: 1
acceptor.size: 8 # 用于设置接收客户端请求的工作线程个数,默认为CPU核数*2
executor.size: 4 # 工作线程数量,默认值: CPU核数
proxy.transaction.enabled: false # 是否开启事务, 目前仅支持XA事务,默认为不开启
proxy.opentracing.enabled: false # 是否开启链路追踪功能,默认为不开启
sql.show: true # 是否开启SQL显示,默认值: false
启动:
cd /opt/sharding-proxy-3.0.0/bin
./start.sh
#默认端口 3307 ,可自定义端口使用
./start.sh 3308
日志查看,
tail -f /opt/sharding-proxy-3.0.0/logs/stdout.log
标签:分库,sharding,Proxy,Sharding,table,true,ds,proxy From: https://blog.51cto.com/hzc2012/6000777