Kubernetes 错误消息和解决方法
本文描述了在 Kubernetes 上运行 Keycloak 基准测试套件时常见的错误消息及其解决方法。
Keycloak 消息 ERROR: Failed to obtain JDBC connection
- 背景
-
当使用关系数据库(例如 PostgreSQL 或 CockroachDB)运行 Keycloak 时,可能会出现此错误消息。
类似的其它错误消息
-
无法获取 JDBC 连接
-
抱歉,获取超时!
这可能发生在启动期间,然后启动失败。也可能在负载测试期间发生,当 Keycloak 创建新的数据库连接时。
-
- 原因
-
数据库要么未启动,要么当前设置中数据库连接数已耗尽。
- 解决方法
-
-
确保数据库正在运行。
-
确保数据库没有重启,例如,由于内存不足问题。
-
确保数据库连接总数不超过数据库的最大连接数。 有关详细信息,请参阅 Keycloak 部署配置选项
KC_DB_*
。 -
确保 Keycloak 没有尝试使用超过配置的最大连接数。
-
- 警告
-
-
在高负载下,数据库连接数通常是系统的约束。 Keycloak 遇到“抱歉,获取超时!”并向调用者返回 HTTP 5xx 代码是一种合理的负载削减机制。 有关详细信息,请参阅在生产环境中运行。
-
Keycloak 消息 prepared transactions are disabled
- 完整消息
-
org.postgresql.util.PSQLException: ERROR: prepared transactions are disabled. Hint: Set max_prepared_transactions to a nonzero value.
- 背景
-
当事务管理器或 Quarkus 在一个请求中处理多个事务,并且其中一个事务属于 PostgreSQL 数据库时,会发生这种情况。
- 原因
-
一旦 Quarkus 的事务管理器捆绑了两个事务,它会在准备好所有事务后发送提交之前,向数据库发送
PREPARE TRANSACTION
命令。 为了使其工作,数据库需要设置max_prepared_transactions
参数。 - 效果
-
针对 PostgreSQL 数据库的所有事务都将失败。
- 解决方法
-
将参数
-c max_prepared_transactions=xxx
传递给数据库。 对于 Kubernetes 设置中的容器化数据库,这已在postgres-deployment.yaml
中配置。
Keycloak 消息 ARJUNA012225: cannot access root of object store
- 完整消息
-
ARJUNA012225: FileSystemStore::setupStore - cannot access root of object store: ObjectStore/ShadowNoFileLockStore/defaultStore/
- 背景
-
当事务管理器或 Quarkus 在一个请求中处理多个事务并尝试本地持久化事务状态时,会发生这种情况。
- 原因
-
Keycloak 的工作目录在 Keycloak 容器中不可写,因此写入状态失败。
- 效果
-
针对参与 JTA 事务的任何存储的所有事务都不会完成,因此 Keycloak 将无法启动。
- 解决方法
-
通过环境变量
QUARKUS_TRANSACTION_MANAGER_OBJECT_STORE_DIRECTORY
传入一个可写的文件夹。 这已在上游 Keycloak 21.1 版本中修复,参见 keycloak#19384。