24.3.4. 状态传输


状态传输既是基本数据网格,也是群集缓存功能。如果不进行状态传输,数据将会丢失,因为节点会添加到集群或从集群中删除。

State transfer 会根据缓存成员资格的变化调整缓存的内部状态。当节点加入或离开集群时、两个或多个群集分区合并或这些事件组合后,会自动进行这一更改。新启动缓存的初始状态传输成本最为昂贵,因为新缓存必须根据缓存模式接收最大状态量,如下所述。

timeout 属性可用于控制新启动的缓存等待多久才能接收其状态。如果 timeout 属性是一个正数,则缓存将等待接收其所有初始状态,然后才能提供给服务请求。如果状态传输未在指定时间内完成,则默认值为 240000 毫秒,缓存将抛出错误并取消启动。如果 超时 设为 0,则缓存将立即可用,并在后台操作期间收到初始状态。在初始状态传输完成之前,任何对缓存尚未接收的缓存条目请求都需要从远程节点获取。

可通过以下命令将 timeout 属性设为 0

/subsystem=infinispan/cache-container=server/CACHE_TYPE=CACHE/component=state-transfer:write-attribute(name=timeout,value=0)

状态传输行为由缓存模式决定。

  • 在复制模式中,新节点加入缓存会从现有节点接收整个缓存状态。当节点离开集群时,没有状态转移。
  • 在分发模式中,新节点仅从现有节点接收状态的一部分,而现有节点则移除了其中一些状态,以便在缓存中保留每个密钥 的所有者 副本,具体通过一致的散列来确定。当节点离开集群时,分发缓存需要创建该节点上存储的密钥的额外副本,以便每个密钥的所有者继续存在。
  • 在无效模式中,初始状态传输与复制模式类似,唯一的区别在于无法保证节点具有相同的状态。当节点离开集群时,没有状态转移。

状态传输默认同时传输内存中和持久状态,但可以在配置中禁用这两者。禁用状态传输时,必须配置 ClusterLoader,否则节点将成为密钥的所有者或备份所有者,而无需将数据加载到其缓存中。另外,如果以分布模式禁用状态传输,则密钥偶尔会比缓存中 的所有者 副本少。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.