Динамическое управление пропускной способностью с использованием Container LSP (TE++)

18 Jun 2019 - somovis

Динамическое управление пропускной способностью с использованием Container LSP (TE++).

Почему TE++ и зачем это всё

Проблемы, из-за которых был придуман cLSP (TE++):

Решения проблем, которые предлагает cLSP (TE++):

Реализация Container LSP

Чтобы не быть переводчиком, рекомендую прочитать документацию про реализацию 3 Container LSP, а русскоязычным пользователям для более детального ознакомления статью на habr 4.

Краткое описание:

Container LSP создаёт sub-LSPs основываясь на вводных параметрах + локальной статистике. Например, есть номинальные 2 sub-LSPs в контейнере с min bw 1g, max bw 8g, так же указывается, что надо делать splitting (добавление sub-LSP(s) при достижении и/или преодолении указанного параметра в splitting-bandwidth) с функцией sampling, учитывая один из возможных алгоритмов 5 за период нормализации, например, при достижении и/или преодолении 5g sampling average aggregate. При достижении и/или преодолении sampling average aggregate в течении периода нормализации добавится ещё sub-LSP(s)*n, с такими-же параметрами (sub-LSPs наследуют настройки контейнера и во время нормализации происходит распределение bw между всеми sub-LSPs принадлежащими к этому контейнеру), и будет участвовать в ECMP.

Пример конфигурации

Меня попросили для ясности описать почему использовались те или иные команды в конфигурации. Я опишу в комментариях к конфигурации часть команд не относящихся к данной статье. Для всего остального рекомендую воспользоваться CLI Explorer 6

groups {
    container-lsp {
        protocols {
            mpls {
                container-label-switched-path <*> {
                    label-switched-path-template {
                        lsp-template-backbone;
                    }
                    splitting-merging {
                        minimum-member-lsps 4;
                        maximum-member-lsps 12; ## если не задан maximum-member-lsps, то значение по умолчанию будет 64
                        splitting-bandwidth 5g;
                        merging-bandwidth 1g;
                        normalization {
                            normalize-interval 10800;
                            failover-normalization;
                            normalization-retry-duration 20;
                            normalization-retry-limits 3;
                        }
                        sampling {
                            use-average-aggregate;
                        }
                    }
                }
            }
        }
    }
    ospf-backbone {                     
        protocols {                   
            ospf {                      
                area 0.0.0.0 {          
                    interface <*> {     
                        interface-type p2p;
                        node-link-protection;
                        authentication {
                            md5 5 key "***"; ## SECRET-DATA
                        }
                        flood-reduction;
                        bfd-liveness-detection {
                            version automatic;
                            minimum-interval 50;
                            multiplier 3;
                        }
                    }
                }
            }
        }
    }
    rsvp-backbone {
        protocols {
            rsvp {
                interface <*> {
                    authentication-key "***"; ## SECRET-DATA
                    aggregate;
                    reliable;
                    subscription 85;
                    link-protection;
                }
            }
        }
    }
    interface-mpls {
        interfaces {
            <*> {
                unit 0 {
                    family mpls {
                        maximum-labels 5; ## Для EL, FRR и LDP over RSVP
                    }
                }
            }
        }
    }
}
chassis {
    network-services enhanced-ip; ## MUST
}
interfaces {
    xe-0/0/7 {
        apply-groups [ interface-mpls ];
        description "link with site2-p1";
        mtu 9200; ## depends on label stack
        hold-time up 5000 down 0; ## бывает, что обрыв ВОЛС происходит не сразу и интерфейс начинает флапать, чтобы избежать этого, используется hold-time up в совокупности с BER и/или OAM LFM \(которых нету в данной конфигурации в виду избыточности в рамках этой статьи\)
        unit 0 {
            family inet {
                address 10.10.10.10/31;
            }
        }
    }
}
routing-options {
  forwarding-table {
       export Load_balance; ## MUST
       ecmp-fast-reroute; ## полезная фича для уменьшения потерь во время выхода из группы ECMP NH\(s\)
   }
}
protocols {
    rsvp {
        apply-groups rsvp-backbone;
        node-hello;
        preemption aggressive;
        interface xe-0/0/7.0 {
            link-protection;
        }
    }
    mpls {
        statistics {
            file auto-bw size 10m;
            interval 60;
            auto-bandwidth;
            transit-statistics-polling;
            traffic-class-statistics;
        }
        optimize-adaptive-teardown {
            p2p;
        }
        smart-optimize-timer 180;
        label-switched-path lsp-template-backbone {
            template;
            ldp-tunneling;
            retry-timer 3;
            optimize-timer 3600;
            record;
            least-fill;
            adaptive;
            fast-reroute;
            auto-bandwidth {
                adjust-interval 7200;
                adjust-threshold 10;
                minimum-bandwidth 1k;
                maximum-bandwidth 8500000000;
                adjust-threshold-overflow-limit 5;
                adjust-threshold-underflow-limit 5;
                resignal-minimum-bandwidth;
            }
        }
        container-label-switched-path site2-p1 {
            apply-groups container-lsp;
            to 10.10.10.1;
        }
        interface xe-0/0/7.0;
    }
    ospf {
        spf-options {
            delay 50;
            holddown 5000;
            rapid-runs 3;
        }
        backup-spf-options {
            remote-backup-calculation;
            per-prefix-calculation all;
            node-link-degradation;
        }
        traffic-engineering; ## MUST
        reference-bandwidth 100g;
        lsa-refresh-interval 30;
        no-rfc-1583;
        area 0.0.0.0 {
            interface lo0.0;
            interface xe-0/0/7.0 {
                apply-groups ospf-backbone;
            }
        }
    }
    ldp { ## optional
        auto-targeted-session;
        track-igp-metric;
        mtu-discovery;
        deaggregate;
        interface lo0.0;
        session-protection;
    }
}
policy-options {
    policy-statement Load_balance {
        term 1 {
            then {
                load-balance per-packet;
            }
        }
    }
}

Ссылки

1. Traffic Engineering for the Modern MPLS Backbone
2. Multi-path Label Switched Paths Signaled Using RSVP-TE
3. Junos OS Container LSP Implementation
4. Container LSP
5. Sampling Protocols MPLS

Tags: mpls rsvp clsp