运行部署

背景信息

对于使用单数据库运行的系统来说,如何安全简单地将数据迁移至水平分片的数据库上,一直以来都是一个迫切的需求。

前提条件

  • Proxy 采用纯 JAVA 开发,JDK 建议 1.8 或以上版本。
  • 数据迁移使用集群模式,目前支持 ZooKeeper 作为注册中心。

操作步骤

  1. 获取 ShardingSphere-Proxy。详情请参见 proxy 启动手册

  2. 修改配置文件 conf/server.yaml,详情请参见模式配置

目前 mode 必须是 Cluster,需要提前启动对应的注册中心。

配置示例:

  1. mode:
  2. type: Cluster
  3. repository:
  4. type: ZooKeeper
  5. props:
  6. namespace: governance_ds
  7. server-lists: localhost:2181
  8. retryIntervalMilliseconds: 500
  9. timeToLiveSeconds: 60
  10. maxRetries: 3
  11. operationTimeoutMilliseconds: 500
  1. 引入 JDBC 驱动。

proxy 已包含 PostgreSQL JDBC 驱动。

如果后端连接以下数据库,请下载相应 JDBC 驱动 jar 包,并将其放入 ${shardingsphere-proxy}/ext-lib 目录。

数据库JDBC 驱动参考
MySQLmysql-connector-java-5.1.47.jarConnector/J Versions
openGaussopengauss-jdbc-3.0.0.jar

如果是异构迁移,源端支持范围更广的数据库。JDBC 驱动处理方式同上。

  1. 启动 ShardingSphere-Proxy:
  1. sh bin/start.sh
  1. 查看 proxy 日志 logs/stdout.log,看到日志中出现:
  1. [INFO ] [main] o.a.s.p.frontend.ShardingSphereProxy - ShardingSphere-Proxy start success

确认启动成功。

  1. 按需配置迁移

6.1. 查询配置。

  1. SHOW MIGRATION RULE;

默认配置如下:

  1. +--------------------------------------------------------------+--------------------------------------+------------------------------------------------------+
  2. | read | write | stream_channel |
  3. +--------------------------------------------------------------+--------------------------------------+------------------------------------------------------+
  4. | {"workerThread":40,"batchSize":1000,"shardingSize":10000000} | {"workerThread":40,"batchSize":1000} | {"type":"MEMORY","props":{"block-queue-size":10000}} |
  5. +--------------------------------------------------------------+--------------------------------------+------------------------------------------------------+

6.2. 修改配置(可选)。

因 migration rule 具有默认值,无需创建,仅提供 ALTER 语句。

完整配置 DistSQL 示例:

  1. ALTER MIGRATION RULE (
  2. READ(
  3. WORKER_THREAD=40,
  4. BATCH_SIZE=1000,
  5. SHARDING_SIZE=10000000,
  6. RATE_LIMITER (TYPE(NAME='QPS',PROPERTIES('qps'='500')))
  7. ),
  8. WRITE(
  9. WORKER_THREAD=40,
  10. BATCH_SIZE=1000,
  11. RATE_LIMITER (TYPE(NAME='TPS',PROPERTIES('tps'='2000')))
  12. ),
  13. STREAM_CHANNEL (TYPE(NAME='MEMORY',PROPERTIES('block-queue-size'='10000')))
  14. );

配置项说明:

  1. ALTER MIGRATION RULE (
  2. READ( -- 数据读取配置。如果不配置则部分参数默认生效。
  3. WORKER_THREAD=40, -- 从源端摄取全量数据的线程池大小。如果不配置则使用默认值。
  4. BATCH_SIZE=1000, -- 一次查询操作返回的最大记录数。如果不配置则使用默认值。
  5. SHARDING_SIZE=10000000, -- 全量数据分片大小。如果不配置则使用默认值。
  6. RATE_LIMITER ( -- 限流算法。如果不配置则不限流。
  7. TYPE( -- 算法类型。可选项:QPS
  8. NAME='QPS',
  9. PROPERTIES( -- 算法属性
  10. 'qps'='500'
  11. )))
  12. ),
  13. WRITE( -- 数据写入配置。如果不配置则部分参数默认生效。
  14. WORKER_THREAD=40, -- 数据写入到目标端的线程池大小。如果不配置则使用默认值。
  15. BATCH_SIZE=1000, -- 一次批量写入操作的最大记录数。如果不配置则使用默认值。
  16. RATE_LIMITER ( -- 限流算法。如果不配置则不限流。
  17. TYPE( -- 算法类型。可选项:TPS
  18. NAME='TPS',
  19. PROPERTIES( -- 算法属性
  20. 'tps'='2000'
  21. )))
  22. ),
  23. STREAM_CHANNEL ( -- 数据通道,连接生产者和消费者,用于 read write 环节。如果不配置则默认使用 MEMORY 类型。
  24. TYPE( -- 算法类型。可选项:MEMORY
  25. NAME='MEMORY',
  26. PROPERTIES( -- 算法属性
  27. 'block-queue-size'='10000' -- 属性:阻塞队列大小
  28. )))
  29. );

DistSQL 示例:配置 READ 限流。

  1. ALTER MIGRATION RULE (
  2. READ(
  3. RATE_LIMITER (TYPE(NAME='QPS',PROPERTIES('qps'='500')))
  4. )
  5. );

配置读取数据限流,其它配置使用默认值。

6.3. 恢复配置。

如需恢复默认配置,也通过 ALTER 语句进行操作。

  1. ALTER MIGRATION RULE (
  2. READ(
  3. WORKER_THREAD=40,
  4. BATCH_SIZE=1000,
  5. SHARDING_SIZE=10000000,
  6. RATE_LIMITER (TYPE(NAME='QPS',PROPERTIES('qps'='500')))
  7. ),
  8. WRITE(
  9. WORKER_THREAD=40,
  10. BATCH_SIZE=1000,
  11. RATE_LIMITER (TYPE(NAME='TPS',PROPERTIES('tps'='2000')))
  12. ),
  13. STREAM_CHANNEL (TYPE(NAME='MEMORY',PROPERTIES('block-queue-size'='10000')))
  14. );