使用 Amazon 区域 Aurora PostgreSQL 存储

Amazon 区域 Aurora PostgreSQL 实例可以用作 Keycloak 在单站点或多站点配置中的基础数据库。目前,这仅在 ROSA 上的 Keycloak 部署中受支持。

部署 Aurora 集群

可以通过执行 ./provision/aws/rds/aurora_create.sh 并使用以下环境变量来将 Aurora 集群部署到您选择的 AWS 区域

AURORA_CLUSTER= # The name of the Aurora cluster
AURORA_REGION= # The AWS region hosting the Aurora cluster
AURORA_INSTANCES= # The number of Aurora db instances to create in the AURORA_REGION, defaults to 1

这将创建 Aurora 集群所需的 VPC、子网和路由,以及该集群的 $AURORA_INSTANCES 个 Aurora 实例。要创建多 AZ 数据库,请创建两个实例。该脚本目前不支持为创建的实例创建超过两个 AZ,所有额外的实例将分布在脚本支持的两个 AZ 中。该脚本将等待直到集群和所有实例都可用。如果集群已存在,则会显示一条指示此情况的消息,并且脚本将以退出代码 1 失败。

指定的 AURORA_CLUSTER 必须在每个 AWS 区域内唯一,并遵循为 "DB 集群标识符" 概述的约定。

将 ROSA 集群连接到 Aurora 集群

为了遵循安全最佳实践,Aurora 集群不会通过互联网公开暴露。相反,我们需要在 ROSA 集群 VPC 和 Aurora 集群 VPC 之间建立 对等连接

要配置这种连接,请运行 ./provision/aws/rds/aurora_create_peering_connection.sh 并使用以下环境变量

AURORA_CLUSTER= # The name of the Aurora cluster
AURORA_REGION= # The AWS region hosting the Aurora cluster
CLUSTER_NAME= # The name of the ROSA cluster to establish the peering connectin with
AWS_REGION= # The AWS region hosting the ROSA cluster

此项目中的脚本确保所有 Aurora 和 ROSA 集群都配置了不重叠的机器 CIDR。

启用 Aurora PostgreSQL 存储

使用以下设置配置 Aurora 存储

KC_DATABASE=aurora-postgres
KC_DATABASE_URL=aws.example.route.com

KC_DATABASE_URL 应该是 Aurora 写入实例的公开端点。这可以通过执行 ./provision/aws/rds/aurora_endpoint.sh 脚本并使用以下环境变量来获取

AURORA_CLUSTER= # The name of the Aurora cluster instance
AURORA_REGION= # The AWS region hosting the Aurora cluster

有关所有配置选项的列表,请参阅 自定义部署

调试 Aurora PostgreSQL

Aurora DB 集群只能被已建立对等连接的 ROSA 集群访问,因此所有调试连接也必须来自这些集群。连接 psql 到集群的一个简单方法是执行以下操作

kubectl run -i --tty --rm debug --image=postgres:15 --restart=Never -n <namespace> -- psql -h <....rds.amazonaws.com> -d keycloak -U keycloak

这将在 Keycloak 部署命名空间中创建一个 Pod,并建立与 Aurora 集群的连接。首次连接时将出现密码提示,您应该使用密钥 keycloak-db-secret 中定义的密码。退出 Pod shell 后,Pod 将被删除。

要删除数据库的内容,请运行以下命令。然后重新启动所有数据中心中的所有 Keycloak 节点。

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

将 ROSA 集群与单个 Aurora 集群断开连接

要删除 ROSA 集群和特定 Aurora 集群之间的对等连接,请执行 ./provision/aws/rds/aurora_delete_peering_connection.sh 并使用以下环境变量

AURORA_CLUSTER= # The name of the Aurora cluster instance
AURORA_REGION= # The AWS region hosting the Aurora cluster
CLUSTER_NAME= # The name of the ROSA cluster to remove the peering connection from
AWS_REGION= # The AWS region hosting the ROSA cluster

将 ROSA 集群与所有 Aurora 集群断开连接

要删除给定区域中 ROSA 和 Aurora VPC 之间的所有对等连接,请执行 ./provision/aws/rds/aurora_delete_peering_connection.sh 并使用以下环境变量

AURORA_REGION= # The AWS region hosting the Aurora clusters
CLUSTER_NAME= # The name of the ROSA cluster to remove the peering connection from
AWS_REGION= # The AWS region hosting the ROSA cluster

删除 Aurora 集群

在删除 Aurora 集群之前,首先必须删除与 ROSA 集群建立的所有对等连接。

要删除 Aurora 集群,请执行 ./provision/aws/rds/aurora_delete.sh 并使用以下环境变量

AURORA_CLUSTER= # The name of the Aurora cluster instance
AURORA_REGION= # The AWS region hosting the Aurora cluster