配置示例
数据分片
1dataSources: 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 13shardingRule: 14 tables: 15 t_order: 16 actualDataNodes: ds${0..1}.t_order${0..1} 17 databaseStrategy: 18 inline: 19 shardingColumn: user_id 20 algorithmExpression: ds${user_id % 2} 21 tableStrategy: 22 inline: 23 shardingColumn: order_id 24 algorithmExpression: t_order${order_id % 2} 25 keyGenerator: 26 type: SNOWFLAKE 27 column: order_id 28 t_order_item: 29 actualDataNodes: ds${0..1}.t_order_item${0..1} 30 databaseStrategy: 31 inline: 32 shardingColumn: user_id 33 algorithmExpression: ds${user_id % 2} 34 tableStrategy: 35 inline: 36 shardingColumn: order_id 37 algorithmExpression: t_order_item${order_id % 2} 38 bindingTables: 39 - t_order,t_order_item 40 broadcastTables: 41 - t_config 42 43 defaultDataSourceName: ds0 44 defaultTableStrategy: 45 none: 46 defaultKeyGenerator: 47 type: SNOWFLAKE 48 column: order_id 49 50props: 51 sql.show: true
读写分离
1dataSources: 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 18masterSlaveRule: 19 name: ds_ms 20 masterDataSourceName: ds_master 21 slaveDataSourceNames: 22 - ds_slave0 23 - ds_slave1 24 25props: 26 sql.show: true
数据脱敏
1dataSource: !!org.apache.commons.dbcp2.BasicDataSource 2 driverClassName: com.mysql.jdbc.Driver 3 url: jdbc:mysql://127.0.0.1:3306/encrypt?serverTimezone=UTC&useSSL=false 4 username: root 5 password: 6 7encryptRule: 8 encryptors: 9 encryptor_aes: 10 type: aes 11 props: 12 aes.key.value: 123456abc 13 encryptor_md5: 14 type: md5 15 tables: 16 t_encrypt: 17 columns: 18 user_id: 19 plainColumn: user_plain 20 cipherColumn: user_cipher 21 encryptor: encryptor_aes 22 order_id: 23 cipherColumn: order_cipher 24 encryptor: encryptor_md5 25props: 26 query.with.cipher.column: true #是否使用密文列查询
数据分片 + 读写分离
1dataSources: 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 33shardingRule: 34 tables: 35 t_order: 36 actualDataNodes: ms_ds${0..1}.t_order${0..1} 37 databaseStrategy: 38 inline: 39 shardingColumn: user_id 40 algorithmExpression: ms_ds${user_id % 2} 41 tableStrategy: 42 inline: 43 shardingColumn: order_id 44 algorithmExpression: t_order${order_id % 2} 45 keyGenerator: 46 type: SNOWFLAKE 47 column: order_id 48 t_order_item: 49 actualDataNodes: ms_ds${0..1}.t_order_item${0..1} 50 databaseStrategy: 51 inline: 52 shardingColumn: user_id 53 algorithmExpression: ms_ds${user_id % 2} 54 tableStrategy: 55 inline: 56 shardingColumn: order_id 57 algorithmExpression: t_order_item${order_id % 2} 58 bindingTables: 59 - t_order,t_order_item 60 broadcastTables: 61 - t_config 62 63 defaultDataSourceName: ds_0 64 defaultTableStrategy: 65 none: 66 defaultKeyGenerator: 67 type: SNOWFLAKE 68 column: order_id 69 70 masterSlaveRules: 71 ms_ds0: 72 masterDataSourceName: ds0 73 slaveDataSourceNames: 74 - ds0_slave0 75 - ds0_slave1 76 loadBalanceAlgorithmType: ROUND_ROBIN 77 ms_ds1: 78 masterDataSourceName: ds1 79 slaveDataSourceNames: 80 - ds1_slave0 81 - ds1_slave1 82 loadBalanceAlgorithmType: ROUND_ROBIN 83props: 84 sql.show: true
数据分片 + 数据脱敏
1dataSources: 2 ds_0: !!com.zaxxer.hikari.HikariDataSource 3 driverClassName: com.mysql.jdbc.Driver 4 jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_0 5 username: root 6 password: 7 ds_1: !!com.zaxxer.hikari.HikariDataSource 8 driverClassName: com.mysql.jdbc.Driver 9 jdbcUrl: jdbc:mysql://localhost:3306/demo_ds_1 10 username: root 11 password: 12 13shardingRule: 14 tables: 15 t_order: 16 actualDataNodes: ds_${0..1}.t_order_${0..1} 17 databaseStrategy: 18 inline: 19 shardingColumn: user_id 20 algorithmExpression: ds_${user_id % 2} 21 tableStrategy: 22 inline: 23 shardingColumn: order_id 24 algorithmExpression: t_order_${order_id % 2} 25 keyGenerator: 26 type: SNOWFLAKE 27 column: order_id 28 t_order_item: 29 actualDataNodes: ds_${0..1}.t_order_item_${0..1} 30 databaseStrategy: 31 inline: 32 shardingColumn: user_id 33 algorithmExpression: ds_${user_id % 2} 34 tableStrategy: 35 inline: 36 shardingColumn: order_id 37 algorithmExpression: t_order_item_${order_id % 2} 38 bindingTables: 39 - t_order,t_order_item 40 41 defaultTableStrategy: 42 none: 43 44 encryptRule: 45 encryptors: 46 encryptor_aes: 47 type: aes 48 props: 49 aes.key.value: 123456abc 50 tables: 51 t_order: 52 columns: 53 order_id: 54 plainColumn: order_plain 55 cipherColumn: order_cipher 56 encryptor: encryptor_aes 57 58props: 59 sql.show: true
治理
1#省略数据分片、读写分离和数据脱敏配置 2 3orchestration: 4 orchestration_ds: 5 orchestrationType: registry_center,config_center 6 instanceType: zookeeper 7 serverLists: localhost:2181 8 namespace: orchestration 9 props: 10 overwrite: true
配置项说明
数据分片
1dataSources: #数据源配置,可配置多个data_source_name 2 <data_source_name>: #<!!数据库连接池实现类> `!!`表示实例化该类 3 driverClassName: #数据库驱动类名 4 url: #数据库url连接 5 username: #数据库用户名 6 password: #数据库密码 7 # ... 数据库连接池的其它属性 8 9shardingRule: 10 tables: #数据分片规则配置,可配置多个logic_table_name 11 <logic_table_name>: #逻辑表名称 12 actualDataNodes: #由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持inline表达式。缺省表示使用已知数据源与逻辑表名称生成数据节点,用于广播表(即每个库中都需要一个同样的表用于关联查询,多为字典表)或只分库不分表且所有库的表结构完全一致的情况 13 14 databaseStrategy: #分库策略,缺省表示使用默认分库策略,以下的分片策略只能选其一 15 standard: #用于单分片键的标准分片场景 16 shardingColumn: #分片列名称 17 preciseAlgorithmClassName: #精确分片算法类名称,用于=和IN。。该类需实现PreciseShardingAlgorithm接口并提供无参数的构造器 18 rangeAlgorithmClassName: #范围分片算法类名称,用于BETWEEN,可选。。该类需实现RangeShardingAlgorithm接口并提供无参数的构造器 19 complex: #用于多分片键的复合分片场景 20 shardingColumns: #分片列名称,多个列以逗号分隔 21 algorithmClassName: #复合分片算法类名称。该类需实现ComplexKeysShardingAlgorithm接口并提供无参数的构造器 22 inline: #行表达式分片策略 23 shardingColumn: #分片列名称 24 algorithmInlineExpression: #分片算法行表达式,需符合groovy语法 25 hint: #Hint分片策略 26 algorithmClassName: #Hint分片算法类名称。该类需实现HintShardingAlgorithm接口并提供无参数的构造器 27 none: #不分片 28 tableStrategy: #分表策略,同分库策略 29 keyGenerator: 30 column: #自增列名称,缺省表示不使用自增主键生成器 31 type: #自增列值生成器类型,缺省表示使用默认自增列值生成器。可使用用户自定义的列值生成器或选择内置类型:SNOWFLAKE/UUID 32 props: #属性配置, 注意:使用SNOWFLAKE算法,需要配置worker.id与max.tolerate.time.difference.milliseconds属性。若使用此算法生成值作分片值,建议配置max.vibration.offset属性 33 <property-name>: 属性名称 34 35 bindingTables: #绑定表规则列表 36 - <logic_table_name1, logic_table_name2, ...> 37 - <logic_table_name3, logic_table_name4, ...> 38 - <logic_table_name_x, logic_table_name_y, ...> 39 broadcastTables: #广播表规则列表 40 - table_name1 41 - table_name2 42 - table_name_x 43 44 defaultDataSourceName: #未配置分片规则的表将通过默认数据源定位 45 defaultDatabaseStrategy: #默认数据库分片策略,同分库策略 46 defaultTableStrategy: #默认表分片策略,同分库策略 47 defaultKeyGenerator: #默认的主键生成算法 如果没有设置,默认为SNOWFLAKE算法 48 type: #默认自增列值生成器类型,缺省将使用org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator。可使用用户自定义的列值生成器或选择内置类型:SNOWFLAKE/UUID 49 props: 50 <property-name>: #自增列值生成器属性配置, 比如SNOWFLAKE算法的worker.id与max.tolerate.time.difference.milliseconds 51 52 masterSlaveRules: #读写分离规则,详见读写分离部分 53 <data_source_name>: #数据源名称,需要与真实数据源匹配,可配置多个data_source_name 54 masterDataSourceName: #详见读写分离部分 55 slaveDataSourceNames: #详见读写分离部分 56 loadBalanceAlgorithmType: #详见读写分离部分 57 props: #读写分离负载算法的属性配置 58 <property-name>: #属性值 59 60props: #属性配置 61 sql.show: #是否开启SQL显示,默认值: false 62 executor.size: #工作线程数量,默认值: CPU核数 63 max.connections.size.per.query: # 每个查询可以打开的最大连接数量,默认为1 64 check.table.metadata.enabled: #是否在启动时检查分表元数据一致性,默认值: false
读写分离
1dataSources: #省略数据源配置,与数据分片一致 2 3masterSlaveRule: 4 name: #读写分离数据源名称 5 masterDataSourceName: #主库数据源名称 6 slaveDataSourceNames: #从库数据源名称列表 7 - <data_source_name1> 8 - <data_source_name2> 9 - <data_source_name_x> 10 loadBalanceAlgorithmType: #从库负载均衡算法类型,可选值:ROUND_ROBIN,RANDOM。若`loadBalanceAlgorithmClassName`存在则忽略该配置 11 props: #读写分离负载算法的属性配置 12 <property-name>: #属性值
数据脱敏
1dataSource: #省略数据源配置 2 3encryptRule: 4 encryptors: 5 <encryptor-name>: 6 type: #加解密器类型,可自定义或选择内置类型:MD5/AES 7 props: #属性配置, 注意:使用AES加密器,需要配置AES加密器的KEY属性:aes.key.value 8 aes.key.value: 9 tables: 10 <table-name>: 11 columns: 12 <logic-column-name>: 13 plainColumn: #存储明文的字段 14 cipherColumn: #存储密文的字段 15 assistedQueryColumn: #辅助查询字段,针对ShardingQueryAssistedEncryptor类型的加解密器进行辅助查询 16 encryptor: #加密器名字
治理
1dataSources: #省略数据源配置 2shardingRule: #省略分片规则配置 3masterSlaveRule: #省略读写分离规则配置 4encryptRule: #省略数据脱敏规则配置 5 6orchestration: 7 orchestration_ds: #治理实例名称 8 orchestrationType: #配置/注册中心的类型,例如config_center/registry_center 9 instanceType: #配置/注册中心类型。如:zookeeper 10 serverLists: #连接配置/注册中心服务器的列表。包括IP地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181 11 namespace: #配置/注册中心的命名空间 12 props: #其它配置 13 overwrite: #本地配置是否覆盖配置中心配置。如果可覆盖,每次启动都以本地配置为准 14 digest: #连接注册中心的权限令牌。缺省为不需要权限验证 15 operationTimeoutMilliseconds: #操作超时的毫秒数,默认500毫秒 16 maxRetries: #连接失败后的最大重试次数,默认3次 17 retryIntervalMilliseconds: #重试间隔毫秒数,默认500毫秒 18 timeToLiveSeconds: #临时节点存活秒数,默认60秒
Yaml语法说明
!! 表示实例化该类
- 表示可以包含一个或多个
[] 表示数组,可以与减号相互替换使用