ORACLE RAC 负载均衡与local_listener、remote_listener两个参数的配置关系

本文详细解析了Oracle RAC环境中的负载均衡机制,包括客户端与服务器端的实现方式,重点介绍了通过local_listener和remote_listener参数进行服务器端负载均衡的配置,并通过实例展示了配置过程及效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ORACLE RAC 负载均衡与local_listener、remote_listener两个参数的配置关系
RAC的负载均衡主要由客户端和服务器端两种实现方式。


1,客户端的实现,直接在tnsnames.ora中配置LOAD_BALANCE参数来实现。默认值是NO
clinet_LB =
(DESCRIPTION =
(LOAD_BALANCE = YES)
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.243)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.244)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.245)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.246)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = srv_epm1)
)
)
2,服务器端的负载均衡LB设置。主要是通过两个初始化参数local_listener、remote_listener来实现的。通过这两个参数,oracle分别向这两个参数指向的listener进行注册,这样,listener就能知道各个服务的状态,进而进行连接分发。
11gr2版本,这两个参数默认设置为如下


SQL> show parameter listener

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
listener_networks string
local_listener string (DESCRIPTION=(ADDRESS_LIST=(AD
DRESS=(PROTOCOL=TCP)(HOST=10.4
.124.244)(PORT=1521))))
remote_listener string dtydb-scan2:1521

由于以上设置,数据库实例分别向local_listener和remote_listener进行注册。

本地listener只注册了+ASM2和epmdb2两个实例

LSNRCTL> set current_listener LISTENER
Current Listener is LISTENER
LSNRCTL> service
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM2", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:10765 refused:0 state:ready
LOCAL SERVER
Service "epmdb" has 1 instance(s).
Instance "epmdb2", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:10 refused:0 state:ready
LOCAL SERVER
The command completed successfully

SCAN listener注册了所有数据库实例默认service和运行在epmdb1实例上的服务srv_epm1
查看服务注册情况,SCAN

LSNRCTL> set current_listener LISTENER_SCAN1
Current Listener is LISTENER_SCAN1
LSNRCTL> service
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
Services Summary...
Service "epmdb" has 3 instance(s).
Instance "epmdb1", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.243)(PORT=1521)))
Instance "epmdb2", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.244)(PORT=1521)))
Instance "epmdb3", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:4 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.245)(PORT=1521)))
Service "srv_epm1" has 1 instance(s).
Instance "epmdb1", status READY, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0 state:ready
REMOTE SERVER
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.4.124.243)(PORT=1521)))
The command completed successfully

tnsnames.ora的配置如下
tydb_srv_epm1 =
(DESCRIPTION =
(LOAD_BALANCE = NO)
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.243)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.244)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.245)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.246)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = epmdb)
)
)
epmdb_scan =
(DESCRIPTION =
(LOAD_BALANCE = NO)
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.230)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = epmdb)
)
)


当我们连接时tydb_srv_epm1,由于顺序关系,会连接到epmdb1实例

sqlplus system/oracle@tydb_srv_epm1

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:10:21 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
epmdb1

SQL> exit

连接scan IP时,由于scan listener了注册了各个数据库实例,负载均衡的效果就产生了


>sqlplus system/oracle@epmdb_scan

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:11:26 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
epmdb1

SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options 断开

sqlplus system/oracle@epmdb_scan

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:12:57 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
epmdb3

SQL>


3,10gr2版本以上,TAF主要是通过service的配置来实现。已如下已配置的service srv_epm1为例

[grid@dtydb3 ~]$ srvctl config service -d epmdb -s srv_epm1
Service name: srv_epm1
Service is enabled
Server pool: epmdb_srv_epm1
Cardinality: 1
Disconnect: false
Service role: PRIMARY
Management policy: AUTOMATIC
DTP transaction: false
AQ HA notifications: false
Failover type: SELECT
Failover method: BASIC
TAF failover retries: 180
TAF failover delay: 5
Connection Load Balancing Goal: LONG
Runtime Load Balancing Goal: NONE
TAF policy specification: BASIC
Edition:
Preferred instances: epmdb1
Available instances: epmdb2


tnsnames.ora的连接配置如下


epmdb_scan_taf =
(DESCRIPTION =
(LOAD_BALANCE = NO)
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.4.124.230)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = srv_epm1)
)
)

由于服务只运行于epmdb1,因此必定连接epmdb1实例


