一次和同事聊RAC中的负载均衡,聊到服务器端的分发机制时大家都说不清,再此总结一下以备后用。
负载均衡Load Balance
客户端load balance
服务器端load balance
客户端load balance
客户端发起应用请求时,首先通过tnsnames.ora中随机选择一个vip地址,然后通过该vip地址发起请求。这个vip地址实际上就是连接高可用的核心。当客户端访问的实例宕机了,甚至vip已经漂移到其它存活节点,这次连接就失败了。通知服务(FAN)会立刻通知客户端采用其它的vip重新连接,客户端选择tnsnames.ora中的其它vip继续尝试,直到连接成功为止。如果不采用vip方式连接,而直接使用IP地址连接不行么?答案是行,但是连接失败后需要30秒才能通知到客户端,30秒的代价太大了,完全失去了高可用的意义。
客户端的load balance不会判断当前服务器的负载,它只是随机分发。包括11gR2推出的SCAN也不会判断服务器端负载,它按照注册的3个vip地址轮询分发。服务器端的负载是如何判断的呢,我们继续往下看。
服务器端load balance
服务器端的负载均衡是监听器remote listener和local listener来合作完成的。监听器将当前负载信息在LBA(Load Balance Advisor)中注册,并且可以根据服务时间和吞吐量来设定负载类型。如果是Web服务可以配置服务时间作为负载均衡的条件,如果是查询密集型操作可以配置吞吐量类型。
总结一下上面的描述,客户端通过vip来实现连接高可用,服务器端通过remote listener,local listener和LBA的配置实现load balance。
在load balance中有两个总要的概念:
FAN:Fast Application Notification
快速通知,主动推送机制。既通知集群之间的节点,也通知客户端端到集群。
LBA:Load Balance Advisor
负载均衡建议器
: