kubectl -n keycloak exec -it pods/infinispan-0 -- ./bin/cli.sh --trustall --connect https://127.0.0.1:11222
当两个站点的 Infinispan 集群状态断开连接,并且缓存内容不同步时使用此方法。 例如,在脑裂之后或当一个站点为了维护而离线时执行此操作。
在此过程结束时,辅助站点上的数据已被丢弃,并被活动站点的数据替换。 离线站点中的所有缓存都将被清除,以防止无效的缓存内容。
在本指南的上下文中,site-a
是当前活动的站点,而 site-b
是一个离线站点,它不属于 AWS Global Accelerator EndpointGroup,因此不接收用户请求。
传输状态可能会影响 Infinispan 集群的性能,例如增加响应时间和/或资源使用率。 |
第一个步骤是从离线站点删除陈旧数据。
登录到离线站点。
关闭 Keycloak。 这将清除所有 Keycloak 缓存,并防止 Keycloak 状态与 Infinispan 不同步。
当使用 Keycloak Operator 部署 Keycloak 时,将 Keycloak Custom Resource 中的 Keycloak 实例数更改为 0。
使用 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 进行连接。 |
运行以下命令禁用从离线站点到活动站点的复制。 这可以防止清除请求到达活动站点并删除所有正确的缓存数据。
site take-offline --all-caches --site=site-a
{
"authenticationSessions" : "ok",
"work" : "ok",
"loginFailures" : "ok",
"actionTokens" : "ok"
}
检查复制状态是否为 offline
。
site status --all-caches --site=site-a
{
"status" : "offline"
}
如果状态不是 offline
,请重复上一步。
确保复制状态为 offline ,否则清除数据将清除两个站点。 |
使用以下命令清除离线站点中的所有缓存数据
clearcache actionTokens
clearcache authenticationSessions
clearcache loginFailures
clearcache work
这些命令不打印任何输出。
重新启用从离线站点到活动站点的跨站点复制。
site bring-online --all-caches --site=site-a
{
"authenticationSessions" : "ok",
"work" : "ok",
"loginFailures" : "ok",
"actionTokens" : "ok"
}
检查复制状态是否为 online
。
site status --all-caches --site=site-a
{
"status" : "online"
}
现在我们准备好将状态从活动站点传输到离线站点。
登录到您的活动站点
使用 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 进行连接。 |
触发从活动站点到离线站点的状态传输。
site push-site-state --all-caches --site=site-b
{
"authenticationSessions" : "ok",
"work" : "ok",
"loginFailures" : "ok",
"actionTokens" : "ok"
}
检查所有缓存的复制状态是否为 online
。
site status --all-caches --site=site-b
{
"status" : "online"
}
通过检查所有缓存的 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
使用以下命令清除/重置状态传输状态
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
登录到您的辅助站点。
启动 Keycloak。
当使用 Keycloak Operator 部署 Keycloak 时,将 Keycloak Custom Resource 中的 Keycloak 实例数更改为原始值。
一旦两个站点同步完成,就可以按照 使站点上线 指南中的步骤,安全地将之前离线的站点添加回 Global Accelerator EndpointGroup。