简介

Sharding-Scaling是一个提供给用户的通用的ShardingSphere数据接入迁徙,及弹性伸缩的解决方案。

4.1.0开始向用户提供。

部署启动

  1. 执行以下命令,编译生成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

  1. 解压缩公布包,批改配置文件conf/server.yaml,这里次要批改启动端口,保障不与本机其余端口抵触,其余值放弃默认即可:
port: 8888blockQueueSize: 10000pushTimeout: 1000workerThread: 30
  1. 启动sharding-scaling:
sh bin/start.sh
  1. 查看日志logs/stdout.log,确保启动胜利。
  2. 应用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中批改:

名称阐明默认值
portHTTP服务监听端口8888
blockQueueSize数据传输通道队列大小10000
pushTimeout数据推送超时工夫,单位ms1000
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 须要开启binlogbinlog 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

申请体:

ParameterDescribe
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

申请体:

ParameterDescribe
jobIdjob 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我的项目。