2.6. 问题和答案
- 为什么要同步数据库复制?
- 同步复制数据库可确保在故障切换时,在主站点中写入的数据始终可用,且不会丢失数据。
- 为什么要同步数据网格复制?
- 同步复制的数据网格确保主站点中创建、更新和删除的会话始终在故障切换的次要站点中可用,且不会丢失数据。
- 为什么在站点之间需要低延迟网络?
- 同步复制会延迟对调用者的响应,直到次要站点接收数据。对于同步数据库复制和同步数据网格复制,需要低延迟,因为当数据更新时,每个请求在站点之间可能存在多个交互,这会降低延迟。
- 为什么使用主动-被动?
- 有些数据库支持一个带有 reader 实例的单一写器实例,然后在原始写入器失败时将其提升到新的写入器。在这样的设置中,延迟与当前有效的 Keycloak 构建相同的站点有 writer 实例很有用。同步数据网格复制可能会导致同时修改两个站点中的条目时死锁。
- 此设置是否仅限于两个站点?
- 此设置可以扩展到多个站点,不需要修改三个站点。添加更多站点后,站点之间的总体延迟会增加,以及网络故障的类似线,因此还会增加停机时间。因此,此类部署应该具有更糟糕的性能和一个 inferior。现在,它已被测试,且只适用于两个站点的蓝图。
- 同步集群是否稳定低于异步集群?
异步设置将正常处理站点之间的网络故障,而同步设置会延迟请求,并将向调用者抛出错误,其中异步设置会将写入 Data Grid 或数据库延迟到次要站点。但是,由于二级站点永远不会与主站点完全更新,因此这个设置可能会导致在故障切换过程中丢失数据。这包括:
- 丢失的注销,这意味着会话会记录在次要站点,但它们在使用异步数据网格复制时在故障转移点登录到主站点。
- 丢失更改会导致用户可以使用旧密码登录,因为在使用异步数据库时,数据库更改不会复制到次要站点。
- 无效的缓存会导致用户可以使用旧密码登录,因为在使用异步数据网格复制时,故障转移时不会向二级站点传播无效的缓存。
因此,高可用性和一致性之间存在利弊。本主题的重点是,优先选择红帽构建的 Keycloak 的可用性的一致性。