美文网首页
使用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权重轮询实现业务流量灰度切换

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