美文网首页
使用DNS权重轮询实现业务流量灰度切换

使用DNS权重轮询实现业务流量灰度切换

作者: 行者深蓝 | 来源:发表于2021-04-23 10:55 被阅读0次

DNS设置

  1. 首先将DNS解析服务升级为支持权重轮询的版本

image
  1. 添加多条DNS解析A记录

image
  1. 开启权重配置

image
  1. 设置DNS权重值

image

流量切换

  1. 业务域名-> A记录 -> Old-LB 权重 90%

A记录 -> NEW-LB 权重 10%

中间逐渐调整OLD-LB,NEW-LB流量比例,直到流量全部切到Ucloud-LB

  1. 业务域名-> A记录 -> OLD-LB 权重 0%

A记录 -> NEW-LB 权重 100%

  1. 最后确认业务域名返回解析记录的全部是NEW-LB IP后,去掉OLD-LB解析记录,完成全部DNS流量切换,如果考虑客户端所在网络DNS缓存时间长短不同的问题,可以保持OLD-LB在继续提供24小时,然后再彻底下线服务

切量失败回滚方案

极端情况,如果在灰度切的部分DNS流量有问题,可以参考如下备选方案

  1. 调整权重,设置 OLD-LB 权重 100% NEW-LB 0%
  2. 启用备用代理, NEW-LB -> nginx转发 -> OLD-LB 把客户端网络缓存部分的请求转发回原有服务

完整验证过程

  1. k8s集群中,创建nginx服务,参考如下:

kubectl create ns nginx-1

cat > default.conf << EOF
server {

    listen 80 default_server;
    server_name _;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm; 
    }
}
EOF
kubectl create ns nginx-1
kubectl delete configmap nginx-configmap -n nginx-1
kubectl create configmap nginx-configmap --from-file=default.conf -n nginx-1

cat > nginx-deploy-svc.yaml << EOF
apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: nginx-1
  labels:
    app: nginx
spec:
  type: LoadBalancer
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
    name: http
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: nginx-1 
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      volumes:
      - name: configmap-volume
        configMap:
          name: nginx-configmap 
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /etc/nginx/conf.d
          name: configmap-volume
EOF
kubectl apply -f nginx-deploy-svc.yaml  

  1. 查看svc ip

kubectl get svc -n nginx-1

kubectl get svc -n nginx-2

[root@10-8-57-25 ~]# kubectl  get svc -n nginx-1
NAME    TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
nginx   LoadBalancer   172.17.191.190   152.32.239.127   80:34829/TCP   16m
[root@10-8-57-25 ~]# kubectl  get svc -n nginx-2
NAME    TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE
nginx   LoadBalancer   172.17.143.215   101.36.127.247   80:44440/TCP   9m41s

  1. 设置DNS解析记录

image image
  1. 配置APM监测和日志分析

观测流量调度和服务可用性

2021年4月20日 5:25 第一次配置权重 9:1

image image image

2021年4月21日 8:45 调整权重 9:1

image image image

2021年4月21日 3:39 调整权重 0:100

image image image

结论

在测试环境,通过DNS配置A记录权重调整,请求流量从LB 101.36.127.247 平滑切换到 152.32.239.127,在听云平台开启任务监测 全国85个地区,模拟客户端访问业务域名, 平均可用性可达99.98,每次调整权重,可用性未出现波动

相关文章

  • 使用DNS权重轮询实现业务流量灰度切换

    DNS设置 首先将DNS解析服务升级为支持权重轮询的版本 添加多条DNS解析A记录 开启权重配置 设置DNS权重值...

  • 接入层代理层架构设计

    接入层 dns轮询实现负载均衡:以华为云举例 域名解析可以配置50条a记录,dns会根据权重返回ip,智能解析还支...

  • 权重轮询的实现

    1.原理 通过对各个实例的不同权重来分配请求,例如nginx的转发中用到。 2.模拟个例子 假设有四个实例A,B,...

  • java中随机数Random VS ThreadLocalRan

    由于功能改造需要做灰度上线,通过使用权重来控制让一部分流量走原来的逻辑,一部分流量走改造后的逻辑,基于权重的方案需...

  • Dubbo的四种负载均衡方式

    (1) 基于权重的轮询负载均衡 计算权重,根据权重配置查询次数,然后轮询。 (2)基于权重的随机负载均衡 ...

  • Nginx中的负载均衡算法

    负载均衡算法 轮询(Round Robin)nginx默认负载均衡算法,可以配合权重使用,默认情况权重是1。ups...

  • 基于Docker快速搭建DNS Server

    我们在项目中有时会要使用到DNS服务,比如DNS轮询服务、基于DNS搭建高可用的Eureka注册中心等。 那么如何...

  • 利用OpenGL ES实现灰度滤镜及马赛克滤镜

    实现效果 灰度滤镜 实现灰度滤镜的方式有很多,但原理都大同小异,提高绿色的权重,或者只保留绿色值。大致分为以下五种...

  • [开源]Golang实现的分布式WebSocket微服务

    使用场景 在实现业务的时候,我们常常有些需求需要系统主动发送消息给客户端,方案有轮询和长连接,但轮询需要不断的创建...

  • 【问答】中间件

    nginx的请求转发算法,如何配置根据权重转发 负载均衡策略:内置策略:轮询(默认)、加权轮询(处理1次连接则权重...

网友评论

      本文标题:使用DNS权重轮询实现业务流量灰度切换

      本文链接:https://www.haomeiwen.com/subject/cfkcrltx.html