YAML 配置

5.0.0-alpha

数据分片

配置项说明

  1. dataSources: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !SHARDING
  4. tables: # 数据分片规则配置
  5. <logic-table-name> (+): # 逻辑表名称
  6. actualDataNodes (?): # 由数据源名 + 表名组成(参考Inline语法规则)
  7. databaseStrategy (?): # 分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一
  8. standard: # 用于单分片键的标准分片场景
  9. shardingColumn: # 分片列名称
  10. shardingAlgorithmName: # 分片算法名称
  11. complex: # 用于多分片键的复合分片场景
  12. shardingColumns: #分片列名称,多个列以逗号分隔
  13. shardingAlgorithmName: # 分片算法名称
  14. hint: # Hint 分片策略
  15. shardingAlgorithmName: # 分片算法名称
  16. none: # 不分片
  17. tableStrategy: # 分表策略,同分库策略
  18. keyGenerateStrategy: # 分布式序列策略
  19. column: # 自增列名称,缺省表示不使用自增主键生成器
  20. keyGeneratorName: # 分布式序列算法名称
  21. autoTables: # 自动分片表规则配置
  22. t_order_auto: # 逻辑表名称
  23. actualDataSources (?): # 数据源名称
  24. shardingStrategy: # 切分策略
  25. standard: # 用于单分片键的标准分片场景
  26. shardingColumn: # 分片列名称
  27. shardingAlgorithmName: # 自动分片算法名称
  28. bindingTables (+): # 绑定表规则列表
  29. - <logic_table_name_1, logic_table_name_2, ...>
  30. - <logic_table_name_1, logic_table_name_2, ...>
  31. broadcastTables (+): # 广播表规则列表
  32. - <table-name>
  33. - <table-name>
  34. defaultDatabaseStrategy: # 默认数据库分片策略
  35. defaultTableStrategy: # 默认表分片策略
  36. defaultKeyGenerateStrategy: # 默认的分布式序列策略
  37. # 分片算法配置
  38. shardingAlgorithms:
  39. <sharding-algorithm-name> (+): # 分片算法名称
  40. type: # 分片算法类型
  41. props: # 分片算法属性配置
  42. # ...
  43. # 分布式序列算法配置
  44. keyGenerators:
  45. <key-generate-algorithm-name> (+): # 分布式序列算法名称
  46. type: # 分布式序列算法类型
  47. props: # 分布式序列算法属性配置
  48. # ...
  49. props:
  50. # ...

读写分离

配置项说明

  1. dataSources: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !REPLICA_QUERY
  4. dataSources:
  5. <data-source-name> (+): # 读写分离逻辑数据源名称
  6. primaryDataSourceName: # 主库数据源名称
  7. replicaDataSourceNames:
  8. - <replica-data_source-name> (+) # 从库数据源名称
  9. loadBalancerName: # 负载均衡算法名称
  10. # 负载均衡算法配置
  11. loadBalancers:
  12. <load-balancer-name> (+): # 负载均衡算法名称
  13. type: # 负载均衡算法类型
  14. props: # 负载均衡算法属性配置
  15. # ...
  16. props:
  17. # ...

算法类型的详情,请参见内置负载均衡算法列表

数据加密

配置项说明

  1. dataSource: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !ENCRYPT
  4. tables:
  5. <table-name> (+): # 加密表名称
  6. columns:
  7. <column-name> (+): # 加密列名称
  8. cipherColumn: # 密文列名称
  9. assistedQueryColumn (?): # 查询辅助列名称
  10. plainColumn (?): # 原文列名称
  11. encryptorName: # 加密算法名称
  12. # 加密算法配置
  13. encryptors:
  14. <encrypt-algorithm-name> (+): # 加解密算法名称
  15. type: # 加解密算法类型
  16. props: # 加解密算法属性配置
  17. # ...
  18. queryWithCipherColumn: # 是否使用加密列进行查询。在有原文列的情况下,可以使用原文列进行查询

