RAC 没有负载均衡 设置listener

来源:互联网 发布:linux压缩命令tar.gz 编辑:程序博客网 时间:2024/05/01 15:44
   刚接收RAC一段时间,用户反映数据库慢,看了一下服务器,节点1 cpu 98%多,节点2竟然不到10%,节点2其实根本就没有用户会话,排查了一下,看到local_listener 设置了,指向的一个莫名IP,因为是默认端口,直接把local_listener设置删掉,配置了remoter_listener候发现节点二有了会话,ok。
  listener原理:
  当客户端发出连接请求给Server端listener的时候,通过local_listener注册的服务接收这个连接请求,然后由master instance来决定这个连接请求应该由哪个目标instance发出server process响应这个连接请求。启用负载均衡时,主节点会选择cpu负载最小的那个instance,其中负载情况有PMON进程进行通知,如果master分配的目标instance是local listener machine,那么直接通过local server listener,开启后台的server process,处理发出conn的客户端,建立连接,处理会话;如果master分配的目标instance不是local listener machine,那么会通过remote_listener这个参数,把连接请求转移到remote machine上的listener, 然后由remote service listener发出一个server process返回客户端,建立连接,处理会话.当conn建立连接以后,listener就没有用了,如果这个时候,已经连接的那个instance down了,会重新由新分配的master instance通过remote_listener切换到可用instance,此时客户不会发现连接中断。conn 和 select操作是不会中断的。故障透明切换,TAF策略。分客户端tnsnames.ora配置;服务器端,配置service。
 local_listener:
instance主机的用户非默认端口的监听配置。在tnsnames.ora 配置:
LSNR_LOCAL =
  (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT =1522))
  )
remote_listener:
LSNR_REMOTE=
(ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT =1522))
    (ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT =1522))
  )
alter  system set local_listener='LSNR_LOCAL';
aletr system set remote_listener='LSNR_REMOTEL' scope=both;
aletr system register;
dedicate与shared模式下处理请求工作机制:
dedicated下:

当用户发出请求后,oracle会产生新的进程为其服务,所以不用在乎事务的运行时间,适合大而长的事务。OLAP

shared下:

用户发出请求后,由dispatcher分发器接收,到请求队列,派发一个共享服务的进程处理请求,处理完后,到各自的相应队列中去,由于存在进程的竞争,所以适合短而小的事务,OLTP

 

 

0 0