站点同步

本文档描述了将离线站点与在线站点同步所需的步骤。

何时使用此步骤

当两个站点的 Infinispan 集群状态断开连接,并且缓存内容不同步时使用此步骤。例如,在发生脑裂或站点下线维护后执行此步骤。

在执行完此步骤后,辅助站点上的数据将被丢弃,并由活动站点上的数据替换。离线站点中的所有缓存都将被清除,以防止无效的缓存内容。

步骤

Infinispan 集群

在本指南的上下文中,site-a 是当前活动的站点,site-b 是一个离线站点,它不是 AWS Global Accelerator EndpointGroup 的一部分,因此不接收用户请求。

传输状态可能会通过增加响应时间和/或资源使用量来影响 Infinispan 集群性能。

第一个步骤是从离线站点中删除过时的数据。

  1. 登录到离线站点。

  2. 关闭 Keycloak。这将清除所有 Keycloak 缓存,并防止 Keycloak 状态与 Infinispan 不同步。

    使用 Keycloak Operator 部署 Keycloak 时,将 Keycloak 自定义资源中的 Keycloak 实例数量更改为 0。

  3. 使用 Infinispan CLI 工具连接到 Infinispan 集群

    命令
    kubectl -n keycloak exec -it pods/infinispan-0 -- ./bin/cli.sh --trustall --connect https://127.0.0.1:11222

    它会要求输入 Infinispan 集群的用户名和密码。这些凭据是在 使用 Infinispan Operator 部署 HA 的 Infinispan 指南中配置凭据部分设置的。

    输出
    Username: developer
    Password:
    [infinispan-0-29897@ISPN//containers/default]>
    Pod 名称取决于 Infinispan CR 中定义的集群名称。可以使用 Infinispan 集群中的任何 Pod 建立连接。
  4. 通过运行以下命令,禁用从离线站点到活动站点的复制。它会阻止清除请求到达活动站点并删除所有正确的缓存数据。

    命令
    site take-offline --all-caches --site=site-a
    输出
    {
      "authenticationSessions" : "ok",
      "work" : "ok",
      "loginFailures" : "ok",
      "actionTokens" : "ok"
    }
  5. 检查复制状态是否为 offline

    命令
    site status --all-caches --site=site-a
    输出
    {
      "status" : "offline"
    }

    如果状态不是 offline,请重复上一步。

    确保复制为 offline,否则清除数据将清除两个站点。
  6. 使用以下命令清除离线站点中的所有缓存数据

    命令
    clearcache actionTokens
    clearcache authenticationSessions
    clearcache loginFailures
    clearcache work

    这些命令不会输出任何内容。

  7. 重新启用从离线站点到活动站点的跨站点复制。

    命令
    site bring-online --all-caches --site=site-a
    输出
    {
      "authenticationSessions" : "ok",
      "work" : "ok",
      "loginFailures" : "ok",
      "actionTokens" : "ok"
    }
  8. 检查复制状态是否为 online

    命令
    site status --all-caches --site=site-a
    输出
    {
      "status" : "online"
    }

现在我们已准备好将状态从活动站点传输到离线站点。

  1. 登录到您的活动站点

  2. 使用 Infinispan CLI 工具连接到 Infinispan 集群

    命令
    kubectl -n keycloak exec -it pods/infinispan-0 -- ./bin/cli.sh --trustall --connect https://127.0.0.1:11222

    它会要求输入 Infinispan 集群的用户名和密码。这些凭据是在 使用 Infinispan Operator 部署 HA 的 Infinispan 指南中配置凭据部分设置的。

    输出
    Username: developer
    Password:
    [infinispan-0-29897@ISPN//containers/default]>
    Pod 名称取决于 Infinispan CR 中定义的集群名称。可以使用 Infinispan 集群中的任何 Pod 建立连接。
  3. 触发从活动站点到离线站点的状态传输。

    命令
    site push-site-state --all-caches --site=site-b
    输出
    {
      "authenticationSessions" : "ok",
      "work" : "ok",
      "loginFailures" : "ok",
      "actionTokens" : "ok"
    }
  4. 检查所有缓存的复制状态是否为 online

    命令
    site status --all-caches --site=site-b
    输出
    {
      "status" : "online"
    }
  5. 通过检查 push-site-status 命令的所有缓存输出,等待状态传输完成。

    命令
    site push-site-status --cache=actionTokens
    site push-site-status --cache=authenticationSessions
    site push-site-status --cache=loginFailures
    site push-site-status --cache=work
    输出
    {
      "site-b" : "OK"
    }
    {
      "site-b" : "OK"
    }
    {
      "site-b" : "OK"
    }
    {
      "site-b" : "OK"
    }

    查看 跨站点文档中的本节 中的表格,了解可能的狀態值。

    如果报告错误,请重复特定缓存的状态传输。

    命令
    site push-site-state --cache=<cache-name> --site=site-b
  6. 使用以下命令清除/重置状态传输状态

    命令
    site clear-push-site-status --cache=actionTokens
    site clear-push-site-status --cache=authenticationSessions
    site clear-push-site-status --cache=loginFailures
    site clear-push-site-status --cache=work
    输出
    "ok"
    "ok"
    "ok"
    "ok"

现在状态已在离线站点中可用,可以重新启动 Keycloak

  1. 登录到您的辅助站点。

  2. 启动 Keycloak。

    使用 Keycloak Operator 部署 Keycloak 时,将 Keycloak 自定义资源中的 Keycloak 实例数量更改为原始值。

AWS Aurora 数据库

无需执行任何操作。

AWS Global Accelerator

在两个站点同步后,可以按照 将站点上线 指南中的步骤,将先前离线的站点添加回 Global Accelerator EndpointGroup。

在本页上