首批通过分布式安全可靠测评,为关键业务系统打造
负载均衡( LoadBalance)策略
更新时间:2026-07-22 17:45:58
OceanBase Connector/J 的 LoadBalance 模式是针对每一个新建的 Connection 对象的动作的,每次新建 Connection 对象时,会从 Host 列表中通过负载均衡策略最终选择一个 Host 进行连接的创建。基于配置文件的 LoadBalance 可以监控相应的配置文件目录,并在更新配置文件后进行感知,在每次执行 getConnection 时不用修改 URL 就可以更新负载均衡策略、Host 列表等信息。
负载均衡相关策略
OceanBase Connector/J 通过配置拓展配置信息中的 OBLB_STRATEGY 和 LOAD_BALANCE_STRATEGY,以及 URL Option 中的 loadBalanceStrategy 配置项的值,可以实现 3 种负载均衡策略。策略取值如下表所示。
| 算法 | 特性 | 备注 |
|---|---|---|
| RANDOM | 随机 | 默认算法 |
| SERVERAFFINITY | 加权 | 加权随机 |
| ROTATION | 轮询 | 轮询 |
负载均衡组选择策略
OceanBase Connector/J 当前只支持一种多组 Host 之间的负载均衡策略,对应拓展配置信息中的 OBLB_GROUP_STRATEGY。策略取值如下表所示。
| 算法 | 特性 | 备注 |
|---|---|---|
| ROTATION | 轮询 | 默认算法 |
黑名单策略
黑名单有添加策略和删除策略,对应拓展配置信息中的 OBLB_BLACKLIST 及其子配置项 REMOVE_STRATEGY(黑名单恢复)和 APPEND_STRATEGY(黑名单添加)。
OceanBase Connector/J 当前只支持两种黑名单添加策略,对应配置项 APPEND_STRATEGY。策略取值如下表所示。
| 算法 | 特性 | 备注 |
|---|---|---|
| NORMAL | 普通策略 | 默认策略,只要 Host 的 Connect 动作抛出网络异常就添加到黑名单,不需要其他的参数配合。 |
| RETRYDURATION | 时间段内重试 | 在一段时间内重试了指定次数就会添加到黑名单。相关配置包括 RETRYTIMES 和 DURATION。DURATION 单位为毫秒。例如,(RETRYTIMES=3) (DURATION=100) 表示在在100 ms 时间内第 3 次 Retry 失败后将该 Host 加入黑名单。 |
OceanBase Connector/J 当前只支持一种黑名单删除策略,对应配置项 REMOVE_STRATEGY。策略取值如下表所示。
| 算法 | 特性 | 备注 |
|---|---|---|
| TIMEOUT | 超时 | 默认策略,超过 TIMEOUT 指定的时间就会将 Host 从黑名单中移除。单位为毫秒。 |
黑名单策略示例
String url = "jdbc:oceanbase:loadbalance://@(NET_SERVICE_NAME=(DESCRIPTION=
(OBLB=ON)
(OBLB_RETRY_ALL_DOWNS=120)
(OBLB_GROUP_STRATEGY=ROTATION)
(OBLB_BLACKLIST=
(
REMOVE_STRATEGY=(
(NAME=TIMEOUT)
(TIMEOUT=100)
)
)
(
APPEND_STRATEGY =(
(NAME=RETRYDURATION)
(RETRYTIMES=3)
(DURATION=100)
)
)
)
(ADDRESS_LIST=
(OBLB_STRATEGY=SERVERAFFINITY)
(ADDRESS=(PROTOCOL=tcp)(HOST=host1)(PORT=port1)(WEIGHT=1))
(ADDRESS=(PROTOCOL=tcp)(HOST=host2)(PORT=port2)(WEIGHT=10))
)
(ADDRESS_LIST=
(OBLB_STRATEGY=RANDOM)
(ADDRESS=(PROTOCOL=tcp)(HOST=host3)(port=port3))
(ADDRESS=(PROTOCOL=tcp)(HOST=host4)(port=port4))
)
(ADDRESS_LIST=
(OBLB_STRATEGY=ROTATION)
(ADDRESS=(PROTOCOL=tcp)(HOST=host3)(port=port3))
(ADDRESS=(PROTOCOL=tcp)(HOST=host4)(port=port4))
)
(CONNECT_DATA=(SERVICE_NAME=OBDATABASE))
))/OBDATABASE?rewriteBatchedStatements=true&allowSendParamTypes=true&prepStmtCacheSize=1000";
Connection = DriverManager.getConnection(url);
相关配置项
| 字段名称 | 含义 | 默认值 | 备注 |
|---|---|---|---|
| DESCRIPTION | 包含连接的描述信息 | DESCRIPTION=(),括号“()”内是该连接的相关描述。 |
无 |
| OBLB | 负载均衡开关,可以设置在 DESCRIPTION 下,也可以设置在 ADDRESS_LIST 下。 |
OFF |
驱动内部会忽略该参数,因为拓展配置方式只有使用 LoadBalance 的情况,且在 ADDRESS_LIST 下也不会生效,需要之后进行补充配置。 |
| LOAD_BALANCE | 负载均衡开关,可以设置在 DESCRIPTION 下,也可以设置在 ADDRESS_LIST 下。 |
OFF |
与 OBLB 等价。 |
| OBLB_RETRY_ALL_DOWNS | DESCRIPTION 下的配置信息,表示所有的 Host 尝试重连的次数。 |
120 | 与 URL Option 中的 retryAllDowns 等价。 |
| OBLB_STRATEGY | LoadBalance 策略,可以设置在 DESCRIPTION 下,也可以设置在 ADDRESS_LIST 下。 |
RANDOM |
负载均衡策略,如果设置在 DESCRIPTION 下,则每个 ADDRESS_LIST 会默认采用该策略;如果设置在 ADDRESS_LIST 中,则会采用这个特别设置的策略,而忽略 DESCRIPTION 下的配置。 |
| LOAD_BALANCE_STRATEGY | LoadBalance 策略,可以设置在 DESCRIPTION 下面,也可以设置在 ADDRESS_LIST 下。 |
RANDOM |
与 OBLB_STRATEGY 等价。 |
| OBLB_GROUP_STRATEGY | 多个 ADDRESS_LIST 之间的访问策略。 |
ROTATION |
当前只有一种策略。 |
| OBLB_BLACKLIST | DESCRIPTION 下的配置信息。 OBLB_BLACKLIST 后的括号 “()” 内是黑名单的相关配置包括 REMOVE_STRATEGY 和 APPEND_STRATEGY。 |
OBLB_BLACKLIST=(),括号“()”内是该黑名单的相关配置描述。 |
如果不配置 OBLB_BLACKLIST,将会使用默认的黑名单策略,也就是 REMOVE_STRATEGY 和 APPEND_STRATEGY 策略。 |
| REMOVE_STRATEGY | OBLB_BLACKLIST 下的配置。 |
REMOVE_STRATEGY 中都是和黑名单洗白策略相关的配置。REMOVE_STRATEGY=(),括号“()”内是一个 Host 从黑名单移除的策略配置信息。 |
如果不配置 REMOVE_STRATEGY,将会使用默认的 TIMEOUT 策略,即超过指定时间后 Host 将会被从黑名单内清除。 |
| APPEND_STRATEGY | OBLB_BLACKLIST 下的配置,APPEND_STRATEGY 中都是加入黑名单的策略相关配置。 |
APPEND_STRATEGY=(),括号“()”中的都是一个 Host 加入到黑名单的策略配置信息。 |
如果不配置 APPEND_STRATEGY,将会使用默认的 NORMAL 策略,即只要连接失败就会将 Host 加入黑名单。 |
| NAME | APPEND_STRATEGY 或 REMOVE_STRATEGY 的配置,可以分别指定 APPEND_STRATEGY 的名字和 REMOVE_STRATEGY 的名字。 |
NAME= 表示名字的字符串,如果不是特定的名字中的某一个则会报错。 |
在 REMOVE_STRATEGY 下可选的值有TIMEOUT。在 APPEND_STRATEGY 中可选的值有 RETRYDURATION 和 NORMAL。 |
| TIMEOUT | REMOVE_STRATEGY 中 NAME 为 TMEOUT 时的选项。 |
TIMEOUT= 指定超时时间,默认为 50ms。 |
与 URL Option 中的 loadBalanceBlacklistTimeout 等价。 |
| RETRYTIMES | APPEND_STRATEGY 中 NAME 为 RETRYDURATION 时的配置项之一。 |
在 DURATION 时间内重试次数的阈值,超过该阈值的 Host 将会被加入到黑名单。 |
需要和 DURATION 配合使用。 |
| DURATION | APPEND_STRATEGY 中 NAME 为 RETRYDURATION 时的配置项之一。 |
RETRYTIMES 后如果时间超过了 DURATION,则该 Host 将会被加入到黑名单。 |
需要和 RETRYTIMES 进行配合。 |
| ADDRESS_LIST | DESCRIPTION 下的配置信息,可以是一组 ADDRESS 配置信息,也可以配置自己独立的 OBLB_STRATEGY。各个组之间按照 OBLB_GROUP_STRATEGY 来进行选择。 |
ADDRESS_LIST=(),括号“()”内是该组 ADDRESS 的描述信息。 |
无 |
| ADDRESS | ADDRESS_LIST 下的配置信息,可以配置 Host 相关的信息,包括 hostname、port 和权重等。 |
ADDRESS=(),括号“()”内是该 ADDRESS 的描述信息。 |
无 |
| HOST | ADDRESS 下的配置信息,当前 Host 的 hostname。 |
无 | 无 |
| PORT | ADDRESS 下的配置信息,当前 Host 的端口号。 |
无 | 无 |
| WEIGHT | ADDRESS 下的配置信息,当前 Host 的权重。 |
无 | 只有在 OBLB_STRATEGY 为 SERVERAFFINITY 会被识别,其他情况都会被忽略。 |
| PROTOCOL | ADDRESS 下的配置信息,当前 Host 的网络协议。 |
无 | 当前该字段没有意义,主要作用是为了兼容 Oracle 的 Local Naming Parameters 配置格式。 |
| CONNECT_DATA | 数据库服务标识信息下的信息。 | 无 | 主要作用是为了兼容 Oracle 的 Local Naming Parameters 配置格式。 |
| SERVICE_NAME | Schema 信息。 | 无 | 主要作用是为了兼容 Oracle 的 Local Naming Parameters 配置格式。 |