sha851092391
2022-07-14 15:39:35 +08:00
其实需要把问题分单机和分布式来看,单机的 wal ( mysql redolog )的刷盘方式不同,也会影响到事务是否会丢失。同步刷盘的方式也只能解决软件层面的故障,硬盘损坏这类的硬件故障就无能为力。而 RAID 也只能做到硬件冗余来保证高可用,万一火灾地震呢。
这时候可以考虑多机房通过主从复制来保证 log 的可用性。
首先单主复制,也就是同一时刻只有一个主节点进行写操作,那么这里面如果保证主从之间 log 的一致呢,不考虑延迟的话一个事务的提交就必须等所有从节点 log 复制完才提交(虽然有 semi-sync 、quorum 等手段,但本质是解决写的性能)。
那还有多主复制的问题,这里面的写冲突就更复杂了,例如 LWW 、CRDT 等,而 paxos 族的 raft 、zab 解决的是选主共识问题,还有 gossip 是解决复制的问题,这个话题有点大,OP 可以自行了解下看看。