算法类型的详情,请参见内置加密算法列表

影子库

配置项说明

  1. dataSources: # 省略数据源配置,请参考使用手册
  2. rules:
  3. - !SHADOW
  4. column: # 影子字段名
  5. sourceDataSourceNames: # 影子前数据库名
  6. # ...
  7. shadowDataSourceNames: # 对应的影子库名
  8. # ...
  9. props:
  10. # ...

分布式治理

配置项说明

  1. governance:
  2. name: # 治理名称
  3. registryCenter: # 注册中心
  4. type: # 治理持久化类型。如:Zookeeper, etcd
  5. serverLists: # 治理服务列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
  6. overwrite: # 本地配置是否覆盖配置中心配置。如果可覆盖,每次启动都以本地配置为准

ShardingSphere-4.x

数据分片

配置项说明

  1. dataSources: # 数据源配置,可配置多个 data_source_name
  2. <data_source_name>: # <!!数据库连接池实现类> `!!`表示实例化该类
  3. driverClassName: # 数据库驱动类名
  4. url: # 数据库 url 连接
  5. username: # 数据库用户名
  6. password: # 数据库密码
  7. # ... 数据库连接池的其它属性
  8. shardingRule:
  9. tables: # 数据分片规则配置,可配置多个 logic_table_name
  10. <logic_table_name>: # 逻辑表名称
  11. actualDataNodes: # 由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持 inline 表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点,用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况
  12. databaseStrategy: # 分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一
  13. standard: # 用于单分片键的标准分片场景
  14. shardingColumn: # 分片列名称
  15. preciseAlgorithmClassName: # 精确分片算法类名称,用于 = 和 IN。。该类需实现 PreciseShardingAlgorithm 接口并提供无参数的构造器
  16. rangeAlgorithmClassName: # 范围分片算法类名称,用于 BETWEEN,可选。。该类需实现 RangeShardingAlgorithm 接口并提供无参数的构造器
  17. complex: # 用于多分片键的复合分片场景
  18. shardingColumns: # 分片列名称,多个列以逗号分隔
  19. algorithmClassName: # 复合分片算法类名称。该类需实现 ComplexKeysShardingAlgorithm 接口并提供无参数的构造器
  20. inline: # 行表达式分片策略
  21. shardingColumn: # 分片列名称
  22. algorithmInlineExpression: # 分片算法行表达式,需符合 groovy 语法
  23. hint: # Hint 分片策略
  24. algorithmClassName: # Hint 分片算法类名称。该类需实现 HintShardingAlgorithm 接口并提供无参数的构造器
  25. none: # 不分片
  26. tableStrategy: # 分表策略,同分库策略
  27. keyGenerator:
  28. column: # 自增列名称,缺省表示不使用自增主键生成器
  29. type: # 自增列值生成器类型,缺省表示使用默认自增列值生成器。可使用用户自定义的列值生成器或选择内置类型:SNOWFLAKE/UUID
  30. props: # 属性配置, 注意:使用 SNOWFLAKE 算法,需要配置 worker.id 与 max.tolerate.time.difference.milliseconds 属性。若使用此算法生成值作分片值,建议配置 max.vibration.offset 属性
  31. <property-name>: # 属性名称
  32. bindingTables: # 绑定表规则列表
  33. - <logic_table_name1, logic_table_name2, ...>
  34. - <logic_table_name3, logic_table_name4, ...>
  35. - <logic_table_name_x, logic_table_name_y, ...>
  36. broadcastTables: # 广播表规则列表
  37. - table_name1
  38. - table_name2
  39. - table_name_x
  40. defaultDataSourceName: # 未配置分片规则的表将通过默认数据源定位
  41. defaultDatabaseStrategy: # 默认数据库分片策略,同分库策略
  42. defaultTableStrategy: # 默认表分片策略,同分库策略
  43. defaultKeyGenerator: # 默认的主键生成算法 如果没有设置,默认为 SNOWFLAKE 算法
  44. type: # 默认自增列值生成器类型,缺省将使用 org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator。可使用用户自定义的列值生成器或选择内置类型:SNOWFLAKE/UUID
  45. props:
  46. <property-name>: # 自增列值生成器属性配置, 比如 SNOWFLAKE 算法的 worker.id 与 max.tolerate.time.difference.milliseconds
  47. masterSlaveRules: # 读写分离规则,详见读写分离部分
  48. <data_source_name>: # 数据源名称,需要与真实数据源匹配,可配置多个 data_source_name
  49. masterDataSourceName: # 详见读写分离部分
  50. slaveDataSourceNames: # 详见读写分离部分
  51. loadBalanceAlgorithmType: # 详见读写分离部分
  52. props: # 读写分离负载算法的属性配置
  53. <property-name>: # 属性值
  54. props: # 属性配置
  55. sql.show: # 是否开启 SQL 显示,默认值: false
  56. executor.size: # 工作线程数量,默认值: CPU 核数
  57. max.connections.size.per.query: # 每个查询可以打开的最大连接数量,默认为 1
  58. check.table.metadata.enabled: # 是否在启动时检查分表元数据一致性,默认值: false

