- 网络分区(脑裂)以后,单主集群出现了多主,怎么解决?
- 看集群的做法,有些集群的做法是降级的节点,不会在加入节点变成从,那么我们可以通过比对数据,把没有同步的部分写入集群,然后把它改成从。
- 如果集群做法是老主自动降级位从,并且同步当前新主的数据,那么我们只能通过历史日志,或者老主的数据备份来恢复数据了。
- 可以设置对外提供服务的集群数量是超过一半才提供写服务,否则只提供读服务,这时候网络分区以后,节点少的那个集群的主节点是不能继续写入的。
- CAP 三选2,实际是网络分区的时候CA只能二选一,P网络分区,不是一个结果,是一个条件,不是说解决了网络分区,而是会不会有网络分区的问题。分布式集群一定会有网络分区的可能,单体架构不会有网络分区的可能,这是条件,CA 一个是 强一致性,强调的结果,A 是可用性,强调结果。所以CAP,说的是在网络分区的前提下,在一定时间内强一致性的处理完并且返回不是一定可以确保的。CA模式那是单机,在分布式架构里面CAP是二选一。
- BASE 描述的 是两个选择
- BA 是描述的CP模式下,对可用性的处理,要在保证强一致性的前提上,让系统基本可用,如果一定时间内等不到数据同步,超过一定时间,就应该给用户一定的提示,而不是让用户在哪里死等。
- SE 是描述 AP模式下,对于一致性的处理,一定时间内做不到完成的同步,但是我们可以把主线做了,支线依赖系统最终一致性慢慢完成,这时候出现一些或多或少的中间状态也就成了必然的结果。
- ACID
- A 是原则性 想要达到C效果的一个条件
- C 一致性 强调结果
- I 隔离性 想要达到C效果的一个条件
- D 持久性 想要达到C效果的一个条件
- 如果理解够深入可以很明显的看出,事务的4个特性是不对等的,C才是主角,是我们要的结果,AID都是配角,是告诉我们满足了这三个条件以后能到达的效果C一致性。
- CAP 里面有 事务的 ACID 中的 AID吗? 有,只在 CP模式下有,如果是舍弃了C的AP模式,没有AID,但是也不是完全没有,分布式事务很多都是2段式的,不满足原子性质,分布式事务很多都有脏读,软状态,隔离性也被打破。D持久性看起是满足了,但是主从复制,并且主写,从读的集群中,如果网络分区,产生两个可写的主,在网络分区恢复以后老主本降级为从的时候,可能会抹去部分持久化了的数据,D也被破。
原创作者: u_15958225 转载于: https://blog.51cto.com/u_15958225/11802660