搜索

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

download PDF
Red Hat Data Grid 8.1

在全局 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

1.3.1. 同步备份

当 Data Grid 将数据复制到备份位置时,它会在写入本地缓存前等待操作完成。

如果备份操作失败,您可以控制 Data Grid 如何处理对本地缓存的写入。例如,您可以配置 Data Grid 来尝试中止本地写入,并在备份到远程站点时抛出异常。

同步备份还支持两阶段提交,带有参与最佳事务的缓存。备份的第一个阶段会获得锁定。第二个阶段将提交修改。

重要

具有跨站点复制的两个阶段提交对性能有显著影响,因为它需要跨网络有两个往返。

1.3.2. 异步备份

当 Data Grid 将数据复制到备份位置时,在写入本地缓存前,它不会等待操作完成。

异步备份操作和写入本地缓存相互独立。如果备份操作失败,对本地缓存的写入操作将继续,且不会发生异常。

1.3.3. 同步与同步备份

同步备份提供了跨站点的数据一致性的最强保证。如果 strategy=sync,当 cache.put () 调用返回时,您知道值是本地缓存和备份位置的最新状态。

这种一致性的权衡是性能。与异步备份相比,同步备份具有更大的延迟。

另一方面,异步备份不会给客户端请求添加延迟,使其不会影响性能。但是,如果 strategy=async,当 cache.put () 调用返回时,您不能确保备份位置中的值与本地缓存中的值相同。

1.4. 自动执行备份离线

您可以将备份位置配置为在远程站点不可用时自动离线。这可防止 Data Grid 节点不断尝试将数据复制到离线备份位置,这会导致错误消息和消耗资源。

备份操作的超时时间

备份配置包括用于复制数据的操作的超时值。如果在超时发生前操作没有完成,则 Infinispan 会将它们记录为失败。

<backup site="NYC" strategy="ASYNC" timeout="10000"> 1
	...
</backup>
1
如果数据在 10 秒后没有完成,则会记录将数据复制到 NYC 的操作。

失败数

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

例如,NYC 的以下配置会在离线前将五个操作设置为失败的操作数量:

<backup site="NYC" strategy="ASYNC" timeout="10000">
	<take-offline after-failures="5"/> 1
</backup>
1
如果集群尝试将数据复制到 NYC 和五个连续操作失败,则数据网格会自动使备份离线。

等待时间

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

<backup site="NYC" strategy="ASYNC" timeout="10000">
	<take-offline after-failures="5"
                min-wait="15000"/> 1
</backup>
1
如果集群尝试将数据复制到 NYC,且在第一个失败操作后有五个连续的故障和 15 秒,则数据网格会自动进行备份离线。
提示

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

<take-offline after-failures="-1" min-wait="10000"/>

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 () 方法。

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

    例如,LONNYC 中存在 "k1,v1"。LON 脱机,因此您将状态从 NYC 推送到 LON,这会使 LON 重新上线。在状态传输完成前,客户端将"k1,v2"放在 LON 上。

    在这种情况下,来自 NYC 的状态传输不会覆盖 "k1,v2",因为启动推送后该修改发生。

参考

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 离线,客户端可以开始向在线站点发送请求。然后,您可以使离线站点重新上线,将状态推送到同步数据,并根据需要切换客户端。

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" 的向量值在 LONNYC 之间不严格更大或更少。

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

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

提示

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

1.7. 过期和跨站点复制

Data Grid 过期控制条目保留在缓存中的时间。

  • 生命周期过期 适用于跨站点复制。当条目达到最大寿命时,Data Grid 会独立于远程站点过期它们。
  • max-idle 过期时间不适用于跨站点复制。Data Grid 无法确定缓存条目是否到达远程站点中的空闲超时。

第 2 章 为跨站点复制配置数据网格

配置 Data Grid 以跨站点复制数据,首先设置集群传输,以便数据网格集群可以相互发现,站点 master 可以进行通信。然后,您将备份位置添加到 Data Grid 配置中的缓存定义中。

2.1. 为跨站点复制配置集群传输

将 JGroups RELAY2 添加到您的传输层,以便数据网格集群可以与备份位置通信。

流程

  1. 打开 infinispan.xml 进行编辑。
  2. 将 RELAY2 协议添加到 JGroups 堆栈,例如:

    <jgroups>
       <stack name="xsite" extends="udp">
          <relay.RELAY2 site="LON" xmlns="urn:org:jgroups" max_site_masters="1000"/>
          <remote-sites default-stack="tcp">
             <remote-site name="LON"/>
             <remote-site name="NYC"/>
          </remote-sites>
       </stack>
    </jgroups>
  3. 将 Data Grid 集群传输配置为使用堆栈,如下例所示:

    <cache-container name="default" statistics="true">
      <transport cluster="${cluster.name}" stack="xsite"/>
    </cache-container>
  4. 保存并关闭 infinispan.xml

2.1.1. JGroups RELAY2 Stacks

Data Grid 集群使用 JGroups RELAY2 进行集群内部发现和通信。

<jgroups>
   <stack name="xsite" 1
          extends="udp"> 2
      <relay.RELAY2 xmlns="urn:org:jgroups" 3
                    site="LON" 4
                    max_site_masters="1000"/> 5
      <remote-sites default-stack="tcp"> 6
         <remote-site name="LON"/> 7
         <remote-site name="NYC"/>
      </remote-sites>
   </stack>
</jgroups>
1
定义一个名为"xsite"的堆栈,用于声明用于数据网格集群传输的协议。
2
将默认的 JGroups UDP 堆栈用于集群内流量。
3
RELAY2 添加到堆栈中以进行集群内部传输。
4
将本地站点命名为。Data Grid 将缓存中的数据从此站点复制到备份位置。
5
为本地集群配置最多 1000 个站点 master。您应该设置 max_site_masters >= Data Grid 集群中的节点数,以使用备份请求获得最佳性能。
6
指定所有站点名称,并使用默认的 JGroups TCP 堆栈进行集群间传输。
7
将每个远程站点命名为备份位置。