读写分离

配置项说明

  1. dataSources: # 省略数据源配置,与数据分片一致
  2. masterSlaveRule:
  3. name: # 读写分离数据源名称
  4. masterDataSourceName: # 主库数据源名称
  5. slaveDataSourceNames: # 从库数据源名称列表
  6. - <data_source_name1>
  7. - <data_source_name2>
  8. - <data_source_name_x>
  9. loadBalanceAlgorithmType: # 从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若 `loadBalanceAlgorithmClassName` 存在则忽略该配置
  10. props: # 读写分离负载算法的属性配置
  11. <property-name>: # 属性值

通过 YamlMasterSlaveDataSourceFactory 工厂类创建 DataSource

  1. DataSource dataSource = YamlMasterSlaveDataSourceFactory.createDataSource(yamlFile);

数据脱敏

配置项说明

  1. dataSource: # 省略数据源配置
  2. encryptRule:
  3. encryptors:
  4. <encryptor-name>:
  5. type: # 加解密器类型,可自定义或选择内置类型:MD5/AES
  6. props: # 属性配置, 注意:使用 AES 加密器,需要配置 AES 加密器的 KEY 属性:aes.key.value
  7. aes.key.value:
  8. tables:
  9. <table-name>:
  10. columns:
  11. <logic-column-name>:
  12. plainColumn: # 存储明文的字段
  13. cipherColumn: # 存储密文的字段
  14. assistedQueryColumn: # 辅助查询字段,针对 ShardingQueryAssistedEncryptor 类型的加解密器进行辅助查询
  15. encryptor: # 加密器名字

治理

配置项说明

  1. dataSources: # 省略数据源配置
  2. shardingRule: # 省略分片规则配置
  3. masterSlaveRule: # 省略读写分离规则配置
  4. encryptRule: # 省略数据脱敏规则配置
  5. orchestration:
  6. name: # 治理实例名称
  7. overwrite: # 本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  8. registry: # 注册中心配置
  9. type: # 配置中心类型。如:zookeeper
  10. serverLists: # 连接注册中心服务器的列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
  11. namespace: # 注册中心的命名空间
  12. digest: # 连接注册中心的权限令牌。缺省为不需要权限验证
  13. operationTimeoutMilliseconds: # 操作超时的毫秒数,默认 500 毫秒
  14. maxRetries: # 连接失败后的最大重试次数,默认 3 次
  15. retryIntervalMilliseconds: # 重试间隔毫秒数,默认 500 毫秒
  16. timeToLiveSeconds: # 临时节点存活秒数,默认 60 秒

ShardingSphere-3.x

数据分片

