数据库读写分离,之前也说过这次在回顾下吧:主从复制,proxy读写分离,jar包进行读写分离。三种方式体量不同,根据自己的需求找到最合适的,一起说下。
我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。
而我们对数据库一般分为: master(主库也是写库) slave(从库也为读库)
而读写分离的意思就是:所有的写(insert update delete)操作走主库、其他走从库。
我们一般应用对数据库而言都是“读多写少”,也就是说对数据库读取数据的压力比较大。读写分离的主要目的是降低主库的压力。 降低主库的读的压力。只是降低主库读的压力,并不是说不能用主库来查询(下单立刻查询订单状态)。
主多从 mysql 集群方案,至少两个库。一主一从。
Master my.cnf 配置:
binlog-do-db=tlshop binlog-ignore-db=mysql binlog_format=mixed log-bin=mysql-bin server-id=1
Slave my.cnf 配置
replicate-do-db=tlshop replicate-ignore-db=mysql server-id=2 #以下的配置是5.6 之前版本 #master-host=192.168.0.15 #master-port=3306 #master-user=root #master-password=123456
slave 动态配置节点信息
1.进入master数据库,输入
show master status\G
2.进入slave数据库,输入
change master to master_host='192.168.0.15', master_user='root', master_password='123456', master_log_file='(输入1中show master status里面的 File)', master_log_pos=‘(输入1中show master status里面的 Position)’; slave start;//启动
代理层 proxy: Atlas 开源软件
应用层: Sharding-jdbc
官网https://github.com/Qihoo360/Atlas
Atlas 是由 Qihoo 360 公司 Web 平台部基础架构团队开发维护的一个基于 MySQL 协议的数据中间层项目。它在 MySQL 官方推出的 MySQL-Proxy 0.8.2 版本的基础上,修改了大量bug,添加了很多功能特性。目前该项目在 360 公司内部得到了广泛应用,很多 MySQL 很多 MySQL 业务已经接入了 Atlas 平台,每天承载的读写请求数达几十亿条。同时,有超过 50 家公司在生产环境中部署了 Atlas,超过 800 人已加入了我们的开发者交流群,并且些数字还在不断增加。
主要功能
Atlas 配置
强制路由:
注释的方式强制走主库。
Alatas:
/*master*/ select 字段 from 表名
业务需要 下单即查
Sharding-jdbc
Sharding-JDBC 是一个开源的分布式数据库中间件,它无需额外部署和依赖,完全兼容 JDBC和各种 ORM 框架。 Sharding-JDBC 作为面向开发的微服务云原生基础类库,完整的实现了分库分表、读写分离和分布式主键功能,并初步实现了柔性事务。之前有专门的文章『互联网架构』(65)
https://shardingsphere.apache.org/index_zh.html
<dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-core-spring-namespace</artifactId> <version>${sharding-jdbc.version}</version> </dependency> <dependency> <groupId>io.shardingjdbc</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${sharding-jdbc.version}</version> </dependency> <master-slave:data-source id="dataSource" master-data-source-name="dataSourceMaster" slave-data-source-names="dataSourceSlave,dataSourceSlave,dataSourceSlave" strategytype="ROUND_ROBIN" />
PS:Alatas:
Sharding-jdbc: