RIFT 概述和设置
胖树路由 (RIFT) 是一种零 OpEx 路由协议,可用来路由基于 CLOS 和胖树网络拓扑的变体中的数据包。它是链路状态和距离矢量技术的混合体,为 IP 交换矩阵提供了多种优势,如易于管理、增加网络弹性。
了解胖树路由 (RIFT) 协议中 Junos 的实施
RIFT 协议的优势
RIFT 协议是一种零 OpEx 路由协议,可以实现:
几乎无需任何必要配置,使 IP 交换矩阵更易于管理。
广泛的跟踪和日志功能可为 IP 交换矩阵提供扩展优势。
在无环路的情况下最大限度地利用路径,从而增加 IP 交换矩阵的弹性。
作为距离矢量和链路状态协议的混合体,RIFT 协议继承了这两种协议类型的优势,并提供了额外的优势,例如:
尽可能快的融合。
自动检测拓扑结构。
架顶式设备上的最小路由。
高度等价多路径 (ECMP)。
RIFT 协议概述
随着 CLOS 和胖树架构(也称为主干和分叶模型)中基于 IP 转发的数据中心部署的增加,目前使用内部网关协议 (IGP) 和 BGP 来处理必要的路由决策。这些协议使用的方法依赖于复杂且成本高昂的运维扩展,无法满足此类 IP 交换矩阵的要求。这是因为 IGP 和 BGP 协议最初是为通用和稀疏网络拓扑而构建的。胖树路由 (RIFT) 克服了这些问题,并满足了不断发展的 IP 交换矩阵的需求。
RIFT 协议是一种开放标准协议。它是距离矢量协议的混合版本,使用对叶的扩散计算,以及使用对主干的分布式计算和泛洪的链路状态协议。换句话说,启用 RIFT 协议后,设备会向北方向泛洪其链路状态信息,而除叶交换机外,每台交换机都会生成一个默认路由(在正常条件下),该路由在南方向泛洪。
RIFT 协议的主要特性:
胖树拓扑的自动构造。
自动检测 IP 交换矩阵的电缆错误链路。
最大限度地减少数据中心网络各级别保存的路由状态信息量。
自动将泛洪量降至最低。
自动分解链路和节点故障的前缀,以防止黑洞和路由欠佳。
允许非 ECMP 转发。
根据可用带宽自动重新平衡流向主干的流量。
同步可在协议融合后使用的有限键值数据存储;例如,在节点上引导更高级别的功能。
有关更多详细信息,请参阅互联网草案 draft-ietf-rift-rift-09(2020 年 5 月 7 日到期) RIFT:胖树中的路由。
Junos 实施的 RIFT 协议对网络性能的影响
将 RIFT 协议集成到 Junos OS 中对常见数据中心架构的路由负载和内存利用率有一定影响。这是因为 RIFT 协议能够消耗所有可用内核来提高协议性能。
不完全支持 RIFT 的动态配置。Junos OS CLI 中的配置更改可能会重新启动 RIFT 协议,从而导致协议重新融合,并导致流量丢失。
RIFT 协议不支持的功能
RIFT 的Junos OS实施符合 https://datatracker.ietf.org/doc/rfc9692/ 的 RIFT 互联网草案中描述的标准,但不支持以下功能:
逻辑系统
SNMP
不中断服务的软件升级 (ISSU) 和不间断软件升级
平滑路由引擎切换 (GRES)
遥测
RIFT 的 Junos OS 实施不会实现:
键值存储
水平链接
叶式 2 叶式支持
负分解
前缀上的移动性属性
接口上的标签绑定
启用 RIFT 协议
RIFT 软件包是一个独立的软件包,该协议的瞻博网络实施以现代内存和线程安全编程语言执行,旨在优化多核处理器架构的利用率。
RIFT 协议初始化关联的 RIFT 进程,并通过配置应用零接触配置默认值。它还会自动在所有以太网接口上启用 RIFT。会自动 system-id 从系统 MAC 地址派生,并通过 level 协议操作的发现部分自动确定。
RIFT 协议需要的必要配置接近于零。启用 RIFT 协议时,它会自动从软件包默认值继 junos-rift 承所需配置,从而简化 IP 交换矩阵的管理。
开始之前
在启用协议之前,您必须先在设备上下载并安装 RIFT 软件包。
要安装 RIFT 协议,请执行以下操作:
从需要与基准 Junos OS 软件一起运行的软件包中下载特殊
junos-rift软件包。注意:部署软件包的
junos-rift基准 Junos OS 软件必须是 64 位版本,并且从 Junos OS 19.4R1 版开始。安装
junos-rift软件包时,设备必须以 CLOS 架构连接电缆。由于是一个单独的软件包,因此
junos-rift可以与 Junos OS 基准软件包分开许可。软件包的
junos-rift许可根据 《最终用户许可协议 》授予,特别强调第 15、16 和 17 条。
从软件包中,解压
junos-rift软件包并将其下载到/var/tmp主机设备上的目录中。成功下载软件包后,运行以下命令:
user@host> request system software add package-name
例如:
user@host> request system software add /var/tmp/junos-rift.tgz
要启用 RIFT 协议,必须在设备上激活 RIFT 软件包。您可以使用命令 request rift package activate 激活 RIFT,也可以手动加载指定文件中的 RIFT 配置并将其与 CLI 中的当前配置组合在一起。
Enabling RIFT Using Activate Command
要使用以下 request rift package activate 命令激活 RIFT 软件包:
junos-rift软件包后,运行以下命令:
user@host >request rift package activate
activate 命令会自动提交 RIFT 配置。
Enabling RIFT Using Load Command
要手动加载 RIFT 配置:
成功安装
junos-rift软件包后,运行以下命令,将指定文件中的 RIFT 配置加载并与 CLI 中的当前配置合并:user@host# load merge /etc/config/junos-rift/package-defaults.conf user@host# load merge /etc/config/junos-rift/platform/platform-defaults.conf
这里是platform主机设备,可以是以下任何值 —mx 、 或 qfxvmx。
提交配置。
user@host> commit
Enabling RIFT in CLOS-based Topology (ZTP Mode)
要在 CLOS 拓扑上激活 RIFT 软件包,需要进行其他配置。您必须识别位于拓扑中交换矩阵顶部的节点,并将所有交换矩阵顶部设备配置为覆盖 auto 默认配置中的级别。
要在基于 CLOS 的拓扑中激活 RIFT 软件包:
覆盖默认配置中的自动级别,并可选择手动指定级别。
[edit protocols rift] user@host# set level top-of-fabric
提交附加配置。
user@host> commit
Traceoptions for RIFT
虽然启用 RIFT 协议会自动继承必要的配置,但您还可以将最小跟踪配置为可选配置。
要为 RIFT 配置 traceoptions:
在 rift 语句下指定 traceoptions 和 proxy-process 参数。
[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
例如:
[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
Verifying RIFT Configuration
您可以从以下层级验证 RIFT 协议配置:
[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;
您还可以通过查看软件包中 junos-rift 应用的默认值来验证 RIFT 配置。为此,请运行命令 show configuration protocols rift | display inherited 。
例如:
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;
}
表 1 列出了可用于验证 RIFT 协议配置和状态的命令。
命令 |
描述 |
|
检查 RIFT 协议的运行时状态。 |
|
RIFT 协议可用于接受其他协议的策略和命令。 |
|
查看详细的 RIFT 安装路线。 |
|
清除 RIFT 数据库。 |
|
重新启动 RIFT 协议。 |
有关更多信息,请参阅软件包分发中的常见问题解答文件。
Troubleshooting the RIFT Protocol
除非在非常极端的情况下,否则 RIFT 协议不会生成核心文件。它通过大量日志记录报告每个故障,有时还会在退出时回溯。RIFT 进程可提供可使用 traceoptions 配置收集的可配置跟踪事件。
要对 RIFT 实施进行故障排除,请参阅:
Forming Adjacency
Problem
RIFT 邻接上下抖动,显示带有或错误的
Multiple NeighborsRemote Uses Our Own SystemID拒绝。Solution
RIFT 协议不支持以太网链路上的两个以上邻接方,这会形成点对点邻接关系,也不支持环回节点自己的接口。检查并纠正布线。
Undefined Level
Problem
所有交换机均显示未定义级别,不形成三向邻接,但正在发送和接收链路信息元素 (LIE)。
Solution
可能没有交换矩阵顶部级别的配置。所有交换矩阵顶部设备都必须配置交换矩阵顶部级别,以便为 ZTP 提供锚点。
Loopback Address
Problem
无法获取 RIFT 中节点的环路地址。
Solution
要将所有环路地址都置于交换矩阵顶部,最简单的方法是在每个必要的节点中配置一个环路地址,然后沿北向方向将其重新分配给 RIFT。执行此操作需要以下配置:
[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; } }此配置允许每个叶对除交换矩阵顶部设备之外的所有其他节点的环路地址 ping 操作。
如果交换矩阵顶部设备也应该可以从叶设备访问,反之亦然,则交换矩阵顶部环路地址需要暴露到下面的一个级别(即南向)。执行此操作需要以下配置:
[edit protocols rift] export { southbound { lo0-rift; } }注意:要使交换矩阵顶部地址能够传播到所有叶节点,请在层次结构级别下
[edit protocols rift export southbound]配置该allow-rift-routes选项。System Log Error Messages
RIFT 进程会生成系统日志消息,以记录与将 RIFT 协议集成到 Junos OS 中相关的错误。要解释系统日志消息,请参阅以下内容:
RIFT_PROXYD_ALREADY_RUNNING— RIFT 进程的另一个实例已在运行。RIFT_PROXYD_CONNECT_RIFT— 尝试连接到本地 RIFT 进程失败。
有关系统日志错误消息的更多信息,请参阅 系统日志资源管理器。