配置项说明

  1. # 以下配置截止版本为3.1
  2. # 配置文件中,必须配置的项目为 schemaName,dataSources,并且 shardingRule,masterSlaveRule,配置其中一个(注意,除非 server.yaml 中定义了 Orchestration,否则必须至少有一个 config-xxxx 配置文件),除此之外的其他项目为可选项
  3. schemaName: test # schema 名称,每个文件都是单独的 schema,多个 schema 则是多个 yaml 文件,yaml 文件命名要求是 config-xxxx.yaml 格式,虽然没有强制要求,但推荐名称中的 xxxx 与配置的 schemaName 保持一致,方便维护
  4. dataSources: # 配置数据源列表,必须是有效的 jdbc 配置,目前仅支持 MySQL 与 PostgreSQL,另外通过一些未公开(代码中可查,但可能会在未来有变化)的变量,可以配置来兼容其他支持 JDBC 的数据库,但由于没有足够的测试支持,可能会有严重的兼容性问题,配置时候要求至少有一个
  5. master_ds_0: # 数据源名称,可以是合法的字符串,目前的校验规则中,没有强制性要求,只要是合法的 yaml 字符串即可,但如果要用于分库分表配置,则需要有有意义的标志(在分库分表配置中详述),以下为目前公开的合法配置项目,不包含内部配置参数
  6. # 以下参数为必备参数
  7. url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_1?serverTimezone=UTC&useSSL=false # 这里的要求合法的 jdbc 连接串即可,目前尚未兼容 MySQL 8.x,需要在 maven 编译时候,升级 MySQL JDBC 版本到 5.1.46 或者 47 版本(不建议升级到 JDBC 的 8.x 系列版本,需要修改源代码,并且无法通过很多测试 case)
  8. username: root # MySQL 用户名
  9. password: password # MySQL 用户的明文密码
  10. # 以下参数为可选参数,给出示例为默认配置,主要用于连接池控制
  11. connectionTimeoutMilliseconds: 30000 # 连接超时控制
  12. idleTimeoutMilliseconds: 60000 # 连接空闲时间设置
  13. maxLifetimeMilliseconds: 0 # 连接的最大持有时间,0 为无限制
  14. maxPoolSize: 50 # 连接池中最大维持的连接数量
  15. minPoolSize: 1 # 连接池的最小连接数量
  16. maintenanceIntervalMilliseconds: 30000 # 连接维护的时间间隔 atomikos 框架需求
  17. # 以下配置的假设是,3307 是 3306 的从库,3309,3310 是 3308 的从库
  18. slave_ds_0:
  19. url: jdbc:mysql://127.0.0.1:3307/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
  20. username: root
  21. password: password
  22. master_ds_1:
  23. url: jdbc:mysql://127.0.0.1:3308/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
  24. username: root
  25. password: password
  26. slave_ds_1:
  27. url: jdbc:mysql://127.0.0.1:3309/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
  28. username: root
  29. password: password
  30. slave_ds_1_slave2:
  31. url: jdbc:mysql://127.0.0.1:3310/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
  32. username: root
  33. password: password
  34. masterSlaveRule: # 这里配置这个规则的话,相当于是全局读写分离配置
  35. name: ds_rw # 名称,合法的字符串即可,但如果涉及到在读写分离的基础上设置分库分表,则名称需要有意义才可以,另外,虽然目前没有强制要求,但主从库配置需要配置在实际关联的主从库上,如果配置的数据源之间主从是断开的状态,那么可能会发生写入的数据对于只读会话无法读取到的问题
  36. # 如果一个会话发生了写入并且没有提交(显式打开事务),sharding sphere 在后续的路由中,select 都会在主库执行,直到会话提交
  37. masterDataSourceName: master_ds_0 # 主库的 DataSource 名称
  38. slaveDataSourceNames: # 从库的 DataSource 列表,至少需要有一个
  39. - slave_ds_0
  40. loadBalanceAlgorithmClassName: io.shardingsphere.api.algorithm.masterslave # MasterSlaveLoadBalanceAlgorithm 接口的实现类,允许自定义实现 默认提供两个,配置路径为 io.shardingsphere.api.algorithm.masterslave 下的 RandomMasterSlaveLoadBalanceAlgorithm(随机 Random)与 RoundRobinMasterSlaveLoadBalanceAlgorithm(轮询:次数 % 从库数量)
  41. loadBalanceAlgorithmType: # 从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若 loadBalanceAlgorithmClassName 存在则忽略该配置,默认为 ROUND_ROBIN
  42. shardingRule: # sharding 的配置
  43. # 配置主要分两类,一类是对整个sharding规则所有表生效的默认配置,一个是 sharing 具体某张表时候的配置
  44. # 首先说默认配置
  45. masterSlaveRules: # 在 shardingRule 中也可以配置 shardingRule,对分片生效,具体内容与全局 masterSlaveRule 一致,但语法为:
  46. master_test_0:
  47. masterDataSourceName: master_ds_0
  48. slaveDataSourceNames:
  49. - slave_ds_0
  50. master_test_1:
  51. masterDataSourceName: master_ds_1
  52. slaveDataSourceNames:
  53. - slave_ds_1
  54. - slave_ds_1_slave2
  55. defaultDataSourceName: master_test_0 # 这里的数据源允许是 dataSources 的配置项目或者 masterSlaveRules 配置的名称,配置为 masterSlaveRule 的话相当于就是配置读写分离了
  56. broadcastTables: # 广播表 这里配置的表列表,对于发生的所有数据变更,都会不经 sharding 处理,而是直接发送到所有数据节点,注意此处为列表,每个项目为一个表名称
  57. - broad_1
  58. - broad_2
  59. bindingTables: # 绑定表,也就是实际上哪些配置的 sharding 表规则需要实际生效的列表,配置为 yaml 列表,并且允许单个条目中以逗号切割,所配置表必须已经配置为逻辑表
  60. - sharding_t1
  61. - sharding_t2,sharding_t3
  62. defaultDatabaseShardingStrategy: # 默认库级别 sharding 规则,对应代码中 ShardingStrategy 接口的实现类,目前支持 none,inline,hint,complex,standard 五种配置 注意此处默认配置仅可以配置五个中的一个
  63. # 规则配置同样适合表 sharding 配置,同样是在这些算法中选择
  64. none: # 不配置任何规则,SQL 会被发给所有节点去执行,这个规则没有子项目可以配置
  65. inline: # 行表达式分片
  66. shardingColumn: test_id # 分片列名称
  67. algorithmExpression: master_test_${test_id % 2} # 分片表达式,根据指定的表达式计算得到需要路由到的数据源名称 需要是合法的 groovy 表达式,示例配置中,取余为 0 则语句路由到 master_test_0,取余为 1 则路由到 master_test_1
  68. hint: # 基于标记的 sharding 分片
  69. shardingAlgorithm: # 需要是 HintShardingAlgorithm 接口的实现,目前代码中,仅有为测试目的实现的 OrderDatabaseHintShardingAlgorithm,没有生产环境可用的实现
  70. complex: # 支持多列的 sharding,目前无生产可用实现
  71. shardingColumns: # 逗号切割的列
  72. shardingAlgorithm: # ComplexKeysShardingAlgorithm 接口的实现类
  73. standard: # 单列 sharding 算法,需要配合对应的 preciseShardingAlgorithm,rangeShardingAlgorithm 接口的实现使用,目前无生产可用实现
  74. shardingColumn: # 列名,允许单列
  75. preciseShardingAlgorithm: # preciseShardingAlgorithm 接口的实现类
  76. rangeShardingAlgorithm: # rangeShardingAlgorithm 接口的实现类
  77. defaultTableStrategy: # 配置参考 defaultDatabaseShardingStrategy,区别在于,inline 算法的配置中,algorithmExpression 的配置算法结果需要是实际的物理表名称,而非数据源名称
  78. defaultKeyGenerator: # 默认的主键生成算法 如果没有设置,默认为 SNOWFLAKE 算法
  79. column: # 自增键对应的列名称
  80. type: # 自增键的类型,主要用于调用内置的主键生成算法有三个可用值:SNOWFLAKE(时间戳 +worker id+ 自增 id),UUID(java.util.UUID 类生成的随机 UUID),LEAF,其中 Snowflake 算法与 UUID 算法已经实现,LEAF 目前(2018-01-14)尚未实现
  81. className: # 非内置的其他实现了 KeyGenerator 接口的类,需要注意,如果设置这个,就不能设置 type,否则 type 的设置会覆盖 class 的设置
  82. props:
  83. # 定制算法需要设置的参数,比如 SNOWFLAKE 算法的 worker.id 与 max.tolerate.time.difference.milliseconds
  84. tables: # 配置表 sharding 的主要位置
  85. sharding_t1:
  86. actualDataNodes: master_test_${0..1}.t_order${0..1} # sharding 表对应的数据源以及物理名称,需要用表达式处理,表示表实际上在哪些数据源存在,配置示例中,意思是总共存在 4 个分片 master_test_0.t_order0,master_test_0.t_order1,master_test_1.t_order0,master_test_1.t_order1
  87. # 需要注意的是,必须保证设置 databaseStrategy 可以路由到唯一的 dataSource,tableStrategy 可以路由到 dataSource 中唯一的物理表上,否则可能导致错误:一个 insert 语句被插入到多个实际物理表中
  88. databaseStrategy: # 局部设置会覆盖全局设置,参考 defaultDatabaseShardingStrategy
  89. tableStrategy: # 局部设置会覆盖全局设置,参考 defaultTableStrategy
  90. keyGenerator: # 局部设置会覆盖全局设置,参考 defaultKeyGenerator
  91. logicIndex: # 逻辑索引名称 由于 Oracle,PG 这种数据库中,索引与表共用命名空间,如果接受到 drop index 语句,执行之前,会通过这个名称配置的确定对应的实际物理表名称
  92. props:
  93. sql.show: # 是否开启 SQL 显示,默认值: false
  94. acceptor.size: # accept 连接的线程数量,默认为 cpu 核数 2 倍
  95. executor.size: # 工作线程数量最大,默认值: 无限制
  96. max.connections.size.per.query: # 每个查询可以打开的最大连接数量,默认为 1
  97. proxy.frontend.flush.threshold: # proxy 的服务时候,对于单个大查询,每多少个网络包返回一次
  98. check.table.metadata.enabled: # 是否在启动时检查分表元数据一致性,默认值: false
  99. proxy.transaction.type: # 默认 LOCAL,proxy 的事务模型 允许 LOCAL,XA,BASE 三个值 LOCAL 无分布式事务,XA 则是采用 atomikos 实现的分布式事务 BASE 目前尚未实现
  100. proxy.opentracing.enabled: # 是否启用 opentracing
  101. proxy.backend.use.nio: # 是否采用 netty 的 NIO 机制连接后端数据库,默认 False ,使用 epoll 机制
  102. proxy.backend.max.connections: # 使用 NIO 而非 epoll 的话,proxy 后台连接每个 netty 客户端允许的最大连接数量(注意不是数据库连接限制) 默认为 8
  103. proxy.backend.connection.timeout.seconds: # 使用 nio 而非 epoll 的话,proxy 后台连接的超时时间,默认 60s
  104. check.table.metadata.enabled: # 是否在启动时候,检查 sharing 的表的实际元数据是否一致,默认 False
  105. configMap: # 用户自定义配置
  106. key1: value1
  107. key2: value2
  108. keyx: valuex

