14.2. 使用 JDBC 锁定系统


概述

JDBC 锁定机制主要用于在独立的机器上存在红帽 Fuse 实例的故障转移部署。

在这种情况下,主实例在托管在数据库上的锁定表中保存锁定。如果主实例丢失了锁定,则等待次要进程可以访问锁定表,并完全启动其容器。

将 JDBC 驱动程序添加到 classpath

在 JDBC 锁定系统中,JDBC 驱动程序需要位于主/次要设置中各个实例的类路径上。在 classpath 中添加 JDBC 驱动程序,如下所示:

  1. 将 JDBC 驱动程序 JAR 文件复制到每个红帽 Fuse 实例的 ESBInstallDir/lib/ext 目录中。
  2. 修改 bin/karaf 启动脚本,使其在其 CLASSPATH 变量中包含 JDBC 驱动程序 JAR。

    例如,如果 JDBC JAR 文件 JDBCJarFile.jar,您可以按如下方式修改启动脚本(在 *NIX 操作系统上):

        ...
        # Add the jars in the lib dir
        for file in "$KARAF_HOME"/lib/karaf*.jar
        do
            if [ -z "$CLASSPATH" ]; then
                CLASSPATH="$file"
            else
                CLASSPATH="$CLASSPATH:$file"
            fi
        done
        CLASSPATH="$CLASSPATH:$KARAF_HOME/lib/JDBCJarFile.jar"
    注意

    如果要添加 MySQL 驱动程序 JAR 或 PostgreSQL 驱动程序 JAR,您必须用 karaf- 前缀作为前缀来重命名驱动程序 JAR。否则,Apache Karaf 将挂起,日志将告诉您 Apache Karaf 无法找到驱动程序。

配置 JDBC 锁定系统

要配置 JDBC 锁定系统,请更新主/次要部署中每个实例的 etc/system.properties 文件,如下所示

例 14.2. JDBC 锁定文件配置

karaf.lock=true
karaf.lock.class=org.apache.karaf.main.lock.DefaultJDBCLock
karaf.lock.level=50
karaf.lock.delay=10000
karaf.lock.jdbc.url=jdbc:derby://dbserver:1527/sample
karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=30

在示例中,如果不存在,则会创建一个名为 sample 的数据库。第一个用于获取锁定表的 Red Hat Fuse 实例是主实例。如果与数据库的连接丢失,主实例将尝试正常关闭,允许次要实例在恢复数据库服务时成为主实例。前一个主实例需要手动重启。

在 Oracle 上配置 JDBC 锁定

如果您在 JDBC 锁定场景中使用 Oracle 作为数据库,则 etc/system.properties 文件中的 karaf.lock.class 属性必须指向 org.apache.karaf.main.lock.oracle 2.0.0Lock

否则,为您的设置配置 system.properties 文件,如下所示:

例 14.3. Oracle 的 JDBC 锁定文件配置

karaf.lock=true
karaf.lock.class=org.apache.karaf.main.lock.OracleJDBCLock
karaf.lock.jdbc.url=jdbc:oracle:thin:@hostname:1521:XE
karaf.lock.jdbc.driver=oracle.jdbc.OracleDriver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=30
注意

karaf.lock.jdbc.url 需要活跃的 Oracle 系统 ID (SID)。这意味着,您必须在使用此特定锁定前手动创建数据库实例。

在 Derby 上配置 JDBC 锁定

如果您在 JDBC 锁定场景中将 Derby 用作数据库,则 etc/system.properties 文件中的 karaf.lock.class 属性应指向 org.apache.karaf.main.lock.DerbyDatabaseLock。例如,您可以配置 system.properties 文件,如下所示:

例 14.4. 用于 Derby 的 JDBC 锁定文件配置

karaf.lock=true
karaf.lock.class=org.apache.karaf.main.lock.DerbyJDBCLock
karaf.lock.jdbc.url=jdbc:derby://127.0.0.1:1527/dbname
karaf.lock.jdbc.driver=org.apache.derby.jdbc.ClientDriver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=30

在 MySQL 上配置 JDBC 锁定

如果您在 JDBC 锁定场景中使用 MySQL 作为数据库,则 etc/system.properties 文件中的 karaf.lock.class 属性必须指向 org.apache.karaf.main.lock.MySQL Database。例如,您可以配置 system.properties 文件,如下所示:

例 14.5. MySQL 的 JDBC 锁定文件配置

karaf.lock=true
karaf.lock.class=org.apache.karaf.main.lock.MySQLJDBCLock
karaf.lock.jdbc.url=jdbc:mysql://127.0.0.1:3306/dbname
karaf.lock.jdbc.driver=com.mysql.jdbc.Driver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=30

在 PostgreSQL 上配置 JDBC 锁定

如果您在 JDBC 锁定场景中将 PostgreSQL 用作数据库,则 etc/system.properties 文件中的 karaf.lock.class 属性必须指向 org.apache.karaf.main.lock.PostgreSQL JDBCLock。例如,您可以配置 system.properties 文件,如下所示:

例 14.6. PostgreSQL 的 JDBC 锁定文件配置

karaf.lock=true
karaf.lock.class=org.apache.karaf.main.lock.PostgreSQLJDBCLock
karaf.lock.jdbc.url=jdbc:postgresql://127.0.0.1:5432/dbname
karaf.lock.jdbc.driver=org.postgresql.Driver
karaf.lock.jdbc.user=user
karaf.lock.jdbc.password=password
karaf.lock.jdbc.table=KARAF_LOCK
karaf.lock.jdbc.clustername=karaf
karaf.lock.jdbc.timeout=0

JDBC 锁定类

Apache Karaf 当前提供以下 JDBC 锁定类:

org.apache.karaf.main.lock.DefaultJDBCLock
org.apache.karaf.main.lock.DerbyJDBCLock
org.apache.karaf.main.lock.MySQLJDBCLock
org.apache.karaf.main.lock.OracleJDBCLock
org.apache.karaf.main.lock.PostgreSQLJDBCLock
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.