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 自定义资源中的 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 部署 HA 的 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 部署 HA 的 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 自定义资源中的 Keycloak 实例数量更改为原始值。
无需执行任何操作。
在两个站点同步后,可以按照 将站点上线 指南中的步骤,将先前离线的站点添加回 Global Accelerator EndpointGroup。