Oracle RAC具备高可用性(High Availablity)和负载均衡(Load Balance)的特性。
其中负载均衡是指把数据库的负载平均分配到集群中的各个节点(主要指新的连接),以提高系统的整体吞吐量。
Oracle RAC通常情况下有以下两种方式来实现会话连接的负载均衡:
1. 基于客户端连接的负载均衡
2. 基于服务器端的负载均衡
一、基于客户端的负载均衡
基于客户端的负载均衡主要是通过在客户端的tnsnames.ora文件中增加load_balance=yes的条目来实现。如果未设置该条目,Oracle Net会按地址列表中的顺序进行连接,直到连接成功为止(实际上就是failover的功能) 。
当设置了load_balance=yes的条目后,Oracle Net会从多个地址中随机地选择一个地址进行连接,直到连接成功为止。
基于客户端的负载均衡并不考虑各个实例上真实连接的数量,只是通过随机选择来分配连接,所以最后的结果可能不一定是平衡的,尤其是在短时间内同时发起多个连接的时候,很可能会被分配到同一个节点上。
示例:
ORCLDBLB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.112)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.114)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcldb)
)
)
二、基于服务器端的负载均衡
Oracle RAC服务器端的负载均衡是根据RAC中各节点的连接负荷数情况,将新的连接请求分配到负荷最小的节点上去。 在数据库运行过程中,PMON后台进程会收集系统的负载信息,然后登记到Listener中。 最少1分钟,最多10分钟PMON就要做一个信息更新,并且如果节点的负载越高,更新频率就越高,以保证Listener能掌握每个节点准确的负载情况。如果Listener关闭了,PMON进程会每隔1秒钟检查Listener是否重启。除了这个自动的,定时的更新任务外,用户也可以使用alter system register 命令来手工进行这个过程。实例启动时PMON进程进行的第一次登记过程叫作Server-register,而后的更新过程叫作service-update。
主要通过在服务器端配置local_listener和remote_listener这两个参数来实现服务器端的负载均衡
可以同时配置基于客户端和基于服务器端的负载均衡