腾讯云上部分客户,基于腾讯云云产品能力,在同地域不同可用区,快速构建了业务级别的同城双活架构(如下图)。具备了单产品/单链路的高可用能力,同时也具备同城单可用区异常时的容灾的能力。
下面是某客户的架构图,绿色背景部分,由于强依赖与公网通信,在以下两种场景下,相应线路的用户,将全部不能访问该客户的APP;该客户的业务程序,也不能访问它以来的公网接口(比如支付接口),对业务造成极大影响:
从上面架构图可以看出,clb、业务层、数据层间通信,都是通过内网的,这部分不受公网影响。
用户访问接入层公网CLB的入向流量以及业务服务通过NAT网关访问公网资源的出向流量,这两个环节就受网络连通质量影响。
所以,只要在故障发生时,我们能快速恢复上面提到的入向流量、出向流量,即可有效避免这两个故障场景。
本文主要讨论出向流量受损时的应对方法。
在云下一般的解决方案是,改造业务支持异地容灾模式或两地三中心模式。这种方案,有以下几个问题:
在云上,基于腾讯云的云联网(实现不同地域间VPC内网互通)能力,就可以极速、低成本解决这个问题。
使用内网CLB+Nginx(部署在有公网IP的CVM上面)在异地构建正向代理集群。为了对业务程序零侵入,我们选择的是四层透明代理。
故障发生时,将需要访问的公网域名,进行内网解析劫持,劫持到异地CLB内网地址。即可实现内网服务出向流量异地容灾
最终方案的架构图如下:
云联网介绍参考:https://cloud.tencent.com/document/product/877/18675
此方案的前置是,业务要进行改造,并实现出口、入口的收敛(见第一个架构图)。同时,业务服务访问核心公网域名,建议采用备案制,做好正向代理侧内网dns解析的预案。
建议正向代理集群的EIP,选择与主地域的NAT网关EIP类型不一样。即主地域EIP为BGP IP,则灾备IP选择三网IP,来实现异构容灾。
假如两边的EIP类型选择为一样的,在腾讯云侧IP链路故障场景下,上述方案失效。
如选用三网IP,部分访问链路质量会受影响。见下面绿色背景部分说明:
延迟说明:
在上面描述的两种场景下,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
[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访问地址,结果如下
[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,获取结果如下
[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 删除。