本篇文章讨论一下数据库高可用的相关架构。
数据库的高可用从下面几点考虑
主要解决单数据库中数据量过多的问题。水平划分成多个库负载均衡。
单个主数据库搭配多个从数据库来进行使用。主库负责写入,从库负责读取。同步主库和从库的数据。当水平切分遇到主从复制时,划分成的1库和2库分别进行读写分离。
数据同步不一致 有一定时间差 (还未同步数据就去读取)
通常使用中间件或者强制读主的方式来解决中从数据不一致性问题
单个主库也会成为单点,MHA可以在主库产生故障时进行切换,选举一个读库作为主库。一主在写多的场景下也会产生瓶颈,因而拓展主库也是某些场景需要的。
单个写库还是不能保证写高可用,需要冗余写库。
同时带来的问题也是数据需要同步的地方增多,数据延迟严重。
主备架构,只有主库提供读写服务,备库冗余作故障转移用
通过虚ip漂移,对业务层透明,不需要人工介入
优点是读写没有延时(写完就可以读),没有数据一致性问题。
不足的是不能通过加从库拓展读性能。资源利用率为50%,一台冗余主没有提供服务。但如果进行双主同时提供服务(负载均衡)可以解决这一点,但加了会有数据一致性问题如1.5中所说。
Keepalived 也就是通过虚拟ip,实现双主对外的统一接口,自动检查,失败切换机制,自动切换防止单点故障。
Keepalived基础是通过VRRP协议
两个主库同时提供服务,负载均衡。
读写性能相对主备架构得到提升,资源利用率更高。
存在数据一致性问题,也可以水平拓展。但水平拓展会多一层数据同步,同步时间变长。
带来的问题是数据一致性问题以及主键冲突问题(可以通过分布式id解决)
原文:https://www.cnblogs.com/wei57960/p/12267962.html