读写分离

配置项说明

  1. dataSources: # 省略数据源配置,与数据分片一致
  2. masterSlaveRule:
  3. name: # 读写分离数据源名称
  4. masterDataSourceName: # 主库数据源名称
  5. slaveDataSourceNames: # 从库数据源名称列表
  6. - <data_source_name1>
  7. - <data_source_name2>
  8. - <data_source_name_x>
  9. loadBalanceAlgorithmClassName: # 从库负载均衡算法类名称。该类需实现 MasterSlaveLoadBalanceAlgorithm 接口且提供无参数构造器
  10. loadBalanceAlgorithmType: # 从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若 `loadBalanceAlgorithmClassName` 存在则忽略该配置
  11. props: # 属性配置
  12. sql.show: # 是否开启 SQL 显示,默认值: false
  13. executor.size: # 工作线程数量,默认值: CPU 核数
  14. check.table.metadata.enabled: # 是否在启动时检查分表元数据一致性,默认值: false
  15. configMap: # 用户自定义配置
  16. key1: value1
  17. key2: value2
  18. keyx: valuex

通过 MasterSlaveDataSourceFactory 工厂类创建 DataSource

  1. DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);

治理

配置项说明

  1. dataSources: # 省略数据源配置
  2. shardingRule: # 省略分片规则配置
  3. masterSlaveRule: # 省略读写分离规则配置
  4. orchestration:
  5. name: # 数据治理实例名称
  6. overwrite: # 本地配置是否覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  7. registry: # 注册中心配置
  8. serverLists: # 连接注册中心服务器的列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
  9. namespace: # 注册中心的命名空间
  10. digest: # 连接注册中心的权限令牌。缺省为不需要权限验证
  11. operationTimeoutMilliseconds: # 操作超时的毫秒数,默认 500 毫秒
  12. maxRetries: # 连接失败后的最大重试次数,默认 3 次
  13. retryIntervalMilliseconds: # 重试间隔毫秒数,默认 500 毫秒
  14. timeToLiveSeconds: # 临时节点存活秒数,默认 60 秒

ShardingSphere-2.x

数据分片

配置项说明

  1. dataSources:
  2. db0: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: org.h2.Driver
  4. url: jdbc:h2:mem:db0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  5. username: sa
  6. password:
  7. maxActive: 100
  8. db1: !!org.apache.commons.dbcp.BasicDataSource
  9. driverClassName: org.h2.Driver
  10. url: jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  11. username: sa
  12. password:
  13. maxActive: 100
  14. shardingRule:
  15. tables:
  16. config:
  17. actualDataNodes: db${0..1}.t_config
  18. t_order:
  19. actualDataNodes: db${0..1}.t_order_${0..1}
  20. databaseStrategy:
  21. standard:
  22. shardingColumn: user_id
  23. preciseAlgorithmClassName: io.shardingjdbc.core.yaml.fixture.SingleAlgorithm
  24. tableStrategy:
  25. inline:
  26. shardingColumn: order_id
  27. algorithmInlineExpression: t_order_${order_id % 2}
  28. keyGeneratorColumnName: order_id
  29. keyGeneratorClass: io.shardingjdbc.core.yaml.fixture.IncrementKeyGenerator
  30. t_order_item:
  31. actualDataNodes: db${0..1}.t_order_item_${0..1}
  32. # 绑定表中其余的表的策略与第一张表的策略相同
  33. databaseStrategy:
  34. standard:
  35. shardingColumn: user_id
  36. preciseAlgorithmClassName: io.shardingjdbc.core.yaml.fixture.SingleAlgorithm
  37. tableStrategy:
  38. inline:
  39. shardingColumn: order_id
  40. algorithmInlineExpression: t_order_item_${order_id % 2}
  41. bindingTables:
  42. - t_order,t_order_item
  43. # 默认数据库分片策略
  44. defaultDatabaseStrategy:
  45. none:
  46. defaultTableStrategy:
  47. complex:
  48. shardingColumns: id, order_id
  49. algorithmClassName: io.shardingjdbc.core.yaml.fixture.MultiAlgorithm
  50. props:
  51. sql.show: true

