Tổng quan về RIFT và cách thiết lập trên thiết bị Switch Juniper

Tổng quan về RIFT và cách thiết lập trên thiết bị Switch Juniper

 

Routing in Fat Tree (RIFT) là một giao thức định tuyến zero OpEx (không yêu cầu chi phí vận hành) giúp định tuyến gói tin trong các kiến trúc mạng CLOS-based và Fat Tree. Đây là một giao thức kết hợp giữa phương pháp link-state (trạng thái liên kết) và distance-vector (vector khoảng cách), mang lại nhiều lợi ích cho các IP Fabric, giao thức này dễ dàng quản lý và tăng cường khả năng phục hồi mạng.

Tìm hiểu về việc triển khai giao thức RIFT trên Junos

Giao thức RIFT là một giao thức định tuyến zero OpEx (không tốn chi phí vận hành) với các khả năng sau:

  • Hầu như không cần cấu hình, giúp đơn giản hóa việc quản lý IP fabric.
  • Khả năng theo dõi và ghi log mở rộng, hỗ trợ khả năng mở rộng cho IP fabric.
  • Tận dụng tối đa các đường truyền mà không gây vòng lặp, tăng độ bền vững cho mạng IP fabric.

Là một giao thức lai giữa distance-vector và link-state, RIFT kế thừa các lợi ích của cả hai loại giao thức và mang lại các ưu điểm bổ sung như:

  • Hội tụ nhanh nhất có thể.
  • Tự động phát hiện topology.
  • Giảm thiểu số lượng tuyến trên các thiết bị Top-of-Rack (ToR).
  • Hỗ trợ mức độ cao của Equal-Cost Multipath (ECMP).

Tổng quan về giao thức RIFT

Với sự gia tăng triển khai các trung tâm dữ liệu dựa trên IP forwarding theo kiến trúc CLOS và fat-tree (còn gọi là mô hình spine-leaf), các giao thức IGP và BGP hiện đang được sử dụng để xử lý các quyết định định tuyến cần thiết. Tuy nhiên, cách tiếp cận của các giao thức này dựa trên các phần mở rộng phức tạp và tốn kém, không đáp ứng được yêu cầu của mạng IP fabric. Điều này là do IGP và BGP ban đầu được thiết kế cho các mô hình mạng tổng quát và thưa thớt. RIFT (Routing in Fat Trees) ra đời để khắc phục các vấn đề này và đáp ứng nhu cầu của các hệ thống IP fabric hiện đại.

Giao thức RIFT là một giao thức tiêu chuẩn mở. Đây là một giao thức lai giữa: Distance-vector: Sử dụng tính toán khuếch tán hướng về các thiết bị leaf. Link-state: Sử dụng tính toán phân tán và flooding hướng về các thiết bị spine. Nói cách khác, khi giao thức RIFT được kích hoạt các thiết bị sẽ flood thông tin trạng thái liên kết (link-state) theo hướng Bắc (từ leaf lên spine). Mọi switch (trừ các thiết bị leaf) sẽ tạo tuyến mặc định (default route) theo điều kiện bình thường, sau đó flood tuyến này theo hướng Nam (từ spine xuống leaf).

Các tính năng chính của giao thức RIFT

+ Tự động xây dựng topology fat-tree.

+ Tự động phát hiện các liên kết bị mắc cáp sai trong mạng IP fabric.

+ Giảm thiểu số lượng trạng thái định tuyến cần lưu trữ tại mỗi tầng của trung tâm dữ liệu.

+ Tự động giảm tải lượng flooding trong hệ thống.

+ Tự động phân rã (disaggregate) các tiền tố địa chỉ khi có lỗi liên kết hoặc lỗi node, giúp ngăn chặn hiện tượng black-holing và định tuyến kém tối ưu.

+ Hỗ trợ định tuyến không dựa trên ECMP (non-ECMP forwarding).

+ Tự động cân bằng lại lưu lượng hướng về spine dựa trên băng thông khả dụng.

