跨站点复制的数据网格指南


Red Hat Data Grid 8.2

在全局 Data Grid 集群中备份数据

Red Hat Customer Content Services

摘要

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 集群配置为 LONNYC 的备份位置。

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>
Copy to Clipboard Toggle word wrap

失败数

您可以指定备份位置离线前可能出现的 连续 失败数量。

例如,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>
Copy to Clipboard Toggle word wrap

等待时间

您还可以指定在备份操作失败时进行站点离线前等待的时间。如果在等待时间超时前备份请求成功,则数据网格不会使站点离线。

<!-- 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>
Copy to Clipboard Toggle word wrap
提示

如果要只使用最小时间等待站点离线,请为 after-failures 属性设置负或零值。

<take-offline after-failures="-1" min-wait="10000"/>
Copy to Clipboard Toggle word wrap

1.5. State Transfer

State transfer 是一个管理操作,可在站点之间同步数据。

例如,LON 脱机,NYC 开始处理客户端请求。当您重新上线时, LON 中的 Data Grid 集群与 NYC 中的集群没有相同的数据。

为确保数据在 LONNYC 之间保持一致,您可以将状态从 NYC 推送到 LON

  • state transfer 是双向的。例如,您可以将状态从 NYC 推送到 LON 或从 LON 推送到 NYC
  • 将状态推送到离线站点会使它们重新上线。
  • 状态传输只覆盖两个站点、原始站点和接收站点中存在的数据。Data Grid 不会删除数据。

    例如,当 LONNYC 离线时,"k2"存在于 LONNYC 上。当您使 LON 重新上线时,该位置上仍然存在"k2"。如果您将状态从 NYC 推送到 LON,则传输不会影响 LON 上的"k2"。

提示

为确保缓存的内容在状态传输后相同,请在推送状态前从接收站点的缓存中删除所有数据。

使用 clear () 方法或 CLI 中的 clearcache 命令。

  • 状态传输不会覆盖启动推送后发生的数据的更新。

    例如,LONNYC 中存在 "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 传输到 NYCNYCLON

注意

为了避免临时网络断开触发状态传输操作,备份位置必须满足两个条件才能离线。备份位置的状态必须脱机,并且不能包含在 JGroups RELAY2 的跨站点视图中。

1.6. 跨站点的客户端连接

客户端可以在 Active/Passive 或 Active/Active 配置中写入 Data Grid 集群。

Active/Passive

下图演示了主动/被动,其中 Data Grid 只处理一个站点的客户端请求:

在前面的镜像中:

  1. 客户端连接到 LON 上的 Data Grid 集群。
  2. 客户端将 "k1" 写入缓存。
  3. LON、"n1" 的站点主设备发送请求,以将"k1"复制到位于 NYC、"nA"的站点 master。

通过主动/被动,NYC 提供数据冗余。如果 LON 的 Data Grid 集群因任何原因而离线,客户端就可以开始向 NYC 发送请求。当您使 LON 恢复在线时,您可以将数据与 NYC 同步,然后将客户端切回到 LON

Active/Active

下图显示了在两个站点处理客户端请求的 Active/Active :

在前面的镜像中:

  1. 客户端 A 连接到 LON 上的 Data Grid 集群。
  2. 客户端 A 将 "k1" 写入缓存。
  3. 客户端 B 连接到位于 NYC 的 Data Grid 集群。
  4. 客户端 B 将"k2"写入缓存。
  5. LONNYC 的站点 master 发送请求,以便"k1"复制到 NYC,"k2"复制到 LON

通过 Active/Active NYCLON 在处理客户端请求时将数据复制到远程缓存。如果 NYCLON 离线,客户端可以开始向在线站点发送请求。然后,您可以使离线站点重新上线,将状态推送到同步数据,并根据需要切换客户端。

备份策略
重要

使用 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  <--
Copy to Clipboard Toggle word wrap

向量时钟是与每个写入条目递增的时间戳元数据。在前面的示例中,0 代表 "k1" 上向量时钟的初始值。

客户端将 "k1=2" 置于 LON 中,向量时钟为 1,0,数据网格复制到 NYC。然后,客户端将 "k1=3" 置于 NYC 中,并将向量时钟更新为 1,1,后者的数据网格复制到 LON

但是,如果客户端同时将"k1=5"置于 LON 中,则客户端会将 "k1=8" 置于 NYC 中,则数据网格检测到冲突条目,因为 "k1" 的向量值在 LONNYC 之间不严格更大或更少。

当找到冲突的条目时,Data Grid 使用 Java compareTo (String anotherString) 方法来比较站点名称。要确定哪个键具有优先级,Data Grid 选择不适合其他的站点名称。名为 AAA 的站点的键优先于名为 AAB 的站点的密钥,以此类推。

在同一示例后,为了解决"k1"的冲突,Data Grid 使用源自 LON 的 "k1" 的值。这会在 Data Grid 解析冲突并复制值后,在 LONNYC 中都生成 "k1=5"。

提示

在站点名称前加上数字作为代表解析冲突条目的优先级顺序的简单方法;例如,1LON2NYC

注意

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 添加到您的传输层,以便数据网格集群可以与备份位置通信。

流程

  1. 打开 infinispan.xml 进行编辑。
  2. 将 RELAY2 协议添加到 JGroups 堆栈。
  3. 配置 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>
    Copy to Clipboard Toggle word wrap
  4. 保存并关闭 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>
Copy to Clipboard Toggle word wrap
提示

设置 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>
Copy to Clipboard Toggle word wrap

您还可以引用外部定义的 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>
Copy to Clipboard Toggle word wrap

其中 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>
Copy to Clipboard Toggle word wrap

2.2. 向缓存添加备份位置

指定远程站点的名称,以便 Data Grid 可将数据备份到这些位置。

流程

  1. backup 元素添加到缓存定义中。
  2. 使用 backup 元素指定每个远程站点的名称。

    例如,在 LON 配置中,将 NYC 指定为远程站点。

  3. 重复前面的步骤,以便每个站点都是所有其他站点的备份。例如,您无法在不添加 NYC 作为 LON 的备份的情况下将 LON 添加为 NYC 的备份。
注意

缓存配置可能会在站点之间有所不同,并使用不同的备份策略。Data Grid 基于缓存名称复制数据。

LON中的 "customers" 配置示例

<replicated-cache name="customers">
  <backups>
    <backup site="NYC" strategy="ASYNC" />
  </backups>
</replicated-cache>
Copy to Clipboard Toggle word wrap

NYC中的"customers"配置示例

<distributed-cache name="customers">
  <backups>
    <backup site="LON" strategy="SYNC" />
  </backups>
</distributed-cache>
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

2.4. 配置跨站点状态传输

更改跨站点状态传输设置以优化性能,并指定是否手动或自动进行操作。

流程

  • 使用 <state-transfer& gt; 配置状态传输操作。

例如,以下配置使用自定义设置自动执行跨站点状态传输:

<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>
Copy to Clipboard Toggle word wrap

2.5. 自定义冲突解析算法

将 Data Grid 配置为使用不同的算法来解析备份位置之间的冲突条目。

流程

  1. 打开 Data Grid 配置以进行编辑。
  2. 使用 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>
Copy to Clipboard Toggle word wrap

使用自定义实现

  1. 创建自定义 XSiteEntryMergePolicy 实现。

    public interface XSiteEntryMergePolicy<K, V> {
       CompletionStage<SiteEntry<V>> merge(K key, SiteEntry<V> localEntry, SiteEntry<V> remoteEntry);
    }
    Copy to Clipboard Toggle word wrap
  2. 将完全限定类名称指定为 merge-policy 属性的值,如下例所示:

    <distributed-cache name="eu-customers">
       <backups merge-policy="org.mycompany.MyCustomXSiteEntryMergePolicy">
          <backup site="LON" strategy="ASYNC"/>
       </backups>
    </distributed-cache>
    Copy to Clipboard Toggle word wrap

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]
Copy to Clipboard Toggle word wrap

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
Copy to Clipboard Toggle word wrap

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")
Copy to Clipboard Toggle word wrap

提示

使用以下方法将 Hot Rod 客户端切换到默认集群或不同站点的集群:

  • RemoteCacheManager.switchToDefaultCluster()
  • RemoteCacheManager.switchToCluster (${site.name})

第 3 章 执行跨站点复制操作

使站点在线并脱机。将缓存状态传送到远程站点。

3.1. 使用 CLI 执行跨站点操作

Data Grid 命令行界面可让您远程连接到 Data Grid 服务器,管理站点,并将状态传输推送到备份位置。

先决条件

  • 启动 Data Grid CLI。
  • 连接到正在运行的 Data Grid 集群。

3.1.1. 使备份位置离线和在线

手动使备份位置离线,并使它们重新上线。

流程

  1. 创建与 Data Grid 的 CLI 连接。
  2. 使用 site status 命令检查备份位置是否在线或离线:

    [//containers/default]> site status --cache=cacheName --site=NYC
    Copy to Clipboard Toggle word wrap
    注意

    --site 是一个可选参数。如果没有设置,CLI 会返回所有备份位置。

  3. 管理备份位置,如下所示:

    • 使用 bring-online 命令在线显示备份位置:

      [//containers/default]> site bring-online --cache=customers --site=NYC
      Copy to Clipboard Toggle word wrap
    • 使用 take-offline 命令使备份位置离线:

      [//containers/default]> site take-offline --cache=customers --site=NYC
      Copy to Clipboard Toggle word wrap

如需更多信息和示例,请运行 help site 命令。

3.1.2. 配置跨站点状态传输模式

当 Data Grid 检测到备份位置上线时,您可以将跨站点状态传输操作配置为自动进行。或者,您可以使用默认模式,该模式是通过 CLI 或 JMX 或 REST 手动执行状态传输。

流程

  1. 创建与 Data Grid 的 CLI 连接。
  2. 使用 site 命令配置状态传输模式,如下例所示:

    • 检索当前状态传输模式。

      [//containers/default]> site state-transfer-mode get --cache=cacheName --site=NYC
      "MANUAL"
      Copy to Clipboard Toggle word wrap
    • 为缓存和备份位置配置自动状态传输操作。
[//containers/default]> site state-transfer-mode set --cache=cacheName --site=NYC --mode=AUTO
Copy to Clipboard Toggle word wrap
提示

运行 help site 命令以获取更多信息和示例。

3.1.3. 将状态推送到备份位置

将缓存状态传输到远程备份位置。

流程

  1. 创建与 Data Grid 的 CLI 连接。
  2. 使用 site 命令推送状态传输,如下例所示:

    [//containers/default]> site push-site-state --cache=cacheName --site=NYC
    Copy to Clipboard Toggle word wrap

如需更多信息和示例,请运行 help site 命令。

3.2. 使用 REST API 执行跨站点操作

Data Grid 服务器提供 REST API,允许您执行跨站点操作。

3.2.1. 获取所有备份位置的状态

使用 GET 请求检索所有备份位置的状态。

GET /v2/caches/{cacheName}/x-site/backups/
Copy to Clipboard Toggle word wrap

Data Grid 以 JSON 格式为每个备份位置的状态响应,如下例所示:

{
  "NYC": "online",
  "LON": "offline"
}
Copy to Clipboard Toggle word wrap
Expand
表 3.1. 返回的状态
描述

online

本地集群中的所有节点都有一个带有备份位置的跨站点视图。

离线

本地集群中没有带有备份位置的跨站点视图。

mixed

本地集群中的某些节点具有带有备份位置的跨站点视图,本地集群中的其他节点没有跨站点视图。响应表示每个节点的状态。

3.2.2. 获取特定备份位置的状态

使用 GET 请求检索备份位置的状态。

GET /v2/caches/{cacheName}/x-site/backups/{siteName}
Copy to Clipboard Toggle word wrap

Data Grid 以 JSON 格式通过站点中的每个节点状态进行响应,如下例所示:

{
  "NodeA":"offline",
  "NodeB":"online"
}
Copy to Clipboard Toggle word wrap
Expand
表 3.2. 返回的状态
描述

online

节点在线。

离线

节点离线。

失败

无法检索状态。远程缓存可以在请求期间关闭或发生网络错误。

3.2.3. 执行备份位置离线

通过 POST 请求和 ?action=take-offline 参数使备份位置离线。

POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=take-offline
Copy to Clipboard Toggle word wrap

3.2.4. 使备份位置在线

使用 ?action=bring-online 参数在线启动备份位置。

POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=bring-online
Copy to Clipboard Toggle word wrap

3.2.5. 将状态推送到备份位置

使用 ?action=start-push-state 参数将缓存状态推送到备份位置。

POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=start-push-state
Copy to Clipboard Toggle word wrap

3.2.6. 取消状态传输

使用 ?action=cancel-push-state 参数取消状态传输操作。

POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=cancel-push-state
Copy to Clipboard Toggle word wrap

3.2.7. 获取状态传输状态

使用 ?action=push-state-status 参数检索状态传输操作的状态。

GET /v2/caches/{cacheName}/x-site/backups?action=push-state-status
Copy to Clipboard Toggle word wrap

Data Grid 以 JSON 格式为每个备份位置的状态进行响应,如下例所示:

{
   "NYC":"CANCELED",
   "LON":"OK"
}
Copy to Clipboard Toggle word wrap
Expand
表 3.3. 返回的状态
描述

发送

状态传输到备份位置正在进行。

确定

状态传输成功完成。

ERROR

出现错误,状态为 transfer。检查日志文件。

取消

状态转移取消正在进行。

3.2.8. 清除状态传输状态

使用 ?action=clear-push-state-status 参数发送站点的清除状态传输状态。

POST /v2/caches/{cacheName}/x-site/local?action=clear-push-state-status
Copy to Clipboard Toggle word wrap

3.2.9. 修改获取离线条件

如果满足某些条件,站点将处于离线状态。修改离线参数,以控制备份位置自动离线的时间。

流程

  1. 检查配置了 GET 请求和 take-offline-config 参数的离线参数。

    GET /v2/caches/{cacheName}/x-site/backups/{siteName}/take-offline-config
    Copy to Clipboard Toggle word wrap

    Data Grid 响应包括 after_failuresmin_wait 字段,如下所示:

    {
      "after_failures": 2,
      "min_wait": 1000
    }
    Copy to Clipboard Toggle word wrap
  2. 修改 取 PUT 请求正文中的离线参数。

    PUT /v2/caches/{cacheName}/x-site/backups/{siteName}/take-offline-config
    Copy to Clipboard Toggle word wrap

    如果操作成功完成,服务会返回 204 (不内容)

3.2.10. 从接收站点取消状态传输

如果两个备份位置之间的连接中断,您可以在接收推送的站点上取消状态传输。

从远程站点取消状态传输,并使用 ?action=cancel-receive-state 参数保留本地缓存的当前状态。

POST /v2/caches/{cacheName}/x-site/backups/{siteName}?action=cancel-receive-state
Copy to Clipboard Toggle word wrap

3.2.11. 获取备份位置状态

使用 GET 请求,从缓存管理器检索所有备份位置的状态。

GET /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/
Copy to Clipboard Toggle word wrap

Data Grid 以 JSON 格式的状态响应,如下例所示:

{
   "SFO-3":{
      "status":"online"
   },
   "NYC-2":{
      "status":"mixed",
      "online":[
         "CACHE_1"
      ],
      "offline":[
         "CACHE_2"
      ]
   }
}
Copy to Clipboard Toggle word wrap
Expand
表 3.4. 返回的状态
描述

online

本地集群中的所有节点都有一个带有备份位置的跨站点视图。

离线

本地集群中没有带有备份位置的跨站点视图。

mixed

本地集群中的某些节点具有带有备份位置的跨站点视图,本地集群中的其他节点没有跨站点视图。响应表示每个节点的状态。

3.2.12. 执行备份位置离线

使用 ?action=take-offline 参数使备份位置离线。

POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=take-offline
Copy to Clipboard Toggle word wrap

3.2.13. 使备份位置在线

使用 ?action=bring-online 参数在线启动备份位置。

POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=bring-online
Copy to Clipboard Toggle word wrap

3.2.14. 检索状态传输模式

使用 GET 请求检查状态传输模式。

GET /rest/v2/caches/{cacheName}/x-site/backups/{site}/state-transfer-mode
Copy to Clipboard Toggle word wrap

3.2.15. 设置状态传输模式

使用 ?action=set 参数配置状态传输模式。

POST /rest/v2/caches/{cacheName}/x-site/backups/{site}/state-transfer-mode?action=set&mode={mode}
Copy to Clipboard Toggle word wrap

3.2.16. 启动状态传输

使用 ?action=start-push-state 参数将所有缓存的状态推送到远程站点。

POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=start-push-state
Copy to Clipboard Toggle word wrap

3.2.17. 取消状态传输

使用 ?action=cancel-push-state 参数取消持续状态传输操作。

POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=cancel-push-state
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

programmatic

GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
  .jmx().enable()
  .build();
Copy to Clipboard Toggle word wrap

3.3.2. 执行跨站点操作

通过 JMX 客户端执行跨站点操作。

先决条件

  • 配置数据网格以注册 JMX MBeans

流程

  1. 使用任何 JMX 客户端连接到 Data Grid。
  2. 从以下 MBeans 调用操作:

    • XSiteAdmin 为缓存提供跨站点操作。
    • GlobalXSiteAdminOperations 为缓存管理器提供跨站点操作。

      例如,若要使站点重新上线,可调用 bringSiteOnline (siteName)

有关可用跨站点操作的详情,请查看 Data Grid JMX 组件 文档。

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>
Copy to Clipboard Toggle word wrap

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();
Copy to Clipboard Toggle word wrap

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>
Copy to Clipboard Toggle word wrap

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();
Copy to Clipboard Toggle word wrap

4.2.1. 收集数据网格指标

使用 Prometheus 等监控工具来收集数据网格指标。

先决条件

  • 启用统计信息。如果没有启用统计信息,Data Grid 为指标提供 0-1 值。
  • (可选)启用直方图。默认情况下,Data Grid 生成量表,但不生成直方图。

流程

  • 获取 Prometheus (OpenMetrics)格式的指标:

    $ curl -v http://localhost:11222/metrics
    Copy to Clipboard Toggle word wrap
  • 以 MicroProfile JSON 格式获取指标:

    $ curl --header "Accept: application/json" http://localhost:11222/metrics
    Copy to Clipboard Toggle word wrap

后续步骤

配置监控应用程序以收集数据网格指标。例如,将以下内容添加到 prometheus.yml 中:

static_configs:
    - targets: ['localhost:11222']
Copy to Clipboard Toggle word wrap

参考

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>
Copy to Clipboard Toggle word wrap

programmatic

GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
  .jmx().enable()
  .build();
Copy to Clipboard Toggle word wrap

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)在运行时调整日志级别,并执行跨站点故障排除。

流程

  1. $RHDG_HOME 中打开一个终端。
  2. 创建 Data Grid CLI 连接。
  3. 如果需要,调整运行时日志记录级别以捕获 DEBUG 消息。

    例如,以下命令为 org.infinispan.XSITE 类别启用 DEBUG 日志消息:

    [//containers/default]> logging set --level=DEBUG org.infinispan.XSITE
    Copy to Clipboard Toggle word wrap

    然后,您可以检查 Data Grid 日志文件,以了解 ${rhdg.server.root}/log 目录中的跨站点消息。

  4. 使用 site 命令查看备份位置的状态并执行故障排除。

例如,检查使用 "LON" 作为备份位置的 "customers" 缓存的状态:

[//containers/default]> site status --cache=customers
{
  "LON" : "online"
}
Copy to Clipboard Toggle word wrap

使用 Data Grid CLI 进行故障排除的另一个场景是在状态传输操作期间在备份位置之间的网络连接中断。

如果出现这种情况,接收状态传输的 Data Grid 集群会持续等待操作完成。在这种情况下,您应该取消到接收站点的状态传输,以将其恢复为正常操作状态。

例如,取消 "NYC" 的状态传输,如下所示:

[//containers/default]> site cancel-receive-state --cache=mycache --site=NYC`
Copy to Clipboard Toggle word wrap

4.4.1. 跨站点日志消息

查找与跨站点复制相关的日志消息的用户操作。

Expand
日志级别标识符消息描述

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 (一)。

timeout 属性的值为 0 或负数时的结果。在缓存定义的状态传输配置中,至少为 timeout 属性指定值 1

FATAL

ISPN000450

XSite 状态传输等待时间在重试之间必须大于或等于 1 (一)。

wait-time 属性的值为 0 或负数时,结果。在缓存定义的 status 传输配置中至少为 wait-time 属性指定一个值 1

FATAL

ISPN000576

跨站点复制不适用于本地缓存。

跨站点复制无法用于本地缓存模式。从本地缓存定义中删除备份配置,或使用分布式或复制缓存模式。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat