replication架构
-
Fabirc:实现了HA和sharding
- Failover:发现primary失败后,从secondaries中选择一个提升为primary
- Router:failover后,会直接更新state store,client可以直接从state store中获得primary的地址
-
Cluster:与fabirc不同,实现的是数据的水平切割,每个节点的数据集都是总数据集的一部分
replication模式
- Asynchronous:在master成功后,直接返回
- Semi-synchronous:在master成功后,在一定时间点内等待某个节点replicate成功;若失败了,则转为Asynchronous
日志模式
slave从master上获取binglog信息,并在本地重新执行这些变更操作,成为重放日志,并且按照日志中记录的信息不同,分为SBR、RBR、混合三种模式
SBR
statement-based replication,将SQL语句写入日志,slave拉取后,直接执行原生的SQL
-
优点:由于只是原生SQL,所以日志量会变得很小
-
缺点:存在不一致性的场景
- 使用 UDF,存在SQL依赖实际执行的时机
- 使用update或delete使用limit但没有使用order by,slave可能与master执行不一致
- 使用RAND、SYSDATE、UUID等,依赖执行本地系统
- AUTO_INCREMENT 也会带来不一致性,除非采用阻塞模式
RBR
row-based replication,将每行数据的变更内容写入日志,slave拉取后,根据记录详情执行insert or delete
- 优点:使用更少的行锁,slave并发能力更强
- 缺点:一条update会对应多条insert,日志量巨大
混合模式
mix-format replication,由数据库决定是用SBR还是RBR