同步站点

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

何时使用此过程

当两个站点的 Infinispan 集群状态断开连接,并且缓存内容不同步时使用此方法。 例如,在脑裂之后或当一个站点为了维护而离线时执行此操作。

在此过程结束时,辅助站点上的数据已被丢弃,并被活动站点的数据替换。 离线站点中的所有缓存都将被清除,以防止无效的缓存内容。

步骤

Infinispan 集群

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

传输状态可能会影响 Infinispan 集群的性能,例如增加响应时间和/或资源使用率。

第一个步骤是从离线站点删除陈旧数据。

  1. 登录到离线站点。

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

    当使用 Keycloak Operator 部署 Keycloak 时,将 Keycloak Custom Resource 中的 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 部署 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 部署 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 Custom Resource 中的 Keycloak 实例数更改为原始值。

AWS Aurora 数据库

无需操作。

AWS Global Accelerator

一旦两个站点同步完成,就可以按照 使站点上线 指南中的步骤,安全地将之前离线的站点添加回 Global Accelerator EndpointGroup。

进一步阅读

在此页