数据库重启后Keycloak无法连接外部数据库?
Keycloak not able to connect external DB after database restart?
我们正在使用 Keycloak 4.2。1.Final 我们注意到一些奇怪的 issue.Keycloak 正在使用外部数据库 [Maria DB]
如何重现该问题?
- 安装并运行 Keycloak。
- 使用外部数据库存储数据,我们使用mariadb。
- Keycloak up/running,MariaDB up 和 运行ning
- 现在停止 Mariadb 服务
systemctl stop mariadb
然后启动 mariadb systemctl start mariadb
并检查 keycloak 是否工作
- 尝试登录 keycloak https://localhost:8666/auth 并检查它不允许登录。
- 在服务器日志中会显示连接已关闭
解决方案 1 -
重新启动 Mariadb 后,还必须启动 Keycloak 服务
service keycloak restart
然后 Keycloak 将开始正确响应。
但这不是一个可行的解决方案,我正在为此寻找合适的解决方案。有人遇到过或检查过此类问题吗?
最后通过修改 Keycloak.You 的 Stanalone.xml 文件解决了这个问题,可以在这个位置找到文件 /opt/keycloak/standalone/configuration/standalone.xml
,你必须在文件 [=15] 中添加以下行=]
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>15000</background-validation-millis>
</validation>
添加上述更改后,应将此行添加到 <datasource/>
标记内 <datasource/>
将如下所示
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mariadb://localhost:3306/DBName?autoReconnect=true</connection-url>
<driver>mariadb</driver>
<security>
<user-name>user</user-name>
<password>${VAULT::datasource::default-password::1}</password>
</security>
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>15000</background-validation-millis>
</validation>
</datasource>
添加验证检查后,Keycloak会以给定的时间间隔在后台继续检查与数据库的连接。因此,即使连接隧道断开,它也会重新连接到数据库。
如果没有数据源中的验证,一旦连接断开,它不会重新连接。这就是为什么我们需要添加
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>15000</background-validation-millis>
</validation>
希望能澄清您的疑问。
我们正在使用 Keycloak 4.2。1.Final 我们注意到一些奇怪的 issue.Keycloak 正在使用外部数据库 [Maria DB]
如何重现该问题?
- 安装并运行 Keycloak。
- 使用外部数据库存储数据,我们使用mariadb。
- Keycloak up/running,MariaDB up 和 运行ning
- 现在停止 Mariadb 服务
systemctl stop mariadb
然后启动 mariadbsystemctl start mariadb
并检查 keycloak 是否工作 - 尝试登录 keycloak https://localhost:8666/auth 并检查它不允许登录。
- 在服务器日志中会显示连接已关闭
解决方案 1 -
重新启动 Mariadb 后,还必须启动 Keycloak 服务
service keycloak restart
然后 Keycloak 将开始正确响应。
但这不是一个可行的解决方案,我正在为此寻找合适的解决方案。有人遇到过或检查过此类问题吗?
最后通过修改 Keycloak.You 的 Stanalone.xml 文件解决了这个问题,可以在这个位置找到文件 /opt/keycloak/standalone/configuration/standalone.xml
,你必须在文件 [=15] 中添加以下行=]
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>15000</background-validation-millis>
</validation>
添加上述更改后,应将此行添加到 <datasource/>
标记内 <datasource/>
将如下所示
<datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mariadb://localhost:3306/DBName?autoReconnect=true</connection-url>
<driver>mariadb</driver>
<security>
<user-name>user</user-name>
<password>${VAULT::datasource::default-password::1}</password>
</security>
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>15000</background-validation-millis>
</validation>
</datasource>
添加验证检查后,Keycloak会以给定的时间间隔在后台继续检查与数据库的连接。因此,即使连接隧道断开,它也会重新连接到数据库。 如果没有数据源中的验证,一旦连接断开,它不会重新连接。这就是为什么我们需要添加
<validation>
<check-valid-connection-sql>select 1</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>15000</background-validation-millis>
</validation>
希望能澄清您的疑问。