+ Đồng bộ một kho dữ liệu key-value hạn chế có thể được sử dụng sau khi giao thức hội tụ, ví dụ để khởi tạo các cấp độ chức năng cao hơn trên các node.

Để biết thêm chi tiết, xem bản dự thảo Internet draft-ietf-rift-rift-09 (hết hạn vào ngày 7/5/2020) về RIFT: Routing in Fat Trees.

Ảnh hưởng của việc triển khai giao thức RIFT trên Junos đối với hiệu suất mạng

Việc tích hợp giao thức RIFT vào hệ điều hành Junos OS có một số ảnh hưởng đến tải định tuyến (route load) và mức sử dụng bộ nhớ (memory utilization) trong các kiến trúc trung tâm dữ liệu phổ biến. Điều này là do giao thức RIFT có khả năng tận dụng tất cả các lõi xử lý có sẵn để cải thiện hiệu suất.

Tuy nhiên, cấu hình động (dynamic configuration) của RIFT chưa được hỗ trợ hoàn toàn. Khi thay đổi cấu hình thông qua CLI của Junos OS, giao thức RIFT có thể bị khởi động lại, dẫn đến quá trình tái hội tụ (reconvergence), gây ra mất lưu lượng (traffic loss) trong thời gian hội tụ lại.

Các tính năng không được hỗ trợ với giao thức RIFT

Triển khai giao thức RIFT trên Junos OS tuân thủ các tiêu chuẩn được mô tả trong bản dự thảo RIFT Internet Draft tại: https://datatracker.ietf.org/doc/draft-ietf-rift-rift/. Tuy nhiên, nó không hỗ trợ các tính năng sau:

  • Hệ thống logic (Logical systems)
  • SNMP
  • Nâng cấp phần mềm không gián đoạn (ISSU) và nâng cấp phần mềm liên tục
  • Chuyển đổi dự phòng bộ điều khiển định tuyến (GRES - Graceful Routing Engine Switchover)
  • Telemetry
  • Các tính năng của giao thức RIFT không được triển khai:
    • Kho lưu trữ key-value (Key-Value store)
    • Kết nối ngang hàng (Horizontal links)
    • Hỗ trợ định tuyến trực tiếp giữa các thiết bị leaf (Leaf-2-Leaf support)
    • Giải kết hợp tiêu cực (Negative disaggregation)
    • Thuộc tính di động trên các tiền tố địa chỉ (Mobility attributes on prefixes)
    • Gán nhãn trên giao diện (Label binding on interfaces) 

Kích hoạt giao thức RIFT

Gói phần mềm RIFT là một gói độc lập, và phiên bản triển khai của Juniper được lập trình bằng ngôn ngữ hiện đại, an toàn về bộ nhớ và luồng xử lý (thread-safe). Thiết kế này giúp tối ưu hóa việc sử dụng kiến trúc bộ xử lý đa lõi (multi-core processor architectures).

Giao thức RIFT sẽ tự động khởi tạo các tiến trình RIFT liên quan và áp dụng các giá trị cấu hình mặc định (zero-touch configuration). Khi được kích hoạt, giao thức này tự động bật RIFT trên tất cả các giao diện Ethernet.

Các thông số cũng được thiết lập tự động như System ID: Được suy ra từ địa chỉ MAC của hệ thống. Level: Được xác định tự động thông qua quá trình khám phá (discovery phase) của giao thức RIFT.

**Tóm tắt: RIFT hầu như không yêu cầu cấu hình thủ công. Khi kích hoạt RIFT, nó sẽ tự động kế thừa cấu hình cần thiết từ gói junOS-RIFT, giúp quản lý mạng IP fabric đơn giản hơn.

Trước khi bắt đầu

Bạn cần tải xuống và cài đặt gói phần mềm RIFT trên thiết bị trước khi kích hoạt giao thức.

Cài đặt giao thức RIFT

- Tải xuống gói junos-rift từ gói phần mềm yêu cầu, gói này cần chạy cùng với phần mềm Junos OS baseline.

