数据库多节点架构
1、异步复制
--默认的复制方式
--主节点写入binlog文件后就返回客户端,不考虑binlog是否完整同步到从节点,是否已完整存放到从节点的relay log 中去了
-- 优点:性能好,无阻塞
--缺点:如果主节点发生宕机,主节点上已提交的事务上位同步到从节点,如果此时强行从节点晋升为主节点,会导致新主节点数据不完整
2、全同步复制
--主节点写入binlog后就等着,知道事务在所有从库都提交后返回客户端
--好处:确保数据实时同步到了所有从库
--缺点:数据库的更新效率会差很多,增删改动作会较大的延迟
2、半异步复制
--主库提交事务后,不立即返回,而是等待至少1个从库接收到binlog,并写入relay log才会返回,从而保证从库出问题时候,至少有个从库数据是完整的
--当等待超时,会降低成异步复制,保证主库的正常更新
3、GTID复制
--GTID是(Global Transaction ID,全局事务标识)的简称,是对一个已提交事务的编号,并且全局唯一,一个事物对应一个GTID
--GTID由UUID + TID组成,UUID是MySQL示例的唯一标识;TOD则是事务在该示例上提交的顺序
4、多源复制
--多个数据源数据复制到一个节点上面去
--适用场景:
--数据分析团队可能要分析多个微服务的数据,可使用多源复制,将多个微服务的数据复制到一个数据库库中去,以方便统计分析
--数据备份,一个大型项目往往有多个微服务,多个数据库实例,可以把多个数据库复制到一个数据库实例实现数据备份
5、PXC(Percona XtraDB Cluster)
概念:
--组通信(Group Communication):定义了数据库节点间的通信模式,保证复制数据库的一致性
--Write-Set Replication API(wsrep API):为上层提供丰富的状态信息及回调函数,实现多点写入及同步复制
--写集(Write-Set):一个将要被复制的事务
--写集中不仅包括对事物影响的所有行的主键(组成写集的key)还包括事务产生的binlog(组成写集合的data),key-data 就是写集合
--key 用来验证和其他事务有没有冲突
--data用来验证通过后应用与提交
--数据传输方式
--SST全量传输,支持mysqldump、rsync、XtraBackup 3种方式
--IST增量传输,只支持XtraBackup
优点:
--数据同步复制,实现了强一致性,任何实例挂掉,数据都不会丢失
--数据并发复制,客户端延迟小
--部署简单,扩容方便
--多节点写入,故障切换容易
局限性:
--只支持Innodb引擎,而且所有的表都要有主键
--由于要保证数据一致性,所以多节点并发写入时,锁冲突、死锁的概率比其他模式高
--由于实现了强一致性,而且是同步写入,所以写操作要在所有节点都执行成功才算成功,所以写入效率往往取决于集群中性能最差的节点,存在短板效应
--每个节点都会发生写操作,存在扩大的问题
适用场景:
--追求强一致性
--希望多点写入
--市场正在被MySQL Group Replication抢占
6、Galera Cluster for MySQL
7、MHA(Master High Avaliability)
功能:
--故障自动切换
--保证故障切换的过程中数据丢失尽可能小
--保证故障切换后,其他从库和新的主库数据一致
原理
--如果宕机的主库人可以通过SSH链接,MHA会柏爱春从库的binlog
--根据从库的binlog位置,找到包含最新的更新的从库作为备用主库
--应用差异的relay log到其他从库,保持从库和备用主库一致
--应用从原主库上保存binlog,并将数据恢复到所有节点
--将备用主库晋升为新的主库,并让从库和新主库保持主从关系
8、MGR(MySQL Group Replication)
概念:
--由MySQL官方出品的,基于组复制概念并参考PXC、Galera Cluster for MySQL 等产品的有事,而设计的高可用集群架构
--基于PAXOS协议,解决了异步复制以及半同步复制等方式存在的数据一致性问题,非常适合金融行业使用
原理:
--主节点执行,然后广播到其他节点验证冲突并执行,如果出现冲突直接回滚
服务模式
--单主模式(推荐)
--分为PRIMARY(主)节点与SECONDARY(从)节点
--只有1个主节点,可读可写;其他节点都是从节点,只准许读操作,组内节点保持数据的一致性
--当主节点宕机或下线时,如满足多数节点存活的原则,则在内部发起宣讲,将一个从节点晋升成为主节点
选举算法:
--对组内成员的MySQL版本排序,选最低版本作为主节点
--实际项目中,应该尽量保证所有版本一致
--如果多接点同时使用最低版本,则考虑每个成员的权重
--可用 group_replication_member_weight指定,值是0-100,默认50,选值最大的节点作为主节点
--如果多个节点的权重值同时最大,通过SERVER_UUID系统变量计算
--字典排序选UUID最小的成员会成为主节点(show variables like '%SERVIER_UUID%')
--多主模式
--多主模式下,每个节点都是PRIMARY节点,可读可写
--写操作会下发到组内所有节点,也保证组内数据的一致性
9、MMM(Multi-Master Replication Manager For MySQL)
--MySQL多主复制管理、故障切换的工具
高可用架构横向对比
1、异步复制
--优点:异步复制,性能好
--缺点:主从之间存在延迟,数据不一致,可能丢数据
--适用于:追求极值性能,对一致性要求不高的场景
2、半同步复制
--优点:主节点会等待至少1个节点返回后才会提交,提交两种模式,新模式不会丢数据,到超时时间时,会自动降级成异步复制模式
--缺点:存在等待从节点的开销,性能比异步复制要差一些
--适用于:不允许丢数据的场景
3、GTID复制
--优点:可通过GTID前半段的UUID知道事务最初是哪个数据库实例提交的
--GTID是有序的,保证一个GTID的事务在一个服务器上面只执行一次,避免重复执行导致数据库混乱及主从不一致
--运维方便,不需要指定binlog以及position
--缺点:部分SQL不支持GTID,可能要对应用做修改才行
--适用于:绝大多数场景,一般只要MYSQL支持GTID,就建议开启
4、PXC
--优点:
--使用者角度:多主模式,同步复制,多节点写,且能保证数据一致
--运维角度:搭建简单,故障切换较容易
--缺点:
--同步复制,性能会取决于集群中性能最差的节点,存在短板效应
--存在写扩大问题,节点数量不建议超过8个
--适用于:对一致性能要求非常高的场景,例如金融业务
5、MHA
--优点:
--自动故障转移,转移速度快
--故障转移时最大程度保持数据一致性
--对已有主从复制架构侵入性小
--缺点:
--自身不提供VIP配置工具,需要额外搭建
--另外功能是否强大,很大程度取决于脚本
--适用于:主从复制模式下的各种场景
6、MGR
--优点:
--既支持单主模式,有支持多主模式,且都能保持数据一致性
--借鉴PXC等技术,融合其优势,性能表现比PXC优越
--缺点:
--多主模式局限性比较多,用的时候要注意
--适用于:对一致性要求非常高的场景,取代PXC的场景