前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应对运营商网络故障高可用架构设计

应对运营商网络故障高可用架构设计

原创
作者头像
AIOPS
发布2021-09-13 14:32:42
1.6K1
发布2021-09-13 14:32:42
举报
文章被收录于专栏:高可用

背景描述

腾讯云上部分客户,基于腾讯云云产品能力,在同地域不同可用区,快速构建了业务级别的同城双活架构(如下图)。具备了单产品/单链路的高可用能力,同时也具备同城单可用区异常时的容灾的能力。

下面是某客户的架构图,绿色背景部分,由于强依赖与公网通信,在以下两种场景下,相应线路的用户,将全部不能访问该客户的APP;该客户的业务程序,也不能访问它以来的公网接口(比如支付接口),对业务造成极大影响:

  1. 运营商的城域网故障,但该运营商与其他运营商间连通。
  2. 运营商与腾讯云单线路(如电信线路)故障。

问题分析

从上面架构图可以看出,clb、业务层、数据层间通信,都是通过内网的,这部分不受公网影响。

用户访问接入层公网CLB的入向流量以及业务服务通过NAT网关访问公网资源的出向流量,这两个环节就受网络连通质量影响。

所以,只要在故障发生时,我们能快速恢复上面提到的入向流量、出向流量,即可有效避免这两个故障场景。

本文主要讨论出向流量受损时的应对方法。

解决方案

在云下一般的解决方案是,改造业务支持异地容灾模式或两地三中心模式。这种方案,有以下几个问题:

  1. 业务改造成本巨大
  2. 运维、运营体系有大的改动
  3. 切换成本、时间消耗巨大

在云上,基于腾讯云的云联网(实现不同地域间VPC内网互通)能力,就可以极速、低成本解决这个问题。

出向流量

使用内网CLB+Nginx(部署在有公网IP的CVM上面)在异地构建正向代理集群。为了对业务程序零侵入,我们选择的是四层透明代理。

故障发生时,将需要访问的公网域名,进行内网解析劫持,劫持到异地CLB内网地址。即可实现内网服务出向流量异地容灾

最终方案的架构图如下:

云联网介绍参考:https://cloud.tencent.com/document/product/877/18675

故障时切换动作

  1. 通过听云和云拨测,监控入口CLB、NAT网关连通质量,发现质量异常时,触发下面动作
  2. 对于上海本地受损用户,通过dnspod解析,将受损域名调度到其它地域的CLB;该CLB通过云联网回源上海业务提供服务。见上图绿色线条
  3. 对于业务服务访问公网资源的情况,改内网dns解析,走正向代理集群。见上图红色线条

注意事项

出入口收敛

此方案的前置是,业务要进行改造,并实现出口、入口的收敛(见第一个架构图)。同时,业务服务访问核心公网域名,建议采用备案制,做好正向代理侧内网dns解析的预案。

IP选型

建议正向代理集群的EIP,选择与主地域的NAT网关EIP类型不一样。即主地域EIP为BGP IP,则灾备IP选择三网IP,来实现异构容灾。

假如两边的EIP类型选择为一样的,在腾讯云侧IP链路故障场景下,上述方案失效。

访问延迟

如选用三网IP,部分访问链路质量会受影响。见下面绿色背景部分说明:

延迟说明:

  1. 图中的"50ms内"非承诺值,是在国内广州到北京(距离最远)场景下,测试值。具体数值以你的客户经理反馈为准
  2. 如对延迟敏感,可以考虑上海/南京两个地域,延迟会下降不少

灾备组件管理

在上面描述的两种场景下,nginx正向代理使用的dns server也有可能受影响。所以dns建议配置为和nginx的公网IP选型一致的DNS。

假如nginx的公网IP选择的是电信IP而不是腾讯云bgp IP,则nginx配置文件中的resolver指令,可以选择为114.114.114.114。

由于代理服务配置简单,并且变更的机会很少,所以这里的管理成本较低。

具体实施案例

测试资源分布

实例名称

用途

地域/可用区

ID

IP

云联网

多VPC互通

——

ccn-j622dwcj

——

VPC

业务可用区

上海

vpc-hbeixq6k

10.100.0.0/16

VPC

灾备可用区

广州

vpc-0xoknyzt

10.11.0.0/22

CLB

正向代理集群CLB

广州内网CLB

lb-mpv2j1ym

10.11.0.17

CVM

正向代理

广州三区

ins-4ufdkjk6

10.11.0.4

构建云联网

说明:CLB跨地域绑定CVM,需要CLB和CVM在同一个云联网。

1、创建云联网

2、创建后视图

构建正向代理集群

说明:这里为了简化各个业务服务的配置,选择nginx构建四层透明代理,兼容https请求

1、登陆广州三区正向代理CVM 10.11.0.4,并安装配置nginx,然后启动nginx

代码语言:javascript
复制
[root@VM-0-4-centos nginx]# rpm -q nginx
nginx-1.20.1-1.el7.ngx.x86_64
[root@VM-0-4-centos nginx]# cat /etc/nginx/nginx.conf
user  nginx;
worker_processes  auto;
.......
.......
stream {
    log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    access_log  /var/log/nginx/443.log proxy;
    open_log_file_cache off;
    resolver 114.114.114.114;
    server {
        listen 443;
        ssl_preread on;
        proxy_connect_timeout 5s;
        proxy_pass $ssl_preread_server_name:$server_port;

    }
}
[root@VM-0-4-centos nginx]# netstat -tunlp | grep 443
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      10751/nginx: master

2、将上述CVM加入广州正向代理集群CLB 10.11.0.17(注意是内网CLB)

3、在上海CVM 10.100.4.17访问地址,结果如下

代码语言:javascript
复制
[root@VM-4-17-tlinux ~]# cat /etc/hosts
127.0.0.1 VM-4-17-tlinux VM-4-17-tlinux
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4

::1 VM-4-17-tlinux VM-4-17-tlinux
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

[root@VM-4-17-tlinux ~]# curl "https://zhidao.baidu.com/daily/view?id=239227" > /tmp/nat.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 65969    0 65969    0     0   141k      0 --:--:-- --:--:-- --:--:--  141k

4、在上海CVM 10.100.4.17,配置域名zhidao.baidu.com解析为正向代理集群CLB IP,获取结果如下

代码语言:javascript
复制
[root@VM-4-17-tlinux ~]# cat /etc/hosts
127.0.0.1 VM-4-17-tlinux VM-4-17-tlinux
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4

::1 VM-4-17-tlinux VM-4-17-tlinux
::1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

10.11.0.17 zhidao.baidu.com
[root@VM-4-17-tlinux ~]# curl "https://zhidao.baidu.com/daily/view?id=239227" > /tmp/proxy.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 65912    0 65912    0     0  83569      0 --:--:-- --:--:-- --:--:-- 83538

从3、4步结果来看,通过NAT和通过正向代理集群,访问相同的URL,结果是一样的。正向代理集群能力得到验证

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景描述
  • 问题分析
  • 解决方案
    • 出向流量
      • 故障时切换动作
        • 注意事项
          • 出入口收敛
          • IP选型
          • 访问延迟
          • 灾备组件管理
      • 具体实施案例
        • 测试资源分布
          • 构建云联网
            • 构建正向代理集群
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档