Galera 使用基于认证的复制来实现强一致性。
在执行完其他节点后执行事务COMMIT
时,其他节点将对其进行认证,如果没问题,它将成功提交。
但是,如果丢失了一个验证提交但仍在获取数据的节点,例如在写一个 big 时,会发生什么blob
?
据我了解,认证过程是同步的,但数据传输是异步的,这意味着客户端/用户可能认为他的数据在成功运行后存储在所有节点上,COMMIT
但实际上在后端发生的是数据可能仍然存在在节点之间同步,在网络中断的情况下,根据交易类型,节点可能会发生冲突,对吗?
如果是这种情况,如何将集群配置为从可能的冲突中自我修复,或者想知道是否有一种方法可以实现强一致性,即使它会影响每个的返回时间,COMMIT
因为它应该只有在数据被删除后才能成功在所有节点上完全传输。
这与丢失任何其他节点没有什么不同。如果节点崩溃,它将在下次出现时尝试重新加入集群。将找到一个施主节点,最好使用 IST(增量状态传输)或 SST(状态快照传输)将节点带到正确的状态。
你是对的,数据传输是异步的,并且有很短的时间节点状态不相同。这不完全是冲突,只是其他节点落后了。他们很快就会赶上来的。
是的,它通过 IST 和 SST 进行自我修复。
有两种方法可以确保您正在读取最新版本的数据:如果您总是只写入一个节点(例如,因为使用带有读写分离器的数据库代理),那么您可以确保也从同一个节点读取。另一个选项是设置会话变量wsrep_sync_wait =1 - 请参阅使用 Galera 实现先读后写语义。