首批通过分布式安全可靠测评,为关键业务系统打造
负载均衡
更新时间:2025-07-04 19:19:52
实现负载均衡的架构示例如下:

OBCI 提供的负载均衡功能是通过配置文件来完成的,用户可以指定后端 proxy 的地址以及连接过程中的负载均衡选项。
设置配置文件
当前 OBCI 提供驱动负载均衡功能,在与后端建联的过程中,能够选取一个“合适”的 proxy 来连接。
OBCI 的负载均衡需要基于配置文件来配置选取连接过程中的一些选项,以及后端 proxy 的地址。配置文件的名称需要用户在环境变量 OBCI_TNS_FILE 中设置。
## 设置配置文件名为 obci_tnsnames.ora
export OBCI_TNS_FILE=./obci_tnsnames.ora
提供 LB 功能之前,OBCI 兼容了 OCI 的配置文件格式,具体如下:
配置文件在环境变量 TNS_ADMIN 或者 ORACLE_HOME/network/admin 下
配置文件名固定为 tnsnames.ora
所以目前设置配置文件,有三种环境变量设置,分别是 OBCI_TNS_FILE、TNS_ADMIN、ORACLE_HOME,这三个环境变量的优先级如下:
OBCI_TNS_FILE:第一优先级
TNS_ADMIN:第二优先级,OBCI_TNS_FILE 为空的时候才会查询
ORACLE_HOME:第三优先级,前两个为空时才会查询
说明
更建议使用 OBCI_TNS_FILE 设置配置文件。
配置文件说明
配置示例
## 负载均衡配置
obci_load_balance=
(DESCRIPTION=
(OBLB=ON)
(OBLB_RETRY_ALL_DOWNS=120)
(OBLB_RETRY_TIMEOUT=200000)
(OBLB_GROUP_STRATEGY=ROTATION)
(OBLB_BLACKLIST=
(REMOVE_STRATEGY=
(NAME=timeout)(TIMEOUT=1000)
)
(APPEND_STRATEGY=
(NAME=retryDuration)(RETRY_TIMES=20)(DURATION=1000)
)
)
(ADDRESS_LIST=
(OBLB_STRATEGY=SERVERAFFINITY)
(ADDRESS=(PROTOCOL=tcp)(HOST=11.xxx.xxx.1)(PORT=10001)(WEIGHT=1))
(ADDRESS=(PROTOCOL=tcp)(HOST=11.xxx.xxx.1)(PORT=10000)(WEIGHT=10)))
(ADDRESS_LIST=
(OBLB_STRATEGY=ROTATION)
(ADDRESS=(PROTOCOL=tcp)(HOST=11.xxx.xxx.1)(PORT=1031)(WEIGHT=10))
(ADDRESS=(PROTOCOL=tcp)(HOST=11.xxx.xxx.1)(PORT=10002)(WEIGHT=10)))
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=11.xxx.xxx.1)(PORT=10003)(WEIGHT=10)))
(CONNECT_DATA=(SERVICE_NAME=TEST)))
## 普通配置
normal=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL=TCP)(HOST=11.xxx.xxx.1)(PORT=1031)))
(CONNECT_DATA=
(SID=TEST)))
## 特殊配置:不是负载均衡所需要,兼容之前能力
TestExtraInfo=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL=TCP)(HOST=11.xxx.xxx.1)(PORT=1031)))
(CONNECT_DATA=
(SID=TEST)(OB_MODE=1)(OB_USER_EXTRA_INFO=@xyoracle)))
普通配置
从 配置示例 中可以看到,在普通配置中只有一个地址和一个 SID,可以简单的将其拼接起来,就是一个连接串,配合账号密码就能直接登录数据库。
例如:
## 上面普通配置得到的连接串
dblink: 11.xxx.xxx.1:1031/TEST
负载均衡配置
注意
配置文件中 key 和 value 是大小写不敏感的,建议使用下文中提到的 obci_dblink_check 文件检验配置文件是否符合预期。
Description 相关配置选项
| 配置项 | 配置项说明 | 取值 | 备注 |
|---|---|---|---|
| OBLB | 负载均衡总开关 |
|
如果开关为关闭的状态,所有 OBLB 开头的配置信息都无效,并且会选择第一个地址直接连接后续 proxy/observer。 |
| OBLB_RETRY_ALL_DOWNS | 连接总次数 | 默认值为 120,建议用户根据实际情况自行设置 | 在负载均衡过程中,每次后端尝试连接都会使用一次连接次数,该参数定义连接总次数。如果设置为 10 次,OBCI 会根据负载均衡策略,尝试与后端连接 10 次(每次地址都是靠负载均衡策略选择),直到次数用完或者连接上后端。 |
| OBLB_RETRY_TIMEOUT | 连接总时间 | 默认值:10000ms | 在负载均衡过程中,可能会不断重试,尝试连接上后端 proxy,该配置用于设置总时间,每次重试之前进行检查,如果超时,则报错。 |
| OBLB_CONNECT_TIMEOUT | 单次连接时间 | 默认值为 0s,一直等待直到连接上后端机器 | 每次连接与后端 tcp 建联的时间。 |
| OBLB_GROUP_STRATEGY | 负载均衡组间策略 | ROTATION(该值是默认值,同时是当前唯一可选值) | OBCI 负载均衡,允许配置多个 proxy 组,这个策略能够首先在多个组中选出策略倾向的组,尝试连接。 |
BLACKLIST 相关配置选项
| 配置项 | 配置项说明 | 取值 |
|---|---|---|
| REMOVE_STRATEGY | 洗白策略 | 使用 NAME 来标识洗白策略,并带上洗白策略相关的属性。 |
| NAME | 洗白和拉黑策略的名称 | 根据策略选择策略名,具体见下文 NAME 的详细介绍。 |
| TIMEOUT | TIMEOUT 洗白策略下属性,表示洗白的时间 | 数字,单位为 ms。 |
| APPEND_STRATEGY | 拉黑策略 | 使用 NAME 来表示拉黑策略,并带上相应拉黑策略的属性。 |
| RETRYTIMES | RetryDuration 策略下的属性,表示在 DURATION 时间内拉黑需要的失败次数,即定义在 DURATION 时间内重试多少次会被加入黑名单 | 数字,默认值为 1。 |
| DURATION | RetryDuration 策略下的属性,表示时间段 | 数字,默认值为 10ms。 |
NAME
洗白和拉黑策略的名称,可选值有按照策略可分为如下几种:
| 策略 | 可选值 | 说明 |
|---|---|---|
| 洗白策略 | TIMEOUT | 超时洗白,如果设置为 10ms,在拉黑的 10ms 后再尝试 LoadBalance,系统会洗白地址。 |
| 拉黑策略 | RetryDuration | 策略会配置时间段(duration)、以及失败次数(Retrytimes)。如果在时间段内,失败的次数大于配置次数则拉黑。 |
| 拉黑策略 | NORMAL | 策略不会带其他属性,失败即拉黑。 |
ADDRESS_LIST 以及 ADDRESS 相关配置选项
| 配置项 | 配置项说明 | 取值 |
|---|---|---|
| OBLB_STRATEGY | 表示地址组的负载均衡策略 |
|
| PROTOCOL | 表示协议,继承自 ORACLE TNS_FILE,没有实际意义 | |
| HOST | IP 地址 | 后端 proxy 或 server 的地址 |
| PORT | 端口号 | 数字 |
| WEIGHT | 加权随机策略下的地址权重 | 1 |
CONNECT_DATA 相关配置选项
| 配置项 | 配置项说明 | 取值 | 备注 |
|---|---|---|---|
| SERVICE_NAME/SID | 两个配置项都表示 DATABASE,继承自 ORACLE TNS FILE | ||
| OB_MODE | 不是本次负载均衡所用,兼容之前功能,拓展连接时能力 | 如果值为 1,会在用户名后加上 EXTRA_INFO | |
| EXTRA_INFO | 不是本次负载均衡所用,兼容之前功能,拓展连接时能力 | 如果 OB_MODE 为 1,会在用户名后加上 extra_info | 一般用于客户使用时,用户名不带租户的情况下,extra_info 设置为 @oracle 或者 @mysql 表示租户。 |
配置文件的校验
当前在 OBCI 打包过程中,会生成可执行文件:obci_dblink_check
可使用该文件校验用户配置文件是否正确,测试如下:
$ ./obci_dblink_check --tns_service obci_load_balance
run tns_file_check with tns_service:obci_load_balance
find tns_service:obci_load_balance in OBCI_TNS_FILE
Tns:
--tns_serivce_count:1
--TnsService:obci_load_balance
----description_count:1
----Discription:
------oblb:1
------oblb_group_strategy:0
------retry_all_downs:120
------retry_timeout:200000
------connect_timeout:0
------append_strategy:3001
------remove_strategy:2001
------remove_timeout:1000
------duration:1000
------retry_times:20
------address_list_count:3
------AddressList:
--------address_count:2
--------oblb_strategy:1002
--------Address:
----------host:11.xxx.xxx.1
----------port:10001
----------weight:1
--------Address:
----------host:11.xxx.xxx.1
----------port:10000
----------weight:10
------AddressList:
--------address_count:2
--------oblb_strategy:1003
--------Address:
----------host:11.xxx.xxx.1
----------port:1031
----------weight:10
--------Address:
----------host:11.xxx.xxx.1
----------port:10002
----------weight:10
------AddressList:
--------address_count:1
--------oblb_strategy:1001
--------Address:
----------host:11.xxx.xxx.1
----------port:10003
----------weight:10
--------ConnectData:
----------dbname:TEST