跨站点复制的数据网格指南
在全局 Data Grid 集群中备份数据
摘要
Red Hat Data Grid 复制链接链接已复制到粘贴板!
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档 复制链接链接已复制到粘贴板!
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载 复制链接链接已复制到粘贴板!
访问红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 Data Grid Cross-Site Replication 复制链接链接已复制到粘贴板!
通过跨站点复制,您可以将数据从一个 Data Grid 集群备份到另一个集群。在配置集群前,了解 Data Grid 跨站点复制的概念。
1.1. 跨站点复制 复制链接链接已复制到粘贴板!
在不同位置中运行的数据网格集群可以发现并相互通信。
站点通常是位于不同地理位置的数据中心。在站点中的跨站点复制桥接 Data Grid 集群组成全局集群,如下图所示:
LON 是伦敦的伦敦数据中心。
NYC 是位于美国的新西兰城市的数据中心。
Data Grid 可以在两个或多个站点组成全局集群。
例如,将在 San San、SFO ( SFO )中运行的第三个 Data Grid 集群配置为 LON 和 NYC 的备份位置。
1.1.1. 站点 Master 复制链接链接已复制到粘贴板!
站点 master 是 Data Grid 集群中的节点,它负责从备份位置发送和接收请求。
如果节点不是站点 master,则必须将备份请求转发到本地站点 master。只有站点 master 才能向备份位置发送请求。
为获得最佳性能,您应该将所有节点配置为站点 master。这提高了备份请求的速度,因为集群中的每个节点可以直接备份到远程站点,而无需将备份请求转发到站点 master。
本文档的图表演示了 Data Grid 集群和一个站点 master,因为这是 JGroups RELAY2 协议的默认设置。同样,单个站点 master 更容易说明,因为集群中的每个站点 master 与远程集群中的每个站点 master 通信。
1.2. 在缓存中添加备份 复制链接链接已复制到粘贴板!
将远程站点命名为缓存定义中的备份位置。
例如,下图显示了三个缓存,"customers"、"eu-orders"和"us-orders":
- 在 LON 中,"customers"名称 NYC 作为备份位置。
- 在 NYC 中,"customers"名称 LON 作为备份位置。
- "eu-orders"和"us-orders"没有备份,并且对对应的集群是本地的。
1.3. 备份策略 复制链接链接已复制到粘贴板!
Data Grid 在集群间复制数据,同时进行写入缓存。例如,如果客户端将 "k1" 写入 LON,则数据网格同时将"k1"备份到 NYC。
要将数据备份到不同的集群,数据网格可以使用同步或异步策略。
同步策略
当 Data Grid 将数据复制到备份位置时,它会写入本地集群中的缓存以及远程集群中的缓存。借助同步策略,Data Grid 会在返回前等待两个写入操作完成。
如果备份操作失败,您可以控制 Data Grid 如何处理对本地集群中的缓存的写入。Data Grid 可以执行以下操作:
- 忽略失败的备份,静默继续写入本地集群。
- 记录警告消息或抛出异常并继续写入本地集群。
- 使用自定义逻辑处理失败的备份操作。
同步备份还支持两阶段提交,带有参与最佳事务的缓存。备份的第一个阶段会获得锁定。第二个阶段将提交修改。
具有跨站点复制的两个阶段提交对性能有显著影响,因为它需要跨网络有两个往返。
异步策略
当 Data Grid 将数据复制到备份位置时,在写入本地缓存前,它不会等待操作完成。
异步备份操作和写入本地缓存相互独立。如果备份操作失败,对本地缓存的写入操作将继续,且不会发生异常。当发生这种情况时,Data Grid 也重试写操作,直到远程集群与跨站点视图断开连接为止。
同步和异步备份
同步备份提供了跨站点的数据一致性的最强保证。如果 strategy=sync,当 cache.put () 调用返回时,您知道值是本地缓存和备份位置的最新状态。
这种一致性的权衡是性能。与异步备份相比,同步备份具有更大的延迟。
另一方面,异步备份不会给客户端请求添加延迟,使其不会影响性能。但是,如果 strategy=async,当 cache.put () 调用返回时,您不能确保备份位置中的值与本地缓存中的值相同。
1.4. 自动执行备份离线 复制链接链接已复制到粘贴板!
您可以将备份位置配置为在远程站点不可用时自动离线。这可防止 Data Grid 节点不断尝试将数据复制到离线备份位置,这会导致错误消息和消耗资源。
备份操作的超时时间
备份配置包括用于复制数据的操作的超时值。如果在超时前操作没有完成,则数据网格会将其记录为失败。
<!-- Operations to replicate data to NYC are recorded as failures if they do not complete after 10 seconds. -->
<backup site="NYC" strategy="ASYNC" timeout="10000">
<!-- Configuration for backup locations goes here. -->
</backup>
失败数
您可以指定备份位置离线前可能出现的 连续 失败数量。
例如,NYC 的以下配置会在离线前将五个操作设置为失败的操作数量:
<!-- If a cluster attempts to replicate data to NYC and five consecutive operations fail, NYC automatically goes offline. -->
<backup site="NYC" strategy="ASYNC" timeout="10000">
<take-offline after-failures="5"/>
</backup>
等待时间
您还可以指定在备份操作失败时进行站点离线前等待的时间。如果在等待时间超时前备份请求成功,则数据网格不会使站点离线。
<!-- If a cluster attempts to replicate data to NYC and there are more than five consecutive failures and 15 seconds elapse after the first failed operation, NYC automatically goes offline. -->
<backup site="NYC" strategy="ASYNC" timeout="10000">
<take-offline after-failures="5"
min-wait="15000"/>
</backup>
如果要只使用最小时间等待站点离线,请为 after-failures 属性设置负或零值。
<take-offline after-failures="-1" min-wait="10000"/>
1.5. State Transfer 复制链接链接已复制到粘贴板!
State transfer 是一个管理操作,可在站点之间同步数据。
例如,LON 脱机,NYC 开始处理客户端请求。当您重新上线时, LON 中的 Data Grid 集群与 NYC 中的集群没有相同的数据。
为确保数据在 LON 和 NYC 之间保持一致,您可以将状态从 NYC 推送到 LON。
- state transfer 是双向的。例如,您可以将状态从 NYC 推送到 LON 或从 LON 推送到 NYC。
- 将状态推送到离线站点会使它们重新上线。
状态传输只覆盖两个站点、原始站点和接收站点中存在的数据。Data Grid 不会删除数据。
例如,当 LON 和 NYC 离线时,"k2"存在于 LON 和 NYC 上。当您使 LON 重新上线时,该位置上仍然存在"k2"。如果您将状态从 NYC 推送到 LON,则传输不会影响 LON 上的"k2"。
为确保缓存的内容在状态传输后相同,请在推送状态前从接收站点的缓存中删除所有数据。
使用 clear () 方法或 CLI 中的 clearcache 命令。
状态传输不会覆盖启动推送后发生的数据的更新。
例如,LON 和 NYC 中存在 "k1,v1"。LON 脱机,因此您将状态从 NYC 推送到 LON,这会使 LON 重新上线。在状态传输完成前,客户端将"k1,v2"放在 LON 上。
在这种情况下,来自 NYC 的状态传输不会覆盖 "k1,v2",因为启动推送后该修改发生。
1.5.1. 自动状态传输 复制链接链接已复制到粘贴板!
默认情况下,您必须使用 CLI 或 JMX 或 REST 手动执行跨站点状态传输操作。
但是,在使用异步备份策略时,Data Grid 可以自动执行跨站点状态传输操作。当它检测到备份位置已恢复在线并且网络连接稳定时,Data Grid 会在备份位置之间启动双向状态传输。例如,Data Grid 同时将状态从 LON 传输到 NYC 和 NYC 到 LON。
为了避免临时网络断开触发状态传输操作,备份位置必须满足两个条件才能离线。备份位置的状态必须脱机,并且不能包含在 JGroups RELAY2 的跨站点视图中。
参考
1.6. 跨站点的客户端连接 复制链接链接已复制到粘贴板!
客户端可以在 Active/Passive 或 Active/Active 配置中写入 Data Grid 集群。
Active/Passive
下图演示了主动/被动,其中 Data Grid 只处理一个站点的客户端请求:
在前面的镜像中:
- 客户端连接到 LON 上的 Data Grid 集群。
- 客户端将 "k1" 写入缓存。
- LON、"n1" 的站点主设备发送请求,以将"k1"复制到位于 NYC、"nA"的站点 master。
通过主动/被动,NYC 提供数据冗余。如果 LON 的 Data Grid 集群因任何原因而离线,客户端就可以开始向 NYC 发送请求。当您使 LON 恢复在线时,您可以将数据与 NYC 同步,然后将客户端切回到 LON。
Active/Active
下图显示了在两个站点处理客户端请求的 Active/Active :
在前面的镜像中:
- 客户端 A 连接到 LON 上的 Data Grid 集群。
- 客户端 A 将 "k1" 写入缓存。
- 客户端 B 连接到位于 NYC 的 Data Grid 集群。
- 客户端 B 将"k2"写入缓存。
- LON 和 NYC 的站点 master 发送请求,以便"k1"复制到 NYC,"k2"复制到 LON。
通过 Active/Active NYC 和 LON 在处理客户端请求时将数据复制到远程缓存。如果 NYC 或 LON 离线,客户端可以开始向在线站点发送请求。然后,您可以使离线站点重新上线,将状态推送到同步数据,并根据需要切换客户端。
备份策略
使用 Active/Active 配置时,您应该始终使用异步备份策略(strategy=async)。
如果多个客户端尝试同时写入同一条目,并且备份策略是同步的(strategy=sync),则会出现死锁。但是,如果两个站点都访问不同的数据集,您可以使用同步备份策略,在这种情况下,不会出现并发写入的死锁风险。
1.6.1. 并发写和冲突条目 复制链接链接已复制到粘贴板!
如果客户端同时写入同一条目,但在不同的站点上,可能会发生冲突的条目,并带有 Active/Active 站点配置。
例如,当客户端 B 写入 NYC 中的 "k1" 时,客户端 A 写入 LON 中的 "k1"。在这种情况下,"k1" 在 LON 中与 NYC 中的值不同。在进行复制后,不能保证哪个站点存在"k1"的值。
为确保数据一致性,Data Grid 使用向量时钟算法在备份操作过程中检测冲突的条目,如下例所示:
LON NYC
k1=(n/a) 0,0 0,0
k1=2 1,0 --> 1,0 k1=2
k1=3 1,1 <-- 1,1 k1=3
k1=5 2,1 1,2 k1=8
--> 2,1 (conflict)
(conflict) 1,2 <--
向量时钟是与每个写入条目递增的时间戳元数据。在前面的示例中,0 代表 "k1" 上向量时钟的初始值。
客户端将 "k1=2" 置于 LON 中,向量时钟为 1,0,数据网格复制到 NYC。然后,客户端将 "k1=3" 置于 NYC 中,并将向量时钟更新为 1,1,后者的数据网格复制到 LON。
但是,如果客户端同时将"k1=5"置于 LON 中,则客户端会将 "k1=8" 置于 NYC 中,则数据网格检测到冲突条目,因为 "k1" 的向量值在 LON 和 NYC 之间不严格更大或更少。
当找到冲突的条目时,Data Grid 使用 Java compareTo (String anotherString) 方法来比较站点名称。要确定哪个键具有优先级,Data Grid 选择不适合其他的站点名称。名为 AAA 的站点的键优先于名为 AAB 的站点的密钥,以此类推。
在同一示例后,为了解决"k1"的冲突,Data Grid 使用源自 LON 的 "k1" 的值。这会在 Data Grid 解析冲突并复制值后,在 LON 和 NYC 中都生成 "k1=5"。
在站点名称前加上数字作为代表解析冲突条目的优先级顺序的简单方法;例如,1LON 和 2NYC。
Data Grid 仅对异步备份策略(strategy=async)执行冲突解析。但是,您不应该使用带有 Active/Active 配置的同步备份策略,因为并发写入会导致死锁。
冲突解析算法
除了 XSiteEntryMergePolicy SPI 外,Data Grid 提供了不同的算法来解决冲突,可让您实现自定义冲突解析策略。
除了使用字典比较的默认冲突解析策略外,您还可以使用 Data Grid 冲突解析算法来:
- 始终删除冲突的条目。
- 发生写/删除冲突时保留写操作。
- 当发生写/删除冲突时删除条目。
在 org.infinispan.xsite.spi.XSiteMergePolicy enum 中查找所有可用的算法及其描述。
1.7. 使用跨站点复制过期 复制链接链接已复制到粘贴板!
过期会根据时间删除缓存条目。Data Grid 提供两种方法为条目配置过期:
Lifespan-
设置条目可以存在的最大时间。
当您使用跨站点复制设置生命周期时,Data Grid 集群将条目独立于远程站点过期。 max-idle-
根据给定时间段内的读取或写入操作,指定条目可以存在的时长。
当您使用跨站点复制设置max-idle时,Data Grid 集群发送 touch 命令,以使用远程站点协调空闲的超时值。
在跨站点部署中使用最大闲置过期可能会影响性能,因为额外的处理可以保持 max-idle 值同步,意味着一些操作需要更长的时间才能完成。
第 2 章 为跨站点复制配置数据网格 复制链接链接已复制到粘贴板!
配置 Data Grid 以跨站点复制数据,首先设置集群传输,以便数据网格集群可以相互发现,站点 master 可以进行通信。然后,您将备份位置添加到 Data Grid 配置中的缓存定义中。
2.1. 为跨站点复制配置集群传输 复制链接链接已复制到粘贴板!
将 JGroups RELAY2 添加到您的传输层,以便数据网格集群可以与备份位置通信。
流程
-
打开
infinispan.xml进行编辑。 - 将 RELAY2 协议添加到 JGroups 堆栈。
配置 Data Grid 集群传输以使用堆栈。
<infinispan> <jgroups> <!-- Extends the default UDP stack. --> <stack name="xsite" extends="udp"> <!-- Adds RELAY2 for cross-site replication. --> <!-- Names the local site as LON. --> <!-- Specifies 1000 nodes as the maximum number of site masters. --> <relay.RELAY2 site="LON" xmlns="urn:org:jgroups" max_site_masters="1000"/> <!-- Uses the default TCP stack for inter-cluster communication. --> <!-- Names all sites that act as backup locations. --> <remote-sites default-stack="tcp"> <remote-site name="LON"/> <remote-site name="NYC"/> </remote-sites> </stack> </jgroups> <cache-container name="default" statistics="true"> <!-- Use the "xsite" stack for cluster transport. --> <transport cluster="${cluster.name}" stack="xsite"/> </cache-container> </infinispan>-
保存并关闭
infinispan.xml。
2.1.1. JGroups RELAY2 Stacks 复制链接链接已复制到粘贴板!
Data Grid 集群使用 JGroups RELAY2 进行集群内部发现和通信。
<jgroups>
<!-- Uses the default JGroups UDP stack for intra-cluster traffic. -->
<stack name="xsite" extends="udp">
<!-- Adds RELAY2 to the stack for inter-cluster transport. -->
<!-- Names the local site. Data in caches from the local site is replicated to backup locations. -->
<!-- Configures a maximum of 1000 site masters for the local cluster. -->
<relay.RELAY2 xmlns="urn:org:jgroups"
site="LON"
max_site_masters="1000"/>
<!-- Specifies all site names and uses the default JGroups TCP stack for inter-cluster transport. -->
<remote-sites default-stack="tcp">
<!-- Names all sites that participate in cross-site replication. -->
<remote-site name="LON"/>
<remote-site name="NYC"/>
</remote-sites>
</stack>
</jgroups>
设置 max_site_masters >= Data Grid 集群中的节点数,以实现使用备份请求的最佳性能。
2.1.2. 自定义 JGroups RELAY2 Stacks 复制链接链接已复制到粘贴板!
以下配置添加了扩展默认 TCP 堆栈的自定义 RELAY2 堆栈:
<jgroups>
<!-- Uses TCPPING instead of MPING for discovery. -->
<stack name="relay-global" extends="tcp">
<MPING stack.combine="REMOVE"/>
<TCPPING initial_hosts="192.0.2.0[7800]"
stack.combine="INSERT_AFTER"
stack.position="TCP"/>
</stack>
<!-- Extends the default UDP stack with RELAY2. -->
<!-- Specifies RELAY2 properties. -->
<stack name="xsite" extends="udp">
<relay.RELAY2 site="LON" xmlns="urn:org:jgroups"
max_site_masters="10"
can_become_site_master="true"/>
<remote-sites default-stack="relay-global">
<remote-site name="LON"/>
<remote-site name="NYC"/>
</remote-sites>
</stack>
</jgroups>
您还可以引用外部定义的 JGroups 堆栈文件,例如:
<infinispan>
<jgroups>
<stack-file name="relay-global" path="jgroups-relay.xml"/>
</jgroups>
<cache-container default-cache="replicatedCache">
<transport stack="relay-global" />
<replicated-cache name="replicatedCache"/>
</cache-container>
</infinispan>
其中 jgroups-relay.xml 引用 JGroups 堆栈文件,例如:
<config xmlns="urn:org:jgroups"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/jgroups-4.1.xsd">
<!-- Use TCP for inter-cluster transport. -->
<TCP bind_addr="127.0.0.1"
bind_port="7200"
port_range="30"
thread_pool.min_threads="0"
thread_pool.max_threads="8"
thread_pool.keep_alive_time="5000"
/>
<!-- Use TCPPING for inter-cluster discovery. -->
<TCPPING timeout="3000"
initial_hosts="127.0.0.1[7200]"
port_range="3"
ergonomics="false"/>
<!-- Provide other JGroups stack configuration as required. -->
</config>
2.2. 向缓存添加备份位置 复制链接链接已复制到粘贴板!
指定远程站点的名称,以便 Data Grid 可将数据备份到这些位置。
流程
-
将
backup元素添加到缓存定义中。 使用
backup元素指定每个远程站点的名称。例如,在 LON 配置中,将 NYC 指定为远程站点。
- 重复前面的步骤,以便每个站点都是所有其他站点的备份。例如,您无法在不添加 NYC 作为 LON 的备份的情况下将 LON 添加为 NYC 的备份。
缓存配置可能会在站点之间有所不同,并使用不同的备份策略。Data Grid 基于缓存名称复制数据。
LON中的 "customers" 配置示例
<replicated-cache name="customers">
<backups>
<backup site="NYC" strategy="ASYNC" />
</backups>
</replicated-cache>
NYC中的"customers"配置示例
<distributed-cache name="customers">
<backups>
<backup site="LON" strategy="SYNC" />
</backups>
</distributed-cache>
2.3. 使用不同名称备份缓存 复制链接链接已复制到粘贴板!
默认情况下,Data Grid 在具有相同名称的缓存之间复制数据。
流程
-
使用
backup-for将远程站点中的数据复制到本地站点上不同名称的缓存中。
例如,以下配置会将 LON 上的"customers"缓存备份到 NYC 上的"eu-customers"缓存。
<distributed-cache name="eu-customers">
<backups>
<backup site="LON" strategy="SYNC" />
</backups>
<backup-for remote-cache="customers" remote-site="LON" />
</distributed-cache>
2.4. 配置跨站点状态传输 复制链接链接已复制到粘贴板!
更改跨站点状态传输设置以优化性能,并指定是否手动或自动进行操作。
流程
-
使用
<state-transfer> 配置状态传输操作。
例如,以下配置使用自定义设置自动执行跨站点状态传输:
<distributed-cache name="eu-customers">
<backups>
<backup site="LON" strategy="ASYNC">
<state-transfer chunk-size="64"
timeout="30000"
max-retries="30"
wait-time="2000"
mode="AUTO"/>
</backup>
</backups>
</distributed-cache>
2.5. 自定义冲突解析算法 复制链接链接已复制到粘贴板!
将 Data Grid 配置为使用不同的算法来解析备份位置之间的冲突条目。
流程
- 打开 Data Grid 配置以进行编辑。
-
使用 backup 元素的
merge-policy属性指定 Data Grid 算法之一或自定义实现。
使用 Data Grid 算法
在 org.infinispan.xsite.spi.XSiteMergePolicy enum 中查找所有 Data Grid 算法及其描述。
以下示例配置使用 ALWAYS_REMOVE 算法,该算法从两个站点中删除冲突条目:
<distributed-cache name="eu-customers">
<backups merge-policy="ALWAYS_REMOVE">
<backup site="LON" strategy="ASYNC"/>
</backups>
</distributed-cache>
使用自定义实现
创建自定义
XSiteEntryMergePolicy实现。public interface XSiteEntryMergePolicy<K, V> { CompletionStage<SiteEntry<V>> merge(K key, SiteEntry<V> localEntry, SiteEntry<V> remoteEntry); }将完全限定类名称指定为
merge-policy属性的值,如下例所示:<distributed-cache name="eu-customers"> <backups merge-policy="org.mycompany.MyCustomXSiteEntryMergePolicy"> <backup site="LON" strategy="ASYNC"/> </backups> </distributed-cache>
2.6. 验证跨站点视图 复制链接链接已复制到粘贴板!
为跨站点复制配置 Data Grid 后,您应该验证 Data Grid 集群是否已成功形成跨站点视图。
流程
-
检查
ISPN000439: Received new x-site view消息的日志消息。
例如,如果 LON 中的 Data Grid 集群在 NYC 中带有 Data Grid 集群的跨站点视图,它会提供以下信息:
INFO [org.infinispan.XSITE] (jgroups-5,${server.hostname}) ISPN000439: Received new x-site view: [NYC]
INFO [org.infinispan.XSITE] (jgroups-7,${server.hostname}) ISPN000439: Received new x-site view: [NYC, LON]
2.7. 为跨站点复制配置 Hot Rod 客户端 复制链接链接已复制到粘贴板!
将 Hot Rod 客户端配置为使用不同站点的 Data Grid 集群。
hotrod-client.properties
# Servers at the active site
infinispan.client.hotrod.server_list = LON_host1:11222,LON_host2:11222,LON_host3:11222
# Servers at the backup site
infinispan.client.hotrod.cluster.NYC = NYC_hostA:11222,NYC_hostB:11222,NYC_hostC:11222,NYC_hostD:11222
ConfigurationBuilder
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.addServers("LON_host1:11222;LON_host2:11222;LON_host3:11222")
.addCluster("NYC")
.addClusterNodes("NYC_hostA:11222;NYC_hostB:11222;NYC_hostC:11222;NYC_hostD:11222")
使用以下方法将 Hot Rod 客户端切换到默认集群或不同站点的集群:
-
RemoteCacheManager.switchToDefaultCluster() -
RemoteCacheManager.switchToCluster (${site.name})
第 3 章 执行跨站点复制操作 复制链接链接已复制到粘贴板!
使站点在线并脱机。将缓存状态传送到远程站点。
3.1. 使用 CLI 执行跨站点操作 复制链接链接已复制到粘贴板!
Data Grid 命令行界面可让您远程连接到 Data Grid 服务器,管理站点,并将状态传输推送到备份位置。
先决条件
- 启动 Data Grid CLI。
- 连接到正在运行的 Data Grid 集群。
3.1.1. 使备份位置离线和在线 复制链接链接已复制到粘贴板!
手动使备份位置离线,并使它们重新上线。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
site status命令检查备份位置是否在线或离线:[//containers/default]> site status --cache=cacheName --site=NYC注意--site是一个可选参数。如果没有设置,CLI 会返回所有备份位置。管理备份位置,如下所示:
使用
bring-online命令在线显示备份位置:[//containers/default]> site bring-online --cache=customers --site=NYC使用
take-offline命令使备份位置离线:[//containers/default]> site take-offline --cache=customers --site=NYC
如需更多信息和示例,请运行 help site 命令。
3.1.2. 配置跨站点状态传输模式 复制链接链接已复制到粘贴板!
当 Data Grid 检测到备份位置上线时,您可以将跨站点状态传输操作配置为自动进行。或者,您可以使用默认模式,该模式是通过 CLI 或 JMX 或 REST 手动执行状态传输。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
site命令配置状态传输模式,如下例所示:检索当前状态传输模式。
[//containers/default]> site state-transfer-mode get --cache=cacheName --site=NYC "MANUAL"- 为缓存和备份位置配置自动状态传输操作。
[//containers/default]> site state-transfer-mode set --cache=cacheName --site=NYC --mode=AUTO
运行 help site 命令以获取更多信息和示例。
3.1.3. 将状态推送到备份位置 复制链接链接已复制到粘贴板!
将缓存状态传输到远程备份位置。
流程
- 创建与 Data Grid 的 CLI 连接。
使用
site命令推送状态传输,如下例所示:[//containers/default]> site push-site-state --cache=cacheName --site=NYC
如需更多信息和示例,请运行 help site 命令。
3.2. 使用 REST API 执行跨站点操作 复制链接链接已复制到粘贴板!
Data Grid 服务器提供 REST API,允许您执行跨站点操作。
3.2.1. 获取所有备份位置的状态 复制链接链接已复制到粘贴板!
使用 GET 请求检索所有备份位置的状态。
GET /v2/caches/{cacheName}/x-site/backups/
Data Grid 以 JSON 格式为每个备份位置的状态响应,如下例所示:
{
"NYC": "online",
"LON": "offline"
}
| 值 | 描述 |
|---|---|
|
| 本地集群中的所有节点都有一个带有备份位置的跨站点视图。 |
|
| 本地集群中没有带有备份位置的跨站点视图。 |
|
| 本地集群中的某些节点具有带有备份位置的跨站点视图,本地集群中的其他节点没有跨站点视图。响应表示每个节点的状态。 |
3.2.2. 获取特定备份位置的状态 复制链接链接已复制到粘贴板!
使用 GET 请求检索备份位置的状态。
GET /v2/caches/{cacheName}/x-site/backups/{siteName}
Data Grid 以 JSON 格式通过站点中的每个节点状态进行响应,如下例所示:
{
"NodeA":"offline",
"NodeB":"online"
}
| 值 | 描述 |
|---|---|
|
| 节点在线。 |
|
| 节点离线。 |
|
| 无法检索状态。远程缓存可以在请求期间关闭或发生网络错误。 |
3.2.3. 执行备份位置离线 复制链接链接已复制到粘贴板!
通过 POST 请求和 ?action=take-offline 参数使备份位置离线。
POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=take-offline
3.2.4. 使备份位置在线 复制链接链接已复制到粘贴板!
使用 ?action=bring-online 参数在线启动备份位置。
POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=bring-online
3.2.5. 将状态推送到备份位置 复制链接链接已复制到粘贴板!
使用 ?action=start-push-state 参数将缓存状态推送到备份位置。
POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=start-push-state
3.2.6. 取消状态传输 复制链接链接已复制到粘贴板!
使用 ?action=cancel-push-state 参数取消状态传输操作。
POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=cancel-push-state
3.2.7. 获取状态传输状态 复制链接链接已复制到粘贴板!
使用 ?action=push-state-status 参数检索状态传输操作的状态。
GET /v2/caches/{cacheName}/x-site/backups?action=push-state-status
Data Grid 以 JSON 格式为每个备份位置的状态进行响应,如下例所示:
{
"NYC":"CANCELED",
"LON":"OK"
}
| 值 | 描述 |
|---|---|
|
| 状态传输到备份位置正在进行。 |
|
| 状态传输成功完成。 |
|
| 出现错误,状态为 transfer。检查日志文件。 |
|
| 状态转移取消正在进行。 |
3.2.8. 清除状态传输状态 复制链接链接已复制到粘贴板!
使用 ?action=clear-push-state-status 参数发送站点的清除状态传输状态。
POST /v2/caches/{cacheName}/x-site/local?action=clear-push-state-status
3.2.9. 修改获取离线条件 复制链接链接已复制到粘贴板!
如果满足某些条件,站点将处于离线状态。修改离线参数,以控制备份位置自动离线的时间。
流程
检查配置了
GET请求和take-offline-config参数的离线参数。GET /v2/caches/{cacheName}/x-site/backups/{siteName}/take-offline-configData Grid 响应包括
after_failures和min_wait字段,如下所示:{ "after_failures": 2, "min_wait": 1000 }修改 取
PUT请求正文中的离线参数。PUT /v2/caches/{cacheName}/x-site/backups/{siteName}/take-offline-config如果操作成功完成,服务会返回
204 (不内容)
3.2.10. 从接收站点取消状态传输 复制链接链接已复制到粘贴板!
如果两个备份位置之间的连接中断,您可以在接收推送的站点上取消状态传输。
从远程站点取消状态传输,并使用 ?action=cancel-receive-state 参数保留本地缓存的当前状态。
POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=cancel-receive-state
3.2.11. 获取备份位置状态 复制链接链接已复制到粘贴板!
使用 GET 请求,从缓存管理器检索所有备份位置的状态。
GET /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/
Data Grid 以 JSON 格式的状态响应,如下例所示:
{
"SFO-3":{
"status":"online"
},
"NYC-2":{
"status":"mixed",
"online":[
"CACHE_1"
],
"offline":[
"CACHE_2"
]
}
}
| 值 | 描述 |
|---|---|
|
| 本地集群中的所有节点都有一个带有备份位置的跨站点视图。 |
|
| 本地集群中没有带有备份位置的跨站点视图。 |
|
| 本地集群中的某些节点具有带有备份位置的跨站点视图,本地集群中的其他节点没有跨站点视图。响应表示每个节点的状态。 |
3.2.12. 执行备份位置离线 复制链接链接已复制到粘贴板!
使用 ?action=take-offline 参数使备份位置离线。
POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=take-offline
3.2.13. 使备份位置在线 复制链接链接已复制到粘贴板!
使用 ?action=bring-online 参数在线启动备份位置。
POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=bring-online
3.2.14. 检索状态传输模式 复制链接链接已复制到粘贴板!
使用 GET 请求检查状态传输模式。
GET /rest/v2/caches/{cacheName}/x-site/backups/{site}/state-transfer-mode
3.2.15. 设置状态传输模式 复制链接链接已复制到粘贴板!
使用 ?action=set 参数配置状态传输模式。
POST /rest/v2/caches/{cacheName}/x-site/backups/{site}/state-transfer-mode?action=set&mode={mode}
3.2.16. 启动状态传输 复制链接链接已复制到粘贴板!
使用 ?action=start-push-state 参数将所有缓存的状态推送到远程站点。
POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=start-push-state
3.2.17. 取消状态传输 复制链接链接已复制到粘贴板!
使用 ?action=cancel-push-state 参数取消持续状态传输操作。
POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=cancel-push-state
3.3. 使用 JMX 执行跨站点操作 复制链接链接已复制到粘贴板!
Data Grid 提供 JMX 工具来执行跨站点操作,如推送状态传输和使站点上线。
3.3.1. 配置数据网格以注册 JMX MBeans 复制链接链接已复制到粘贴板!
Data Grid 可以注册可以用来收集统计信息并执行管理操作的 JMX MBeans。您必须单独启用 JMX 的统计,否则 Data Grid 都为所有统计属性提供 0 值。
流程
修改缓存容器配置以以下方法之一启用 JMX:
-
声明:在缓存容器中添加 <
jmx enabled="true"/> 元素。 -
programmatic: 调用
.jmx ().enable ()方法。
声明
<cache-container>
<jmx enabled="true" />
</cache-container>
programmatic
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.jmx().enable()
.build();
3.3.2. 执行跨站点操作 复制链接链接已复制到粘贴板!
通过 JMX 客户端执行跨站点操作。
先决条件
- 配置数据网格以注册 JMX MBeans
流程
- 使用任何 JMX 客户端连接到 Data Grid。
从以下 MBeans 调用操作:
-
XSiteAdmin为缓存提供跨站点操作。 GlobalXSiteAdminOperations为缓存管理器提供跨站点操作。例如,若要使站点重新上线,可调用
bringSiteOnline (siteName)。
-
有关可用跨站点操作的详情,请查看 Data Grid JMX 组件 文档。
第 4 章 监控全局数据网格集群并进行故障排除 复制链接链接已复制到粘贴板!
Data Grid 通过 JMX 或 Data Grid 服务器的 /metrics 端点为跨站点复制操作提供统计信息。
跨站点复制统计信息在缓存级别提供,因此您必须明确启用缓存的统计信息。同样,如果要通过 JMX 收集统计信息,您必须配置 Data Grid 以注册 MBeans。
Data Grid 还包括 org.infinispan.XSITE 日志记录类别,以便您可以监控和排除网络和状态传输操作中的常见问题。
4.1. 启用 Data Grid Statistics 复制链接链接已复制到粘贴板!
配置 Data Grid 以导出缓存管理器和缓存的统计信息。
流程
修改您的配置,以以下方法之一启用 Data Grid 统计:
-
declarative: 添加
statistics="true"属性。 -
programmatic :调用
.statistics ()方法。
声明
<!-- Enables statistics for the Cache Manager. -->
<cache-container statistics="true">
<!-- Enables statistics for the named cache. -->
<local-cache name="mycache" statistics="true"/>
</cache-container>
programmatic
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
//Enables statistics for the Cache Manager.
.cacheContainer().statistics(true)
.build();
Configuration config = new ConfigurationBuilder()
//Enables statistics for the named cache.
.statistics().enable()
.build();
4.2. 配置数据网格指标 复制链接链接已复制到粘贴板!
配置 Data Grid,以通过 指标端点 导出量表和直方图。
流程
-
根据需要
在指标配置中打开或关闭量表和直方图。
声明
<!-- Computes and collects statistics for the Cache Manager. -->
<cache-container statistics="true">
<!-- Exports collected statistics as gauge and histogram metrics. -->
<metrics gauges="true" histograms="true" />
</cache-container>
programmatic
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
//Computes and collects statistics for the Cache Manager.
.statistics().enable()
//Exports collected statistics as gauge and histogram metrics.
.metrics().gauges(true).histograms(true)
.build();
4.2.1. 收集数据网格指标 复制链接链接已复制到粘贴板!
使用 Prometheus 等监控工具来收集数据网格指标。
先决条件
-
启用统计信息。如果没有启用统计信息,Data Grid 为指标提供
0和-1值。 - (可选)启用直方图。默认情况下,Data Grid 生成量表,但不生成直方图。
流程
获取 Prometheus (OpenMetrics)格式的指标:
$ curl -v http://localhost:11222/metrics以 MicroProfile JSON 格式获取指标:
$ curl --header "Accept: application/json" http://localhost:11222/metrics
后续步骤
配置监控应用程序以收集数据网格指标。例如,将以下内容添加到 prometheus.yml 中:
static_configs:
- targets: ['localhost:11222']
参考
- Prometheus 配置
- 启用 Data Grid Statistics
4.3. 配置数据网格以注册 JMX MBeans 复制链接链接已复制到粘贴板!
Data Grid 可以注册可以用来收集统计信息并执行管理操作的 JMX MBeans。您必须单独启用 JMX 的统计,否则 Data Grid 都为所有统计属性提供 0 值。
流程
修改缓存容器配置以以下方法之一启用 JMX:
-
声明:在缓存容器中添加 <
jmx enabled="true"/> 元素。 -
programmatic: 调用
.jmx ().enable ()方法。
声明
<cache-container>
<jmx enabled="true" />
</cache-container>
programmatic
GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
.jmx().enable()
.build();
4.3.1. 用于跨站点复制的 JMX MBeans 复制链接链接已复制到粘贴板!
Data Grid 为跨站点复制提供 JMX MBeans,允许您收集统计信息并执行远程操作。
org.infinispan:type=Cache 组件提供以下 JMX MBeans:
-
XSiteAdmin会公开适用于特定缓存实例的跨站点操作。 -
StateTransferManager为状态传输操作提供统计信息。 -
InboundInvocationHandler为异步和同步跨站点请求提供统计信息和操作。
org.infinispan:type=CacheManager 组件包括以下 JMX MBean:
-
GlobalXSiteAdminOperations会公开适用于缓存容器中的所有缓存的跨站点操作。
有关 JMX MBeans 以及可用操作和统计的描述的详情,请查看 Data Grid JMX 组件 文档。
4.4. 收集日志和故障排除跨站点复制 复制链接链接已复制到粘贴板!
诊断和解决与数据网格跨站点复制相关的问题。使用 Data Grid 命令行界面(CLI)在运行时调整日志级别,并执行跨站点故障排除。
流程
-
在
$RHDG_HOME中打开一个终端。 - 创建 Data Grid CLI 连接。
如果需要,调整运行时日志记录级别以捕获 DEBUG 消息。
例如,以下命令为 org.infinispan.XSITE 类别启用 DEBUG 日志消息:
[//containers/default]> logging set --level=DEBUG org.infinispan.XSITE然后,您可以检查 Data Grid 日志文件,以了解
${rhdg.server.root}/log目录中的跨站点消息。-
使用
site命令查看备份位置的状态并执行故障排除。
例如,检查使用 "LON" 作为备份位置的 "customers" 缓存的状态:
[//containers/default]> site status --cache=customers
{
"LON" : "online"
}
使用 Data Grid CLI 进行故障排除的另一个场景是在状态传输操作期间在备份位置之间的网络连接中断。
如果出现这种情况,接收状态传输的 Data Grid 集群会持续等待操作完成。在这种情况下,您应该取消到接收站点的状态传输,以将其恢复为正常操作状态。
例如,取消 "NYC" 的状态传输,如下所示:
[//containers/default]> site cancel-receive-state --cache=mycache --site=NYC`
4.4.1. 跨站点日志消息 复制链接链接已复制到粘贴板!
查找与跨站点复制相关的日志消息的用户操作。
| 日志级别 | 标识符 | 消息 | 描述 |
|---|---|---|---|
| DEBUG | ISPN000400 | 怀疑节点 null | 当数据网格无法访问备份位置时,会输出此消息。确保站点在线并检查网络状态。 |
| INFO | ISPN000439 | 收到新的 x-site 视图:${site.name} | 当站点加入并离开全局集群时,Data Grid 会打印此消息。 |
| INFO | ISPN100005 | 站点 ${site.name} 在线。 | 当网站上线时,Data Grid 会打印此消息。 |
| INFO | ISPN100006 | 站点 ${site.name} 脱机。 | 当站点离线时,Data Grid 会打印此消息。如果您没有手动使站点离线,则此消息可能表示发生了故障。检查网络状态,并尝试使站点重新上线。 |
| WARN | ISPN000202 | 将缓存 ${cache.name} 的数据备份到站点 ${site.name} 的问题: | 当发生状态传输操作的问题以及例外时,Data Grid 会输出此消息。如有必要,调整数据网格日志记录来获取更为精细的日志记录信息。 |
| WARN | ISPN000289 | 无法将 X-Site 状态块发送到 ${site.name}。 | 表示 Data Grid 在状态传输操作过程中无法传输批处理缓存条目。确保站点在线并检查网络状态。 |
| WARN | ISPN000291 | 无法应用 X-Site 状态块。 | 表示 Data Grid 在状态传输操作过程中无法应用批处理缓存条目。确保站点在线并检查网络状态。 |
| WARN | ISPN000322 | 无法将 x-site 状态转移至站点 ${site.name} | 表示 Data Grid 无法将状态传输操作恢复到备份位置。确保站点在线并检查网络状态。 |
| ERROR | ISPN000477 | 无法为站点 ${site.name} 执行操作 ${operation.name} | 表示 Data Grid 无法在备份位置成功完成操作。如有必要,调整数据网格日志记录来获取更为精细的日志记录信息。 |
| FATAL | ISPN000449 | XSite 状态传输超时必须高于或等于 1 (一)。 |
|
| FATAL | ISPN000450 | XSite 状态传输等待时间在重试之间必须大于或等于 1 (一)。 |
当 |
| FATAL | ISPN000576 | 跨站点复制不适用于本地缓存。 | 跨站点复制无法用于本地缓存模式。从本地缓存定义中删除备份配置,或使用分布式或复制缓存模式。 |