数据库读写分离,之前也说过这次在回顾下吧:主从复制,proxy读写分离,jar包进行读写分离。三种方式体量不同,根据自己的需求找到最合适的,一起说下。
我们一般应用访问数据库无非是读取数据、修改数据、插入数据、删除数据。 而我们对数据库一般分为: master(主库也是写库) slave(从库也为读库) 而读写分离的意思就是:所有的写(insert update delete)操作走主库、其他走从库。
我们一般应用对数据库而言都是“读多写少”,也就是说对数据库读取数据的压力比较大。读写分离的主要目的是降低主库的压力。 降低主库的读的压力。只是降低主库读的压力,并不是说不能用主库来查询(下单立刻查询订单状态)。
主多从 mysql 集群方案,至少两个库。一主一从。
Master my.cnf 配置:
binlog-do-db=tlshopbinlog-ignore-db=mysqlbinlog_format=mixedlog-bin=mysql-binserver-id=1
Slave my.cnf 配置
replicate-do-db=tlshopreplicate-ignore-db=mysqlserver-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: 1.程序不需要管主从配置的具体细节 2.实现原理是 proxy,所以性能上会下降 3.而且需要维护其高可用 4.减少了程序员技能要求 5.只支持 mysql Sharding-jdbc: 1.主从配置在程序中,所以增加了程序员的技术要求 2.实现原理是 jdbc 增强,所以支持任何数据库类型 性能比上面那个强 3.而且不需要维护。 4.Mysql、 Oracle、 sql server