2.1.2. 自定义 JGroups RELAY2 Stacks

<jgroups>
   <stack name="relay-global" extends="tcp"> 1
         <MPING stack.combine="REMOVE"/>
         <TCPPING initial_hosts="192.0.2.0[7800]" stack.combine="INSERT_AFTER" stack.position="TCP"/>
    </stack>
   <stack name="xsite" extends="udp">
      <relay.RELAY2 site="LON" xmlns="urn:org:jgroups"
                    max_site_masters="10" 2
                    can_become_site_master="true"/>
      <remote-sites default-stack="relay-global">
         <remote-site name="LON"/>
         <remote-site name="NYC"/>
      </remote-sites>
   </stack>
</jgroups>
1
添加扩展 TCP 堆栈并使用 TCPPING 而不是 MPING 进行发现的自定义 RELAY2 堆栈。
2
设置站点 master 的最大数量,并选择性地指定额外的 RELAY2 属性。请参阅 JGroups RELAY2 文档。

您还可以引用外部定义的 JGroups 堆栈文件,如下所示:

<stack-file name="relay-global" path="jgroups-relay.xml"/>

在前面的配置 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.2.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 可将数据备份到这些位置。

流程

  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>

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" />
</replicated-cache>

2.4. 验证跨站点视图

为跨站点复制配置 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.5. 为跨站点复制配置 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. 使备份位置离线和在线

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

流程

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

    //containers/default]> site status --cache=cacheName --site=NYC
    注意

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

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

    • 使用 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. 将状态推送到备份位置

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

流程

  1. 创建与 Data Grid 的 CLI 连接。
  2. 使用 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.1. 返回的状态
描述

online

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

离线

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

mixed

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

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

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

GET /v2/caches/{cacheName}/x-site/backups/{siteName}

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

{
  "NodeA":"offline",
  "NodeB":"online"
}
表 3.2. 返回的状态
描述

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"
}
表 3.3. 返回的状态
描述

发送

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

确定

状态传输成功完成。

ERROR

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

取消

状态转移取消正在进行。

3.2.8. 清除状态传输状态

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

POST /v2/caches/{cacheName}/x-site/local?action=clear-push-state-status

3.2.9. 修改获取离线条件

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

流程

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

    GET /v2/caches/{cacheName}/x-site/backups/{siteName}/take-offline-config

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

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

    PUT /v2/caches/{cacheName}/x-site/backups/{siteName}/take-offline-config

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.4. 返回的状态
描述

online

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

离线

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

mixed

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

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. 启动状态传输

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

POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=start-push-state

3.2.15. 取消状态传输

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

POST /rest/v2/cache-managers/{cacheManagerName}/x-site/backups/{siteName}?action=cancel-push-state

3.3. 使用 JMX 执行跨站点操作

网格为来自跨站点操作(如推送状态转移和使站点上线)提供 JMX 工具。

3.3.1. 配置数据网格以注册 JMX MBeans

Data Grid 可以注册可以用来收集统计信息并执行管理操作的 JMX MBeans。但是,您必须将统计信息单独启用到 JMX,否则 Data Grid 都为所有统计属性提供 0 值。

流程

  • 以声明性方式或以编程方式启用 JMX。

声明性

<cache-container>
  <jmx enabled="true" /> 1
</cache-container>

1
注册数据网格 JMX MBeans.

以编程方式

GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
  .jmx().enable() 1
  .build();

1
注册数据网格 JMX MBeans.

3.3.2. 执行跨站点操作

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

先决条件

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

流程

  1. 使用任何 JMX 客户端连接到 Data Grid。
  2. 从以下 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 服务器为缓存管理器启用统计信息。

流程

  • 以声明性方式或以编程方式启用统计信息。

声明性

<cache-container statistics="true"> 1
  <local-cache name="mycache" statistics="true"/> 2
</cache-container>

1
为 Cache Manager 启用统计信息。
2
为指定缓存启用统计信息。

以编程方式

GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
  .cacheContainer().statistics(true) 1
  .build();

 ...

Configuration config = new ConfigurationBuilder()
  .statistics().enable() 2
  .build();

1
为 Cache Manager 启用统计信息。
2
为指定缓存启用统计信息。

4.2. 启用 Data Grid Metrics

配置 Data Grid 以导出量表和直方图。

流程

  • 以声明性方式或以编程方式配置指标。

声明性

<cache-container statistics="true"> 1
  <metrics gauges="true" histograms="true" /> 2
</cache-container>

1
计算和收集有关缓存管理器的统计信息。
2
将收集的统计信息导出为量表和直方图指标。

以编程方式

GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
  .statistics().enable() 1
  .metrics().gauges(true).histograms(true) 2
  .build();

1
计算和收集有关缓存管理器的统计信息。
2
将收集的统计信息导出为量表和直方图指标。

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']

参考

4.3. 配置数据网格以注册 JMX MBeans

Data Grid 可以注册可以用来收集统计信息并执行管理操作的 JMX MBeans。但是,您必须将统计信息单独启用到 JMX,否则 Data Grid 都为所有统计属性提供 0 值。

流程

  • 以声明性方式或以编程方式启用 JMX。

声明性

<cache-container>
  <jmx enabled="true" /> 1
</cache-container>

1
注册数据网格 JMX MBeans.

以编程方式

GlobalConfiguration globalConfig = new GlobalConfigurationBuilder()
  .jmx().enable() 1
  .build();

1
注册数据网格 JMX MBeans.

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

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

  4. 使用 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 (一)。

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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.