**Lưu ý:
+ Junos OS baseline phải là phiên bản 64-bit và bắt đầu từ Junos OS 19.4R1.
+ Khi cài đặt junos-rift, các thiết bị phải được kết nối theo kiến trúc CLOS.
+ Vì junos-rift là một gói riêng biệt, nên nó có thể được cấp phép độc lập với gói Junos OS baseline.

Việc cấp phép junos-rift được thực hiện theo Thỏa thuận cấp phép người dùng cuối (EULA), đặc biệt là các mục 15, 16 và 17.

- Trích xuất (extract) gói junos-rift từ phần mềm đã tải xuống và sao chép nó vào thư mục /var/tmp trên thiết bị chủ.

- Sau khi tải xuống thành công, chạy lệnh sau để cài đặt:

user@host> request system software add package-name

Cho ví dụ:

user@host> request system software add /var/tmp/junos-rift.tgz

Để kích hoạt giao thức RIFT, bạn phải kích hoạt gói phần mềm RIFT trên thiết bị của mình. Có hai cách để kích hoạt RIFT: Sử dụng lệnh request rift package activate. Tải thủ công và kết hợp cấu hình RIFT từ một tệp cấu hình được chỉ định với cấu hình hiện tại trong CLI.

Kích hoạt RIFT bằng lệnh request rift package activate

Sau khi cài đặt thành công gói junos-rift, hãy chạy lệnh sau:

user@host >request rift package activate

Lệnh kích hoạt tự động commit cấu hình RIFT

Kích hoạt RIFT bằng lệnh load

Để tải cấu hình RIFT thủ công:

- Sau khi cài đặt thành công gói junos-rift, chạy lệnh sau để tải và kết hợp cấu hình RIFT từ một tệp cấu hình được chỉ định với cấu hình hiện tại trong CLI: 

user@host# load merge /etc/config/junos-rift/package-defaults.conf

user@host# load merge /etc/config/junos-rift/platform/platform-defaults.conf

Ở đây, platform là thiết bị chủ và có thể là một trong các giá trị sau: mx, qfx, vmx

- commit cấu hình để áp dụng thay đổi.

user@host> commit

Kích hoạt RIFT trong mô hình CLOS (Chế độ ZTP)

**Lưu ý: Để kích hoạt gói phần mềm RIFT trên mô hình CLOS, cần có cấu hình bổ sung. Bạn phải xác định các nút top-of-fabric trong hệ thống mạng và cấu hình tất cả các thiết bị top-of-fabric để ghi đè auto level trong cấu hình mặc định.

Cách kích hoạt gói phần mềm RIFT trong mô hình CLOS:

- Ghi đè auto level trong cấu hình mặc định. Chỉ định các cấp độ (levels) theo cách thủ công nếu cần.

[edit protocols rift]

user@host# set level top-of-fabric

- Commit cấu hình bổ sung.

user@host> commit

Tùy chọn theo dõi (Traceoptions) cho RIFT

Mặc dù giao thức RIFT tự động kế thừa cấu hình cần thiết, nhưng bạn có thể cấu hình theo dõi tối thiểu như một tùy chọn bổ sung.

Cách cấu hình traceoptions cho RIFT:

- Xác định traceoptions và proxy-process trong khối cấu hình rift.

[edit protocols rift]

user@host# set traceoptions file size size

user@host# set traceoptions file files number

user@host# set traceoptions level level

user@host# set traceoptions flag flag

user@host# set proxy-process traceoptions file size size

user@host# set proxy-process traceoptions level level

user@host# set proxy-process traceoptions file files number

user@host# set proxy-process traceoptions flag flag

Ví dụ:

[edit protocols rift]

user@host# set traceoptions file size 1000000

user@host# set traceoptions file files 4

user@host# set traceoptions level info

user@host# set traceoptions flag node

user@host# set proxy-process traceoptions file size 1000000

user@host# set proxy-process traceoptions level info

