1、官网文档源码
1 | 文档 |
2、快速入门
2.1、规则配置
编辑%SHARDING_PROXY_HOME%\conf\config-xxx.yaml
。详情请参见配置手册。
编辑%SHARDING_PROXY_HOME%\conf\server.yaml
。详情请参见配置手册。
2.2、引入依赖
如果后端连接PostgreSQL数据库,不需要引入额外依赖。
如果后端连接MySQL数据库,需要下载MySQL Connector/J, 解压缩后,将mysql-connector-java-5.1.47.jar拷贝到${sharding-proxy}\lib目录。
2.3、启动服务
- 使用默认配置项
1 | ${sharding-proxy}\bin\start.sh |
- 配置端口
1 | ${sharding-proxy}\bin\start.sh ${port} |
3、使用手册
3.1、Proxy启动
- 下载Sharding-Proxy的最新发行版。
- 如果使用docker,可以执行
docker pull shardingsphere/sharding-proxy
获取镜像。详细信息请参考Docker镜像。 - 解压缩后修改conf/server.yaml和以config-前缀开头的文件,如:conf/config-xxx.yaml文件,进行分片规则、读写分离规则配置. 配置方式请参考配置手册。
- Linux操作系统请运行
bin/start.sh
,Windows操作系统请运行bin/start.bat
启动Sharding-Proxy。如需配置启动端口、配置文件位置,可参考快速入门 进行启动。 - 使用任何PostgreSQL的客户端连接。如:
psql -U root -h 127.0.0.1 -p 3307
3.2、注册中心使用
若想使用Sharding-Proxy的数据库治理功能,则需要使用注册中心实现实例熔断和从库禁用功能。详情请参考支持的注册中心。
Zookeeper
- Sharding-Proxy默认提供了Zookeeper的注册中心解决方案。您只需按照配置规则进行注册中心的配置,即可使用。
1 | docker run -d -e TZ="Asia/Shanghai" -p 2181:2181 --name zookeeper --restart always zookeeper |
其他第三方注册中心
- 将Sharding-Proxy的lib目录下的
sharding-orchestration-reg-zookeeper-curator-${sharding-sphere.version}.jar
文件删除。 - 使用SPI方式实现相关逻辑编码,并将生成的jar包放到Sharding-Proxy的lib目录下。
- 按照配置规则进行注册中心的配置,即可使用。
3.3、使用自定义分片算法
当用户需要使用自定义的分片算法类时,无法再通过简单的inline表达式在yaml文件进行配置。可通过以下方式配置使用自定义分片算法。
编码
1 |
|
1 | package com.jzsec.sharding.strategy; |
打包
1 | mvn clean && package |
上传包
1 | /data/downloads/sharding-proxy-4.0.0-RC3/lib |
指定分片算法
1 | shardingRule: |
3.4、分布式事务
Sharding-Proxy接入的分布式事务API同Sharding-JDBC保持一致,支持LOCAL,XA,BASE类型的事务。
XA事务
Sharding-Proxy原生支持XA事务,默认的事务管理器为Atomikos。 可以通过在Sharding-Proxy的conf目录中添加jta.properties
来定制化Atomikos配置项。 具体的配置规则请参考Atomikos的官方文档。
BASE事务
BASE目前没有打包到Sharding-Proxy中,使用时需要将实现了ShardingTransactionManager
SPI的jar拷贝至conf/lib目录,然后切换事务类型为BASE。
3.5、SCTL (Sharding-Proxy control language)
SCTL为Sharding-Proxy特有的控制语句,可以在运行时修改和查询Sharding-Proxy的状态,目前支持的语法为:
语句 | 说明 |
---|---|
sctl:set transaction_type=XX | 修改当前TCP连接的事务类型, 支持LOCAL,XA,BASE。例:sctl:set transaction_type=XA |
sctl:show transaction_type | 查询当前TCP连接的事务类型 |
sctl:show cached_connections | 查询当前TCP连接中缓存的物理数据库连接个数 |
sctl:explain SQL语句 | 查看逻辑SQL的执行计划,例:sctl:explain select * from t_order; |
sctl:hint set MASTER_ONLY=true | 针对当前TCP连接,是否将数据库操作强制路由到主库 |
sctl:hint set DatabaseShardingValue=yy | 针对当前TCP连接,设置hint仅对数据库分片有效,并添加分片值,yy:数据库分片值 |
sctl:hint addDatabaseShardingValue xx=yy | 针对当前TCP连接,为表xx添加分片值yy,xx:逻辑表名称,yy:数据库分片值 |
sctl:hint addTableShardingValue xx=yy | 针对当前TCP连接,为表xx添加分片值yy,xx:逻辑表名称,yy:表分片值 |
sctl:hint clear | 针对当前TCP连接,清除hint所有设置 |
sctl:hint show status | 针对当前TCP连接,查询hint状态,master_only:true/false,sharding_type:databases_only/databases_tables |
sctl:hint show table status | 针对当前TCP连接,查询逻辑表的hint分片值 |
Sharding-Proxy 默认不支持hint,如需支持,请在conf/server.yaml中,将props
的属性proxy.hint.enabled
设置为true。在Sharding-Proxy中,HintShardingAlgorithm的泛型只能是String类型。
3.6、注意事项
- Sharding-Proxy默认使用3307端口,可以通过启动脚本追加参数作为启动端口号。如:
bin/start.sh 3308
- Sharding-Proxy使用conf/server.yaml配置注册中心、认证信息以及公用属性。
- Sharding-Proxy支持多逻辑数据源,每个以config-前缀命名的yaml配置文件,即为一个逻辑数据源。
4、配置手册
数据源与分片配置示例
Sharding-Proxy支持多逻辑数据源,每个以config-前缀命名的yaml配置文件,即为一个逻辑数据源。以下是config-xxx.yaml
的配置配置示例。
数据分片
1 | schemaName: sharding_db |
读写分离
1 | schemaName: master_slave_db |
全局配置示例
Sharding-Proxy使用conf/server.yaml配置注册中心、认证信息以及公用属性。
1 | 省略数据分片和读写分离配置 |
5、排查问题
1 | [root@localhost conf]# top |
1 | [root@localhost conf]# top -Hp 31009 |
1 | [root@localhost conf]# printf '%x' 31165 |
1 | [root@localhost conf]# iftop |