sqlplus system/oracle@epmdb_scan_taf

SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 14 16:21:42 2012

Copyright (c) 1982, 2005, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
epmdb1


数据库实例EPMDB1 down后,service发生了切换,再次连接数据库,已经运行于instane 2 .
sys@EPMDB1(10.4.124.233)> shutdown immediate;

[grid@dtydb3 ~]$ srvctl status service -d epmdb -s srv_epm1
Service srv_epm1 is running on instance(s) epmdb2



SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
epmdb1

SQL> /

INSTANCE_NAME
----------------
epmdb2



<think>好的,我需要帮助用户解决Oracleremote_listener缺少SCAN IP配置的问题。首先,我要回忆一下Oracle RAC相关的知识,特别是关于local_listenerremote_listener的作用。根据用户提供的引用内容,remote_listener参数用于将实例注册到SCAN监听器,而SCAN监听器通常用于客户端连接,实现负载均衡和高可用性。 用户的问题是没有配置SCAN IP到remote_listener,导致服务无法正确注册到SCAN监听器。根据引用[4],修改remote_listener参数的正确方法是使用SCAN名称和端口,比如'raclhr-11gR2-scan:1521'。此外,引用[5]提到,如果没有设置local_listener,PMON进程默认注册到本地节点的1521端口,但可能需要显式配置以确保正确性。 接下来,我需要整理配置步骤。首先检查当前的remote_listener设置,确认是否已经包含SCAN名称或IP。如果没有,使用ALTER SYSTEM命令修改参数,指定SCAN名称和端口。同时,确保SCAN名称在DNS或GNS中正确解析,并且相关监听器已启动。 可能还需要验证local_listener配置是否正确,因为它影响本地实例注册。如果local_listener没有正确指向本地节点的VIP,也可能导致问题。此外,重启监听器和实例可能是必要的,使配置生效。 最后,生成相关问题时要考虑用户可能遇到的其它配置问题,比如参数区别、验证方法、常见错误等。确保问题覆盖用户可能进一步探索的方向。</think>### 如何配置 Oracle remote_listener 使用 SCAN IP? #### 1. **确认当前配置状态** - 查看当前 `remote_listener` 参数值: ```sql SHOW PARAMETER remote_listener; ``` 若值为空或未指向 SCAN,则需修改[^5]。 #### 2. **配置 remote_listener 参数** - 使用 SCAN 名称(推荐)或 SCAN IP 进行配置: ```sql ALTER SYSTEM SET remote_listener = '<SCAN_NAME>:<PORT>' SCOPE=BOTH SID='*'; ``` 示例(假设 SCAN 名称为 `scan-cluster1`,端口为默认 1521): ```sql ALTER SYSTEM SET remote_listener = 'scan-cluster1:1521' SCOPE=BOTH SID='*'; ``` - **说明**:SCAN 名称需在 DNS 或 GNS 中解析为 SCAN VIP 地址[^4]。 #### 3. **验证 SCAN 解析** - 检查 SCAN 名称是否能解析为正确的 IP: ```bash nslookup <SCAN_NAME> ``` 需返回 3 个 SCAN VIP(Oracle RAC 标准配置)。 #### 4. **重启监听服务(可选)** - 若修改后未生效,重启监听器: ```bash lsnrctl stop lsnrctl start ``` #### 5. **验证服务注册状态** - 查看 SCAN 监听器是否成功注册实例: ```bash lsnrctl status <SCAN_LISTENER_NAME> ``` 输出应包含所有 RAC 实例的服务信息[^3]。 --- ### **关键配置区别** | 参数 | 作用 | 典型配置值 | |------------------|--------------------------------------------------------------------|------------------------------| | `local_listener` | 注册实例到本地节点监听器(VIP) | 本地节点 VIP:1521 | | `remote_listener`| 注册实例到 SCAN 监听器,实现跨节点负载均衡 | SCAN 名称:1521 | --- ### **注意事项** 1. **SCAN 名称必须可解析**:若使用 SCAN IP 直接配置,需确保集群环境允许静态解析(不推荐,违背 SCAN 设计初衷)[^1]。 2. **参数作用范围**:使用 `SCOPE=BOTH` 确保参数立即生效且持久化。 3. **监听器网络配置**:检查 `listener_networks` 参数是否限制监听范围,确保 SCAN 监听器可跨节点通信[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值