关于两条链路实现负载均衡和容错的设计

本文涉及的产品
云防火墙,500元 1000GB
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

某公司的网络如下图所示:

   
    该公司有两条专线,一条联通的 2M  租线,另一条互联通的512K 租线;有一台Linux 做的WEB服务器,该WEB服务器有一张网卡,接到中心交换机3560上。公司希望,当两条线路都正常时,客户能够通过任何一条专线访问公司的WEB服务器,实现负载均衡;而且,当任何一条线路出现故障时,用户仍然可以访问WEB服务器。
    分析:为了实现两条线路正常时的负载均衡,可以通过配置DNS轮询实现。而为了实现容错,我们需要实现 从哪条线路进来的请求,其响应也从该线路出去,这是解决问题的关键所在。因为,如果从一条线路进去的请求,其响应从另外一条线路出来的话,那么TCP的三次握手不可能完成,TCP连接不可能建立起来(因为两条线路上都有防火墙)。而且,即使不考虑防火墙的状态检测机制,假设两条线路都正常时TCP连接能够建立起来,但是,一旦其中一条线路挂了,那么连接也不可能建立得起来,容错机制也不能实现。
    DNS轮询,比较简单,我们不做深入的讨论。由于该公司的域名是在域名供应商那里注册的,所有只需要在域名供应商的网站上做适当配置:将该公司的WEB服务器域名 [url]www.xxx.com.cn[/url] 分别映射到IP地址 x.x.x.x(联通IP) 和 y.y.y.y(互联通IP)就完事了。当用户浏览[url]www.xxx.com.cn[/url]的时候,浏览器会智能地在这两个IP之间作出选择。
    下面我们讨论怎样实现 从哪条线路进来的请求,其响应也从该线路出去。我们可以这样来做:
     第一步:在联通线路的防火墙上,将联通给我们的IP地址x.x.x.x 的80端口映射到内网地址 192.168.168.1的80端口:
iptables -t nat -A PREROUTING -p tcp -s 0/0 -d x.x.x.x/32 \
--dport 80 -j DNAT --to-destination 192.168.168.1
iptables -t nat -A POSTROUTING -p tcp -s 192.168.168.1/32 -d 0/0 \
--sport 80 -j SNAT --to-source x.x.x.x
 
     第二步:在互联通线路的防火墙上,将互联通给我们的IP地址y.y.y.y 的80端口映射到内网地址 192.168.1.2的80端口:
iptables -t nat -A PREROUTING -p tcp -s 0/0 -d y.y.y.y/32 \
--dport 80 -j DNAT --to-destination 192.168.168.2
     第三步:在WEB服务器上,为网卡eth0绑定两个IP地址: 192.168.168.1,192.168.168.2:
[root@web network-scripts]# cat ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:76:23:23:9A
IPADDR=192.168.168.1
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
     第四步:在WEB服务器上配置策略路由:将来自联通线路的,发给192.168.168.1的请求的响应包,发送给192.168.168.11,然后通过联通的线路,返回给用户;将来自互连通线路的,发给192.168.168.2的请求的响应包,发给192.168.168.12,然后通过互联通的线路返回给用户.这样,就可以实现 从哪条线路进来的请求,其响应也从该线路出去。 具体配置如下:
[root@web ~]# ip route add table 1 default via 192.168.168.11
[root@web ~]# ip route add table 2 default via 192.168. 168.12
[root@web ~]# ip rule add from 192.168.168.1 table 1
[root@web ~]# ip rule add from 192.168.168.2 table 2
[root@web ~]# sh ip rule    <--- IOS  ^-^
/sbin/ip: /sbin/ip: cannot execute binary file
[root@web ~]# ip rule list
0:      from all lookup local
32764:  from 192.168.168.2 lookup 2
32765:  from 192.168.168.1 lookup 1
32766:  from all lookup main
32767:  from all lookup default
[root@web ~]# ip route list table 1
default via 192.168.168.11 dev eth0
[root@web ~]# ip route list table 2
default via 192.168.168.12 dev eth0
 
就这样,就搞定了。Good Luck !!!


本文转自zkjian517 51CTO博客,原文链接:http://blog.51cto.com/zoukejian/57470
相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
开发框架 负载均衡 Java
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
Spring Cloud 介绍及负载均衡Ribbon、服务容错Hystrix 组件使用详解
220 0
|
消息中间件 存储 负载均衡
RabbitMQ使用docker搭建集群并使用Haproxy实现负载均衡(多机镜像模式)
RabbitMQ使用docker搭建集群并使用Haproxy实现负载均衡(多机镜像模式)
650 0
RabbitMQ使用docker搭建集群并使用Haproxy实现负载均衡(多机镜像模式)
|
消息中间件 运维 负载均衡
Dubbo负载均衡和集群容错和动态代理策略
Dubbo负载均衡和集群容错和动态代理策略
127 0
|
缓存 负载均衡 算法
Nginx实现负载均衡(整合SpringBoot小demo)
Nginx实现负载均衡(整合SpringBoot小demo)
381 4
Nginx实现负载均衡(整合SpringBoot小demo)
|
负载均衡 Linux 调度
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
196 1
使用keepalived(HA)+LVS实现高可用负载均衡群集,调度器的双机热备
|
负载均衡 网络协议 应用服务中间件
nginx实现负载均衡
nginx实现负载均衡
341 0
nginx实现负载均衡
|
弹性计算 负载均衡 Kubernetes
【视频】第四讲-负载均衡ALB+实验三-使用ALB实现灰度发布|学习笔记
快速学习【视频】第四讲-负载均衡ALB+实验三-使用ALB实现灰度发布。
【视频】第四讲-负载均衡ALB+实验三-使用ALB实现灰度发布|学习笔记
|
域名解析 tengine 负载均衡
使用nginx的负载均衡机制实现用户无感更新服务
用户请求的转发是接口服务在部署时必须要做的一步。
|
负载均衡 Java 开发者
自定义实现负载均衡|学习笔记
快速学习自定义实现负载均衡
自定义实现负载均衡|学习笔记
|
存储 负载均衡 NoSQL
nginx反向代理做负载均衡以及使用redis实现session共享配置详解
nginx反向代理做负载均衡以及使用redis实现session共享配置详解
590 0
nginx反向代理做负载均衡以及使用redis实现session共享配置详解