简介
Sharding-Scaling 是一个提供给用户的通用的 ShardingSphere 数据接入迁徙,及弹性伸缩的解决方案。
从 4.1.0 开始向用户提供。
部署启动
- 执行以下命令,编译生成 sharding-scaling 二进制包:
git clone https://github.com/apache/shardingsphere.git;cd shardingsphere;
mvn clean install -Prelease;
公布包所在目录为:/sharding-distribution/sharding-scaling-distribution/target/apache-shardingsphere-${latest.release.version}-sharding-scaling-bin.tar.gz
。
- 解压缩公布包,批改配置文件
conf/server.yaml
,这里次要批改启动端口,保障不与本机其余端口抵触,其余值放弃默认即可:
port: 8888
blockQueueSize: 10000
pushTimeout: 1000
workerThread: 30
- 启动 sharding-scaling:
sh bin/start.sh
- 查看日志
logs/stdout.log
,确保启动胜利。 - 应用 curl 命令再次确认失常运行。
curl -X GET http://localhost:8888/shardingscaling/job/list
应许可为:
{"success":true,"errorCode":0,"errorMsg":null,"model":[]}
完结 Sharding-Scaling
sh bin/stop.sh
利用配置项
利用现有配置项如下,相应的配置可在 conf/server.yaml
中批改:
名称 | 阐明 | 默认值 |
---|---|---|
port | HTTP 服务监听端口 | 8888 |
blockQueueSize | 数据传输通道队列大小 | 10000 |
pushTimeout | 数据推送超时工夫,单位 ms | 1000 |
workerThread | 工作线程池大小,容许同时运行的迁徙工作线程数 | 30 |
使用手册
环境要求
纯 JAVA 开发,JDK 倡议 1.8 以上版本。
反对迁徙场景如下:
源端 | 指标端 | 是否反对 |
---|---|---|
MySQL(5.1.15 ~ 5.7.x) | sharding-proxy | 反对 |
PostgreSQL(9.4 ~) | sharding-proxy | 反对 |
留神 :
如果后端连贯 MySQL 数据库,须要下载 MySQL Connector/J,
解压缩后,将 mysql-connector-java-5.1.47.jar 拷贝到 ${sharding-scaling}lib 目录。
权限要求
MySQL 须要开启 binlog
,binlog format
为 Row 模式,且迁徙时所应用用户须要赋予 Replication 相干权限。
+-----------------------------------------+---------------------------------------+
| Variable_name | Value |
+-----------------------------------------+---------------------------------------+
| log_bin | ON |
| binlog_format | ROW |
+-----------------------------------------+---------------------------------------+
+------------------------------------------------------------------------------+
|Grants for ${username}@${host} |
+------------------------------------------------------------------------------+
|GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ${username}@${host} |
|....... |
+------------------------------------------------------------------------------+
PostgreSQL 须要开启 test_decoding
API 接口
弹性迁徙组件提供了简略的 HTTP API 接口
创立迁徙工作
接口形容:POST /shardingscaling/job/start
申请体:
Parameter | Describe |
---|---|
ruleConfiguration.sourceDatasource | 源端 sharding sphere 数据源相干配置 |
ruleConfiguration.sourceRule | 源端 sharding sphere 表规定相干配置 |
ruleConfiguration.destinationDataSources.name | 指标端 sharding proxy 名称 |
ruleConfiguration.destinationDataSources.url | 指标端 sharding proxy jdbc url |
ruleConfiguration.destinationDataSources.username | 指标端 sharding proxy 用户名 |
ruleConfiguration.destinationDataSources.password | 指标端 sharding proxy 明码 |
jobConfiguration.concurrency | 迁徙并发度,举例:如果设置为 3,则待迁徙的表将会有三个线程同时对该表进行迁徙,前提是该表有整数型主键 |
示例:
curl -X POST \
http://localhost:8888/shardingscaling/job/start \
-H 'content-type: application/json' \
-d '{"ruleConfiguration": {"sourceDatasource":"ds_0: !!YamlDataSourceConfiguration\n dataSourceClassName: com.zaxxer.hikari.HikariDataSource\n properties:\n jdbcUrl: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useSSL=false\n username: root\n password: '\''123456'\''\n connectionTimeout: 30000\n idleTimeout: 60000\n maxLifetime: 1800000\n maxPoolSize: 50\n minPoolSize: 1\n maintenanceIntervalMilliseconds: 30000\n readOnly: false\n","sourceRule":"defaultDatabaseStrategy:\n inline:\n algorithmExpression: ds_${user_id % 2}\n shardingColumn: user_id\ntables:\n t1:\n actualDataNodes: ds_0.t1\n keyGenerator:\n column: order_id\n type: SNOWFLAKE\n logicTable: t1\n tableStrategy:\n inline:\n algorithmExpression: t1\n shardingColumn: order_id\n t2:\n actualDataNodes: ds_0.t2\n keyGenerator:\n column: order_item_id\n type: SNOWFLAKE\n logicTable: t2\n tableStrategy:\n inline:\n algorithmExpression: t2\n shardingColumn: order_id\n","destinationDataSources": {"name":"dt_0","password":"123456","url":"jdbc:mysql://127.0.0.1:3306/test2?serverTimezone=UTC&useSSL=false","username":"root"}
},
"jobConfiguration": {"concurrency": 3}
}'
返回信息:
{
"success": true,
"errorCode": 0,
"errorMsg": null,
"model": null
}
查问迁徙工作进度
接口形容:GET /shardingscaling/job/progress/{jobId}
示例:
curl -X GET \
http://localhost:8888/shardingscaling/job/progress/1
返回信息:
{
"success": true,
"errorCode": 0,
"errorMsg": null,
"model": {
"id": 1,
"jobName": "Local Sharding Scaling Job",
"status": "RUNNING/STOPPED"
"syncTaskProgress": [{
"id": "127.0.0.1-3306-test",
"status": "PREPARING/MIGRATE_HISTORY_DATA/SYNCHRONIZE_REALTIME_DATA/STOPPING/STOPPED",
"historySyncTaskProgress": [{
"id": "history-test-t1#0",
"estimatedRows": 41147,
"syncedRows": 41147
}, {
"id": "history-test-t1#1",
"estimatedRows": 42917,
"syncedRows": 42917
}, {
"id": "history-test-t1#2",
"estimatedRows": 43543,
"syncedRows": 43543
}, {
"id": "history-test-t2#0",
"estimatedRows": 39679,
"syncedRows": 39679
}, {
"id": "history-test-t2#1",
"estimatedRows": 41483,
"syncedRows": 41483
}, {
"id": "history-test-t2#2",
"estimatedRows": 42107,
"syncedRows": 42107
}],
"realTimeSyncTaskProgress": {
"id": "realtime-test",
"delayMillisecond": 1576563771372,
"logPosition": {
"filename": "ON.000007",
"position": 177532875,
"serverId": 0
}
}
}]
}
}
查问所有迁徙工作
接口形容:GET /shardingscaling/job/list
示例:
curl -X GET \
http://localhost:8888/shardingscaling/job/list
返回信息:
{
"success": true,
"errorCode": 0,
"model": [
{
"jobId": 1,
"jobName": "Local Sharding Scaling Job",
"status": "RUNNING"
}
]
}
进行迁徙工作
接口形容:POST /shardingscaling/job/stop
申请体:
Parameter | Describe |
---|---|
jobId | job id |
示例:
curl -X POST \
http://localhost:8888/shardingscaling/job/stop \
-H 'content-type: application/json' \
-d '{"jobId":1}'
返回信息:
{
"success": true,
"errorCode": 0,
"errorMsg": null,
"model": null
}
通过 UI 界面来操作
Sharding-scaling 与 sharding-ui 集成了用户界面,所以上述所有工作相干的操作都能够通过 UI 界面点点鼠标来实现,当然实质上还是调用了上述根本接口。
更多信息请参考 sharding-ui 我的项目。