文章目录
首先需要搭建好数据库主从复制环境
1、只使用读写分离
数据库一主两从搭建好,master、slave1、slave2
配置文件:
spring:
shardingsphere:
datasource:
names: master,slave1,slave2
master:
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
slave1:
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
slave2:
type: com.zaxxer.hikari.HikariDataSource
jdbc-url: jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2b8
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
masterslave: #单做读写的规则和 主从轮询规则
load-balance-algorithm-type: round_robin
name: ms
master-data-source-name: master
slave-data-source-names: slave1,slave2
public class YamlMasterSlaveRuleConfiguration implements YamlConfiguration {
private String name;
private String masterDataSourceName;
private Collection<String> slaveDataSourceNames = new ArrayList<>();
private String loadBalanceAlgorithmType;
}
只做读写分离,不做分库分表
2、读写分离+分库分表
配置上有所区别,就是增加分库分表,所以需要配置逻辑表以及分片策略等。。。
搭建两个主从,master1,slave11,slave12、master2,slave21,slave22,在两个主从上做分库分表
配置文件:
spring:
shardingsphere:
datasource:
names: master1,master2,slave11,slave12,slave21,slave22
master1:
...
master2:
...
slave11:
...
slave12:
...
slave21:
...
slave22:
...
#masterslave:
#load-balance-algorithm-type: round_robin
sharding: #分表规则,分库规则,主从规则
master-slave-rules:
ms1: #主从1
master-data-source-name: master1
slave-data-source-names: slave11,slave12
load-balance-algorithm-type: round_robin
ms2: #主从2
master-data-source-name: master2
slave-data-source-names: slave21,slave22
load-balance-algorithm-type: round_robin
tables:
user:
actual-data-nodes: ms$->{1..2}.table_$->{1..2}
key-generator:
column: id #自定填充字段
type: SNOWFLAKE #雪花算法 UUID、SNOWFLAKE两种(实现ShardingKeyGenerator接口)
table-strategy: #分表策略
inline: #行表达式
sharding-column: id #分片键
algorithm-expression: table_$->{id % 2 + 1} #分片具体策略 id奇数存table_2,偶数存table_1
database-strategy:
inline:
algorithm-expression: ms$->{sex % 2 + 1}
sharding-column: sex