读写分离

概念

为了缓解数据库压力,将写入和读取操作分离为不同数据源,写库称为主库,读库称为从库,一主库可配置多从库。

支持项

  1. 提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。
  2. 独立使用读写分离支持 SQL 透传。
  3. 同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。
  4. Spring 命名空间。
  5. 基于 Hin t的强制主库路由。

不支持范围

  1. 主库和从库的数据同步。
  2. 主库和从库的数据同步延迟导致的数据不一致。
  3. 主库双写或多写。

配置规则

  1. dataSources:
  2. db_master: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: org.h2.Driver
  4. url: jdbc:h2:mem:db_master;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  5. username: sa
  6. password:
  7. maxActive: 100
  8. db_slave_0: !!org.apache.commons.dbcp.BasicDataSource
  9. driverClassName: org.h2.Driver
  10. url: jdbc:h2:mem:db_slave_0;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  11. username: sa
  12. password:
  13. maxActive: 100
  14. db_slave_1: !!org.apache.commons.dbcp.BasicDataSource
  15. driverClassName: org.h2.Driver
  16. url: jdbc:h2:mem:db_slave_1;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
  17. username: sa
  18. password:
  19. maxActive: 100
  20. masterSlaveRule:
  21. name: db_ms
  22. masterDataSourceName: db_master
  23. slaveDataSourceNames: [db_slave_0, db_slave_1]
  24. configMap:
  25. key1: value1

