1. mysql高可用方案
1.1 低读低写并发、低数据量方案
方案一:
(1)数据库架构图
(2)特点
一台机器A作为读写库,另一台B作为备份库,若A库故障后,读写操作或转移到B库上执行,A库恢复后作为备库。
(3)开发说明
此种情况下,数据源配置中的数据库IP地址,可采用虚拟的IP地址,虚拟IP地址有两台数据库机器上的keepalived配置,互相检测心跳。当一台机器故障后,虚拟IP地址会从故障库漂移到正常库上。
数据库的贮备配置,故障排查和数据不全,需要DBA(数据库管理人员)和运维人员维护。程序代码和配置并不需要修改啦
(4)适应场景
读写不高的场景(单表数据低于500万),双机高可用
(5)优缺点
优点:机器故障后自动切换
缺点:只有一台机器工作,读写未分离,并发有限制
方案二:
(1)数据库架构图
(2)特点
一台机器A作为写库,另一台B作为读库;A库故障后,读的操作转移到B机器上,A库恢复后,A库作为读库,B库作为写库。
(3)开发说明
该方案的实现,要借助数据库中间件Mycat来实现,配置如下
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0"
dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--主,用于写-->
<writeHost host="hostM1" url="192.168.1.135:3306" user="root" password="123" />
<!--主2,用于读,hostM1 down了,自动切换为主,读写都可以-->
<writeHost host="hostM2" url="192.168.1.136:3306" user="root" password="123" />
</dataHost>
项目开发中,需要配置Mycat数据源,并实现对Mycat数据源的数据操作。数据库A和B互为主从。
数据库的主主配置,故障排查和数据不全,依然需要DBA和运维人员维护。
(4)适应场景
读写操作要求都不是非常高的场景(单表数据低于1000万),高可用,比方案一高。
(5)优缺点
优点:一个机器故障后可以自动切换;
读写分离,并发有了很大的提升
缺点:引入了一个Mycat节点,若要高可用需要引入两个Mycat。常规的解决方案为:引入haproxy和keepalived对mycat做集群。
1.2 高读低写并发,低数据量
方案三:一主多从+读写分离
(1)数据库架构图
(2)特点
一个主库A多个从库,当A库故障时,提上从库B为主写库,同事修改C,D为B的从库,A故障修复后,会作为B的从库使用。
(3)开发说明
项目开发需要使用Mycat作为中间件,来配置主库和从库,核心配置如下
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0"
dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!--主A,用于写-->
<writeHost host="hostM1" url="192.168.1.135:3306" user="root" password="123" />
<!—从B,用于读,hostM1 down了,自动切换为主-->
<writeHost host="hostM2" url="192.168.1.136:3306" user="root" password="123456"/>
<!—从C,用于读-->
<writeHost host="hostM3" url="192.168.1.137:3306" user="root" password="123" />
<!—从D,用于读-->
<writeHost host="hostM4" url="192.168.1.138:3306" user="root" password="123" />
</dataHost>
主库A故障后,Mycat会自动把B提升为写库,而C,D从库,可以通过MHA等工具,自动修改其主库B,进而实现自动切换的目的。
MHA Manger可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上,MHA Nod运行在每台Mysql服务器上,MHA Manger会定时探测集群中的master节点,当master出现故障后,它可以自动将最新数据的slave提升为新的master,然后将其他所有的slave重新指向新的master,故障转移对应用程序完全透明。
(4)适应场景
该架构适合写并发不大。但读并发很大的场景
(5)优缺点
优点:读并发能力有了质的提升,理论上来说,读的节点也可以配置多个
缺点:节点多
1.3 高读写并发,低数据量方案
方案四:MariaDB Galera Cluster方案
(1)数据库架构图