rac负载均衡分基于客户端和基于服务端两种:
客户端
配置比较简单,在tnsnames.ora中增加load_balance=on即可,如下:
RAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(LOAD_BALANCE = ON)
(FAILOVER = ON)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
)
)
客户端连接rac的时候会随机挑个节点进行连接,因为客户端不知道这个节点的状况,这个节点挂了的话,有可能出现长时间的tcp等待。10g版本以后,这种状况有很大的改善,但是客户端不知道rac各节点的负荷和连接数,有可能出现某节点重负,使均衡不能很好的发挥。
服务端
10g以后,服务端负载均衡能根据各节点的负荷和连接数,均衡各节点,各节点的pmon进程会定期向rac汇报自己的负荷情况。
配置如下:
LISTENERS_RAC =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
)
ALTER SYSTEM SET REMOTE_LISTENER = LISTENERS_RAC;
有时候汇报负荷的进程延迟导到均衡效果不明显,这时加入PREFER_LEAST_LOADED_NODE=OFF,服务器会根据连接数进行分配。
从Oracle 10.2开始,Oracle引入了Load Balance Advisor,对负载均衡有了进一步的改进。结合Service,可以对不同的SERVICE设置不同的负载均衡策略。