ShardingJDBC 09_读写分离知识

218 阅读2分钟

1 概念

读写分离是通过主从的配置方式,将查询请求均匀地分散到多个数据副本,提升系统的处理能力。

主库:新增、修改、删除数据操作所使用的数据库

从库:查询数据操作所使用的数据库

主从架构:读写分离,目的是实现高可用、读写可扩展。主从库内容相同,根据SQL语义进行路由。

分库分表架构:数据分片,读写扩展、存储扩容,数据库和数据表内容不同,根据分片配置进行路由。

将水平分片和读写分离联合起来使用,能够更加有效的提升系统性能。

读写分离虽然可以提升系统的吞吐量和可用性,但时也带来了数据不一致的问题,包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性问题。

同时,读写分离也带了与数据分片同样的问题,使用应用的开发和运维人员,对数据库的操作和运维变得更加复杂。

2 配置

按照一主一从的方式进行配置。

主从配置是数据库自身支持的,和之前的mycat主从配置相同。

首先修改 MySQL 主库的配置:

  • 设置 log_bin,主要是设置生成的 binlog 日志的文件名
  • 设置 server-id,数值型,主库与从库的数值不能相同
  • 设置 binlog-do-db,配置需要做主从同步的数据库,如果不设置,则会同步所有的数据库,如果需要配置多个库时,需要配置多行
  • 设置 binlog-ignore-db,配置不需要进行主从同步的数据库,当有多个库时,需要配置多行

修改 MySQL 从库的配置:

  • 设置 log_bin,与主库作用相同
  • 设置 server-id,与主库作用相同,但设置的值不能相同

3 ShardingJDBC对读写分离的支持与局限

核心功能

  • 提供一主多从的读写分离配置。但仅支持单主库,可以支持独立使用,也可以配合分库分表使用 
  • 独立使用读写分离,支持SQL透传。不需要SQL改写流程 
  • 同一线程且同一数据库连接内,能保证数据一致性。如果有写入操作,后续的读操作均从主库读取。 
  • 基于Hint的强制主库路由。可以强制路由走主库查询实时数据,避免主从同步数据延迟。 

不支持项

  • 主库和从库的数据同步 
  • 主库和从库的数据同步延迟 
  • 主库双写或多写 
  • 跨主库和从库之间的事务的数据不一致。在主从架构中,事务中的读写应当均用主库操作。