对于一些关键的 Web 应用,可用性至关重要,为了实现高可用性的系统,我们不能容忍任何的单点故障,即便只是偶然。所谓的单点故障,是指系统中一旦某个组件发生故障,便会导致整个系统的失败,所以这种故障是致命的。
在负载均衡系统中,多台实际服务器在分散开销的同时,本身也提高了实际服务器的可用性,一般来说,为了在个别实际服务器发生故障后整个系统能够继续承载同样的负载,我们必须将实际服务器的数量保证在略多于实际情况下的数目,这也有利于避免由于大量突发请求造成的雪崩效应。
而对于调度器,转移请求的机制注定它存在单点故障,为此,我们必须通过其他办法来有效实现故障平滑转移,以保证调度器的高可用性。
Heartbeat 可以很好地解决这个问题,它的诞生正是为了实现高可用性。简单地说,我们可以准备一台备用调度器,通过运行Heartbeat 对主调度器进行心跳检测,一旦发现主调度器停止心跳,便立即启动故障转移,接管主调度器,这个接管过程包括IP 别名变更、相关服务的启动等。随后,一旦主调度器恢复后,备用调度器便自动将相关资源转交回主调度器。
为了避免主调度器和备用调度器之间线路的单点故障,大量的事实证明,最好采用多条独立线路进行连接,这样将不依赖需要电源的交换机。你也可以使用串行电缆,通过服务器的 COM 端口进行连接,虽然线路长度有限,但这样还可以带来一点点额外的安全性,即便是主调度器被恶意破坏者登录,它也无法通过串行电缆登录备用调度器。
至于交换机,由于异常流量造成阻塞的情况时有发生,但大多数情况下发生在 IDC 级别的交换机上,所以不需要我们担心。一般来说,IDC 级别的交换机在物理层发生故障的概率较小,即便是发生了,更换备用交换机也并不困难,灾难总是在所难免的。
另外,作为物理层设备的网线,也有可能发生故障,虽然我们很少遇到,但如果希望让线路不存在单点故障,可以使用 LinuxBonding 技术来将多条线路绑定在一台服务器的多个网卡上,对流量进行 RR 负载均衡,或者将一条线路设置成为备用模式。Bonding 在 Linux 内核 2.4.12 以后已经被默认支持,你可以通过以下方法查看内核是否支持 Bonding,否则便需要将它编译到内核。
s-colin:~ # modprobe -l | grep bonding /lib/modules/2.6.16.21-0.8-bigsmp/kernel/drivers/net/bonding/bonding.ko
值得一提的是,通过 Bonding 实现流量负载均衡,还可以帮助我们实现带宽聚合,比如我们可以将 6 根 100Mbps 独享的线路绑定到 bond0 虚拟网卡上,实现 600Mbps 的出口带宽,我们对下载服务器采用了这种策略,可以看到以下结果:
s-colin:~ # cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.0.1 (January 9, 2006) Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:24:8c:33:f4:b8 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:24:8c:33:f4:b9 Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:04:23:89:69:e2 Slave Interface: eth3 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:04:23:89:69:e3 Slave Interface: eth4 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:0e:0c:a2:d9:08 Slave Interface: eth5 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:0e:0c:a2:d9:09
------WEB负载均衡大章节完毕,接下来分享第三章节,web系统内容分发与同步。
感觉本站内容不错,读后有收获?小额赞助,鼓励网站分享出更好的教程