Orlace 数据库连接的那些事儿:服务器端(四)

REMOTE_LISTENER 与 LOCAL_LISTENER


    我们以实例来说明这两种监听。


    假设我们有一个双节点集群:host1 和 host2, 其 VIP 分别为 host1_vip 和 host2_vip。此集群上运行一个 RAC 数据库 (orcl);其中,实例1(orcl1)位于 host1 上,shili2 (orcl2)位于 host2 上。

    两个监听,listener_host1 在 host1 上运行,listener_host2 在 host2 上运行。

    listener_host1 可以看作是实例 orcl1 的本地监听(local listener),而对同一个实例 oracl1,listener_host2 可以看作是远端监听 (remote listener)(因为监听和数据库实例不在同一个机器上运行)。

    类似地,listener_host2 可以看做是实例 orcl2 的本地监听(local listener),orcl1 的远端监听(remote listener)。

    我们模拟真实环境,在两个实例中,我们都设置两个参数 local_listener 和 remore_listener。

orcl1.local_listener=(address of listener_host1)
orcl1.remote_listener=(addresses of both listener_host1 and listener_host2)

orcl2.local_listener=(address of listener_host2)
orcl2.remote_listener=(addresses of both listener_host1 and listener_host2)

    (如你所见,简单起见,我们在 remote listener 的设置中,我们把两个监听都用起来了。当然你也可以只用一个,orcl1.remote_listener=(addres of listener_host2) 。)

     有了这样的设置,集群中的两个监听就都能识别两个实例和两个主机了(也就能够感知主机负载和实例负载了),也就可以对是否将客户端的连接请求转发给另一个负载较轻的节点做出判断了。这就是服务器端负载均衡所用的机制。

    客户端的 tnsnames 设置通常使用两个主机的两个 VIP(也就是说,可连接到两个主机中的任何一台)。所以,如果客户端尝试用第一个 IP 地址( listener_host1)连接数据库,假使 host1 比 host2 负载更重,那么监听 listener_host1 知道在 host2 上运行的另外一个实例负载较轻。此时,监听 listener_host1 会给客户端发送一个带有重定向指令的数据包,要求客户端重新尝试连接到 listener_host2,以与建立数据库连接。当然,这些对用户来说都是透明的。

    
    没有这种远端监听(remote listener)的设置,每个监听就只能识别其本地实例,客户端只能连接到在监听程序所在的主机上运行的实例。此时,就只有客户端的负载均衡,而未实现服务器端的负载均衡。

 

    原问地址:http://dbaoracledba.blogspot.kr/2012/04/remote-listener-vs-local-listener.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值