Yaml配置

配置示例

数据分片

  1. dataSources:
  2. ds0: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds0
  5. username: root
  6. password:
  7. ds1: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds1
  10. username: root
  11. password:
  12. shardingRule:
  13. tables:
  14. t_order:
  15. actualDataNodes: ds${0..1}.t_order${0..1}
  16. databaseStrategy:
  17. inline:
  18. shardingColumn: user_id
  19. algorithmExpression: ds${user_id % 2}
  20. tableStrategy:
  21. inline:
  22. shardingColumn: order_id
  23. algorithmExpression: t_order${order_id % 2}
  24. keyGeneratorColumnName: order_id
  25. t_order_item:
  26. actualDataNodes: ds${0..1}.t_order_item${0..1}
  27. databaseStrategy:
  28. inline:
  29. shardingColumn: user_id
  30. algorithmExpression: ds${user_id % 2}
  31. tableStrategy:
  32. inline:
  33. shardingColumn: order_id
  34. algorithmExpression: t_order_item${order_id % 2}
  35. bindingTables:
  36. - t_order,t_order_item
  37. broadcastTables:
  38. - t_config
  39. defaultDataSourceName: ds0
  40. defaultTableStrategy:
  41. none:
  42. defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator
  43. props:
  44. sql.show: true

读写分离

  1. dataSources:
  2. ds_master: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds_master
  5. username: root
  6. password:
  7. ds_slave0: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds_slave0
  10. username: root
  11. password:
  12. ds_slave1: !!org.apache.commons.dbcp.BasicDataSource
  13. driverClassName: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://localhost:3306/ds_slave1
  15. username: root
  16. password:
  17. masterSlaveRule:
  18. name: ds_ms
  19. masterDataSourceName: ds_master
  20. slaveDataSourceNames:
  21. - ds_slave0
  22. - ds_slave1
  23. props:
  24. sql.show: true

数据分片 + 读写分离

  1. dataSources:
  2. ds0: !!org.apache.commons.dbcp.BasicDataSource
  3. driverClassName: com.mysql.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/ds0
  5. username: root
  6. password:
  7. ds0_slave0: !!org.apache.commons.dbcp.BasicDataSource
  8. driverClassName: com.mysql.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/ds0_slave0
  10. username: root
  11. password:
  12. ds0_slave1: !!org.apache.commons.dbcp.BasicDataSource
  13. driverClassName: com.mysql.jdbc.Driver
  14. url: jdbc:mysql://localhost:3306/ds0_slave1
  15. username: root
  16. password:
  17. ds1: !!org.apache.commons.dbcp.BasicDataSource
  18. driverClassName: com.mysql.jdbc.Driver
  19. url: jdbc:mysql://localhost:3306/ds1
  20. username: root
  21. password:
  22. ds1_slave0: !!org.apache.commons.dbcp.BasicDataSource
  23. driverClassName: com.mysql.jdbc.Driver
  24. url: jdbc:mysql://localhost:3306/ds1_slave0
  25. username: root
  26. password:
  27. ds1_slave1: !!org.apache.commons.dbcp.BasicDataSource
  28. driverClassName: com.mysql.jdbc.Driver
  29. url: jdbc:mysql://localhost:3306/ds1_slave1
  30. username: root
  31. password:
  32. shardingRule:
  33. tables:
  34. t_order:
  35. actualDataNodes: ms_ds${0..1}.t_order${0..1}
  36. databaseStrategy:
  37. inline:
  38. shardingColumn: user_id
  39. algorithmExpression: ms_ds${user_id % 2}
  40. tableStrategy:
  41. inline:
  42. shardingColumn: order_id
  43. algorithmExpression: t_order${order_id % 2}
  44. keyGeneratorColumnName: order_id
  45. t_order_item:
  46. actualDataNodes: ms_ds${0..1}.t_order_item${0..1}
  47. databaseStrategy:
  48. inline:
  49. shardingColumn: user_id
  50. algorithmExpression: ms_ds${user_id % 2}
  51. tableStrategy:
  52. inline:
  53. shardingColumn: order_id
  54. algorithmExpression: t_order_item${order_id % 2}
  55. bindingTables:
  56. - t_order,t_order_item
  57. broadcastTables:
  58. - t_config
  59. defaultDataSourceName: ds_0
  60. defaultTableStrategy:
  61. none:
  62. defaultKeyGeneratorClassName: io.shardingsphere.core.keygen.DefaultKeyGenerator
  63. masterSlaveRules:
  64. ms_ds0:
  65. masterDataSourceName: ds0
  66. slaveDataSourceNames:
  67. - ds0_slave0
  68. - ds0_slave1
  69. loadBalanceAlgorithmType: ROUND_ROBIN
  70. configMap:
  71. master-slave-key0: master-slave-value0
  72. ms_ds1:
  73. masterDataSourceName: ds1
  74. slaveDataSourceNames:
  75. - ds1_slave0
  76. - ds1_slave1
  77. loadBalanceAlgorithmType: ROUND_ROBIN
  78. configMap:
  79. master-slave-key1: master-slave-value1
  80. props:
  81. sql.show: true

数据治理

  1. #省略数据分片和读写分离配置
  2. orchestration:
  3. name: orchestration_ds
  4. overwrite: true
  5. registry:
  6. namespace: orchestration
  7. serverLists: localhost:2181

配置项说明

config-xxx.yaml 数据分片+读写分离(根据3.1最新版本修订)

  1. # 以下配置截止版本为3.1
  2. # 配置文件中,必须配置的项目为schemaName,dataSources,并且sharidngRule,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. # 如果一个会话发生了写入并且没有提交(显式打开事务),sharidng 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: # 广播表 这里配置的表列表,对于发生的所有数据变更,都会不经sharidng处理,而是直接发送到所有数据节点,注意此处为列表,每个项目为一个表名称
  57. - broad_1
  58. - broad_2
  59. bindingTables: # 绑定表,也就是实际上哪些配置的sharidng表规则需要实际生效的列表,配置为yaml列表,并且允许单个条目中以逗号切割,所配置表必须已经配置为逻辑表
  60. - sharding_t1
  61. - sharding_t2,sharding_t3
  62. defaultDatabaseShardingStrategy: # 默认库级别sharidng规则,对应代码中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: # 支持多列的shariding,目前无生产可用实现
  71. shardingColumns: # 逗号切割的列
  72. shardingAlgorithm: # ComplexKeysShardingAlgorithm接口的实现类
  73. standard: # 单列sharidng算法,需要配合对应的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} # sharidng 表对应的数据源以及物理名称,需要用表达式处理,表示表实际上在哪些数据源存在,配置示例中,意思是总共存在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

数据治理

  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秒

Yaml语法说明

!! 表示实例化该类

- 表示可以包含一个或多个

[] 表示数组,可以与减号相互替换使用