user@host# set proxy-process traceoptions file files 4

user@host# set proxy-process traceoptions flag if-events

Xác minh cấu hình RIFT

Bạn có thể kiểm tra cấu hình giao thức RIFT từ các cấp độ phân cấp sau:

+ [groups rift-defaults]

+ [interfaces interface-range rift-interfaces]

+ [protocols rift]

[edit]

user@host# show groups rift-defaults

protocols {

    rift {

        node-id auto;

        level auto;

        lie-receive-address {

            family {

                inet 224.0.0.120;

                inet6 ff02::a1f7;}}

        interface <*> {

            lie-transmit-address {

                family {

                    inet 224.0.0.120;

                    inet6 ff02::a1f7;}}

            bfd-liveness-detection minimum-interval 1000;}}}

[edit]

user@host# show interfaces interface-range rift-interfaces

member ge-0/0/*;

description "Match interfaces that RIFT could use.";

[edit]

user@host# show protocols rift

apply-groups rift-defaults;

interface rift-interfaces;

Bạn cũng có thể xác minh cấu hình RIFT bằng cách xem các giá trị mặc định được áp dụng từ gói junos-rift. Để thực hiện việc này, chạy lệnh sau: show configuration protocols rift | display inherited

Ví dụ:

user@host> show configuration protocols rift | display inherited

##

## 'auto' was inherited from group 'rift-defaults'

##

node-id auto;

level auto;

##

## 'lie-receive-address' was inherited from group 'rift-defaults'

##

lie-receive-address {

 ##

 ## 'family' was inherited from group 'rift-defaults'

 ##

 family {

 ##

 ## '224.0.0.120' was inherited from group 'rift-defaults'

 ##

 inet 224.0.0.120;

 ##

 ## 'ff02::a1f7' was inherited from group 'rift-defaults'

 ##

 inet6 ff02::a1f7;}}

interface ge-0/0/0.1 {

 ##

 ## 'lie-transmit-address' was inherited from group 'rift-defaults'

 ##

 lie-transmit-address {

 ##

 ## 'family' was inherited from group 'rift-defaults'

 ##

 family {

 ##

 ## '224.0.0.120' was inherited from group 'rift-defaults'

 ##

 inet 224.0.0.120;

 ##

 ## 'ff02::a1f7' was inherited from group 'rift-defaults'

 ##

 inet6 ff02::a1f7;}}

 ##

 ## 'bfd-liveness-detection' was inherited from group 'rift-defaults'

 ## ‘400’ was inherited from group 'rift-defaults'

 ##

 bfd-liveness-detection minimum-interval 400;}

Bảng 1 liệt kê các lệnh bạn có thể sử dụng để kiểm tra cấu hình và trạng thái của giao thức RIFT.

Bảng 1: Các lệnh xác minh cấu hình giao thức RIFT

 

CommandDescription
show riftInspect the runtime state of the RIFT protocol.
show route protocol riftThe RIFT protocol can be used in policies and commands where other protocols are accepted.
show route protocol rift extensive display-client-dataView detailed RIFT-installed routes.
clear rift database contentClear the RIFT database.
restart rift-proxydRestart the RIFT protocol.

Để biết thêm thông tin, hãy xem tệp FAQ trong gói phần mềm phân phối.

Khắc phục sự cố giao thức RIFT

Giao thức RIFT không tạo tệp lỗi core dump trừ những trường hợp cực kỳ nghiêm trọng. Nó báo cáo mọi lỗi thông qua hệ thống logging chi tiết và đôi khi kèm theo backtrace khi thoát. Quá trình xử lý RIFT cung cấp các sự kiện tracing có thể cấu hình và thu thập bằng cách sử dụng lệnh traceoptions.

Bạn có thể tham khảo các hướng dẫn sau để khắc phục sự cố RIFT:

- Sự cố hình thành kết nối (Forming Adjacency)

    + Vấn đề:

  • Kết nối RIFT adjacency liên tục bị gián đoạn (flapping), hiển thị lỗi Multiple Neighbors hoặc Remote Uses Our Own SystemID.

    + Giải pháp:

  • Giao thức RIFT không hỗ trợ nhiều hơn hai neighbor trên một liên kết Ethernet khi thiết lập kết nối point-to-point.
  • Kiểm tra và sửa lỗi cáp mạng, tránh các trường hợp loopback trên chính thiết bị.

- Cấp độ không xác định (Undefined Level)

    + Vấn đề:

  • Tất cả các switch hiển thị undefined level và không thể thiết lập kết nối three-way adjacency.
  • Tuy nhiên, các Link Information Elements (LIEs) vẫn được gửi và nhận.

    + Giải pháp:

  • Có thể do top-of-fabric level chưa được cấu hình.
  • Tất cả các thiết bị top-of-fabric phải được thiết lập level xác định để làm điểm neo cho Zero Touch Provisioning (ZTP).

- Địa chỉ Loopback (Loopback Address)

    + Vấn đề:

  • Không thể nhận địa chỉ loopback trên các node trong RIFT.

    + Giải pháp:

  • Cách đơn giản nhất để có tất cả các địa chỉ loopback trong top-of-fabric là cấu hình địa chỉ loopback trên từng node cần thiết.
  • Sau đó, phân phối lại địa chỉ này theo hướng northbound vào giao thức RIFT.
  • Cấu hình cần thiết để thực hiện điều này sẽ được chỉ định trong tài liệu cấu hình.

[edit policy-options]

policy-statement lo0-rift {

    term 0 {

        from {

            protocol direct;

            route-filter loopback-address exact;}

        then accept;}

    term default {

        then reject;}}

[edit protocols rift]

export {

    northbound {

        lo0-rift;}}

Cấu hình này cho phép tất cả các leaf có thể ping địa chỉ loopback của các node khác, ngoại trừ các thiết bị top-of-fabric. Nếu các thiết bị top-of-fabric cũng cần được truy cập từ các thiết bị leaf, hoặc ngược lại, thì các địa chỉ loopback của top-of-fabric cần được công bố xuống một cấp thấp hơn (southbound). Cấu hình sau đây là cần thiết để thực hiện điều này:

[edit protocols rift]

export {

    southbound {

        lo0-rift;}}

**Lưu ý: Để cho phép các địa chỉ top-of-fabric được truyền tới tất cả các leaf nodes, hãy cấu hình tùy chọn allow-rift-routes trong cấp cấu hình: [edit protocols rift export southbound]

- Thông báo lỗi nhật ký hệ thống (System Log Error Messages)

Quá trình RIFT sẽ tạo các thông báo nhật ký hệ thống để ghi lại các lỗi liên quan đến việc tích hợp giao thức RIFT vào hệ điều hành Junos OS. Để giải thích các thông báo lỗi này, tham khảo các mục sau:

  • RIFT_PROXYD_ALREADY_RUNNING – Một phiên bản khác của quá trình RIFT đã đang chạy.
  • RIFT_PROXYD_CONNECT_RIFT – Kết nối đến quá trình RIFT cục bộ thất bại.

Để biết thêm chi tiết về các thông báo lỗi nhật ký hệ thống, hãy xem System Log Explorer.

 

Chúc các bạn thực hiện thành công. Hi vọng bài viết này sẽ giúp ích cho các bạn trong công việc. Nếu bạn có vấn đề gì thắc mắc đừng ngần ngại liên hệ với chúng tôi theo thông tin dưới đây để được hỗ trợ thêm.

Hẹn gặp lại các bạn trong các bài viết tiếp theo !

 

CÔNG TY CỔ PHẦN DỊCH VỤ CÔNG NGHỆ DATECH

• Địa chỉ: Số 23E4 KĐT Cầu Diễn, Tổ 7, Phú Diễn, Bắc Từ Liêm, Hà Nội

• Điện thoại: 02432012368

• Hotline: 098 115 6699

• Email: info@datech.vn

• Website: https://datech.vn