通过 MasterSlaveDataSourceFactory 工厂类创建 DataSource

  1. DataSource dataSource = MasterSlaveDataSourceFactory.createDataSource(yamlFile);

治理

配置项说明

Zookeeper 分库分表编排配置项说明

  1. dataSources: # 数据源配置
  2. shardingRule: # 分片规则配置
  3. orchestration: # Zookeeper 编排配置
  4. name: # 编排服务节点名称
  5. overwrite: # 本地配置是否可覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  6. zookeeper: # Zookeeper 注册中心配置
  7. namespace: # Zookeeper 的命名空间
  8. serverLists: # 连接 Zookeeper 服务器的列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181
  9. baseSleepTimeMilliseconds: # 等待重试的间隔时间的初始值。单位:毫秒
  10. maxSleepTimeMilliseconds: # 等待重试的间隔时间的最大值。单位:毫秒
  11. maxRetries: # 最大重试次数
  12. sessionTimeoutMilliseconds: # 会话超时时间。单位:毫秒
  13. connectionTimeoutMilliseconds: # 连接超时时间。单位:毫秒
  14. digest: # 连接 Zookeeper 的权限令牌。缺省为不需要权限验证

Etcd 分库分表编排配置项说明

  1. dataSources: # 数据源配置
  2. shardingRule: # 分片规则配置
  3. orchestration: # Etcd 编排配置
  4. name: # 编排服务节点名称
  5. overwrite: # 本地配置是否可覆盖注册中心配置。如果可覆盖,每次启动都以本地配置为准
  6. etcd: # Etcd 注册中心配置
  7. serverLists: # 连接 Etcd 服务器的列表。包括 IP 地址和端口号。多个地址用逗号分隔。如: http://host1:2379,http://host2:2379
  8. timeToLiveSeconds: # 临时节点存活时间。单位:秒
  9. timeoutMilliseconds: # 每次请求的超时时间。单位:毫秒
  10. maxRetries: # 每次请求的最大重试次数
  11. retryIntervalMilliseconds: # 重试间隔时间。单位:毫秒

分库分表编排数据源构建方式

  1. DataSource dataSource = OrchestrationShardingDataSourceFactory.createDataSource(yamlFile);

读写分离数据源构建方式

  1. DataSource dataSource = OrchestrationMasterSlaveDataSourceFactory.createDataSource(yamlFile);