配置中心

实现动机

  • 配置集中化:越来越多的运行时实例,使得散落的配置难于管理,配置不同步导致的问题十分严重。将配置集中于配置中心,可以更加有效进行管理。

  • 配置动态化:配置修改后的分发,是配置中心可以提供的另一个重要能力。它可支持数据源、表与分片及读写分离策略的动态切换。

配置中心数据结构

配置中心在定义的命名空间的config下,以YAML格式存储,包括数据源,数据分片,读写分离、ConfigMap及Properties配置,可通过修改节点来实现对于配置的动态管理。

  1. config
  2. ├──authentication # Sharding-Proxy权限配置
  3. ├──configMap # 数据分片ConfigMap配置,以K/V形式存储,如:{"key1":"value1"}
  4. ├──props # 属性配置
  5. ├──schema # Schema配置
  6. ├──sharding_db # SchemaName配置
  7. ├──datasource # 数据源配置
  8. ├──rule # 数据分片规则配置
  9. ├──masterslave_db # SchemaName配置
  10. ├──datasource # 数据源配置
  11. ├──rule # 读写分离规则

config/authentication

  1. password: root
  2. username: root

config/configmap

读写分离ConfigMap配置,以K/V形式存储。

  1. key2: value2

config/sharding/props

相对于sharding-sphere配置里面的Sharding Properties。

  1. executor.size: 20
  2. sql.show: true

config/schema/schemeName/datasource

多个数据库连接池的集合,不同数据库连接池属性自适配(例如:DBCP,C3P0,Druid, HikariCP)。

  1. ds_0: !!io.shardingsphere.orchestration.yaml.YamlDataSourceConfiguration
  2. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  3. properties:
  4. url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
  5. password: null
  6. maxPoolSize: 50
  7. maintenanceIntervalMilliseconds: 30000
  8. connectionTimeoutMilliseconds: 30000
  9. idleTimeoutMilliseconds: 60000
  10. minPoolSize: 1
  11. username: root
  12. maxLifetimeMilliseconds: 1800000
  13. ds_1: !!io.shardingsphere.orchestration.yaml.YamlDataSourceConfiguration
  14. dataSourceClassName: com.zaxxer.hikari.HikariDataSource
  15. properties:
  16. url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
  17. password: null
  18. maxPoolSize: 50
  19. maintenanceIntervalMilliseconds: 30000
  20. connectionTimeoutMilliseconds: 30000
  21. idleTimeoutMilliseconds: 60000
  22. minPoolSize: 1
  23. username: root
  24. maxLifetimeMilliseconds: 1800000

config/schema/sharding_db/rule

数据分片配置,包括数据分片 + 读写分离配置。

  1. tables:
  2. t_order:
  3. actualDataNodes: ds_$->{0..1}.t_order_$->{0..1}
  4. databaseStrategy:
  5. inline:
  6. algorithmExpression: ds_$->{user_id % 2}
  7. shardingColumn: user_id
  8. keyGeneratorColumnName: order_id
  9. logicTable: t_order
  10. tableStrategy:
  11. inline:
  12. algorithmExpression: t_order_$->{order_id % 2}
  13. shardingColumn: order_id
  14. t_order_item:
  15. actualDataNodes: ds_$->{0..1}.t_order_item_$->{0..1}
  16. databaseStrategy:
  17. inline:
  18. algorithmExpression: ds_$->{user_id % 2}
  19. shardingColumn: user_id
  20. keyGeneratorColumnName: order_item_id
  21. logicTable: t_order_item
  22. tableStrategy:
  23. inline:
  24. algorithmExpression: t_order_item_$->{order_id % 2}
  25. shardingColumn: order_id
  26. bindingTables:
  27. - t_order,t_order_item
  28. broadcastTables:
  29. - t_config
  30. defaultDataSourceName: ds_0
  31. masterSlaveRules: {}

config/schema/masterslave/rule

读写分离独立使用时使用该配置。

  1. name: ds_ms
  2. masterDataSourceName: ds_master
  3. slaveDataSourceNames:
  4. - ds_slave0
  5. - ds_slave1
  6. loadBalanceAlgorithmType: ROUND_ROBIN

动态生效

在注册中心上修改、删除、新增相关配置,会动态推送到生产环境并立即生效。