Linux环境下Oracle负载均衡实现指南
一、方案总览
二、RAC场景的标准做法
RACDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node-vip1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node-vip2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
-- 服务器端 tnsnames.ora
LISTENERS_RACDB =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node-vip1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node-vip2)(PORT = 1521))
)
-- 每个实例执行
ALTER SYSTEM SET remote_listener='LISTENERS_RACDB' SCOPE=BOTH SID='racdb1';
ALTER SYSTEM SET remote_listener='LISTENERS_RACDB' SCOPE=BOTH SID='racdb2';
RACDB_TAF =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = node-vip1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = node-vip2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(MODE = BASIC)
(RETRY = 3)
(DELAY = 5)
)
)
)
三、无RAC时的替代方案
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend oracle_front
bind *:1521
default_backend oracle_back
backend oracle_back
balance roundrobin
server node1 192.168.1.101:1521 check
server node2 192.168.1.102:1521 check
events { worker_connections 1024; }
stream {
upstream oracle_backend {
server 192.168.1.101:1521;
server 192.168.1.102:1521;
}
server {
listen 1521;
proxy_pass oracle_backend;
proxy_timeout 50s;
}
}
四、验证与运维要点
SQL> show parameter instance_name
观察是否在不同实例(如 racdb1/racdb2)间分布。$ lsnrctl status
检查服务下各实例的 READY 状态与 Handler 数量;结合业务高峰观察新连接是否更多落在负载较低实例。