主从复制:
一个主节点用于数据写入,多个从节点用于数据读取。主节点与从节点之间数据同步。
如图,对数据写入的操作才会操作Master节点,其他都访问Slave节点。
主从复制是有延迟的,一般复制有两种方式:复制二进制日志。将主节点的Write Ahead Log分发到从节点。另外是复制语句,对主节点执行的每一条语句在从节点上执行一遍。这就可能存在数据在同步过程中出现不一致的情况。但是一般来说,最终状态是一致的。
同时,主节点也不是万能的,当主节点单点故障时,需要选择一个同步状态最新的节点重新选作主节点,当然,如果有热备节点,优选热备节点(热备节点是一种特殊的从节点,主节点在执行数据的时候,需要等待热备节点执行完毕才会完成事务,热备节点是同步的从节点,与主节点的数据完全一致,因此不会存在”主从延迟“,优选为新的主节点)
多主复制
多主复制就不再有主从的概念,每个节点都是主节点,每个节点也都是从节点。每个节点都会把当前的更新复制到其他的节点,每个节点也都会接受来自其他节点的同步数据,因为每个节点都接收读请求和写请求。
多主机复制存在着一个风险--更新冲突。解决更新冲突的方式有两种,一是冲突避免,而是冲突自动解决算法。
两段式提交可以保证所有节点的数据同步,但同样也会有写事务响应时间变长的代价。当节点之间通过wan传输数据时,响应时间进一步被拉长,单节点的不可用也会导致所有主节点上的事务回滚。两段式提交适合保证数据一致性要求高的场景。
异步复制可以减少响应时间,提高吞吐量,但是需要单独的冲突检查和冲突解决算法,出现冲突时,尝试合并冲突的两个分支,如果失败,可能需要手动干预。