了解临时配置数据库
临时数据库是一个备用配置数据库,它提供了一个快速的编程界面,用于在运行 Junos OS 和 Junos OS 演化的设备上执行配置更新。临时数据库使瞻博网络扩展工具包 (JET) 应用程序以及 NETCONF 和 Junos XML 管理协议客户端应用程序能够同时加载配置更改并将其提交到设备,并且吞吐量明显高于将数据提交到候选配置数据库时的吞吐量。
以下各节讨论临时配置数据库的不同方面。
临时配置数据库的优势
- 使多个客户端应用程序能够同时配置设备,方法是将数据加载并提交到临时数据库的单独实例
- 在需要快速提交时间的动态环境中实现快速配置和快速配置更改
临时配置数据库概述
管理 Junos 设备时,配置设备的推荐和最常见方法是修改并提交候选配置,该配置对应于持久(静态)配置数据库。标准提交操作处理配置组、宏和提交脚本;执行提交检查以验证配置的语法和语义;并存储已提交配置的副本。标准提交模型非常可靠,因为它可以防止配置错误,并使您能够回滚到以前提交的配置。但是,在某些情况下,提交操作可能会消耗大量时间和设备资源。
JET 应用程序以及 NETCONF 和 Junos XML 协议客户端应用程序也可以配置临时数据库。临时数据库是一个备用配置数据库,它提供了一个独立于候选配置数据库和其他客户端应用程序的配置层的配置层。临时提交模型使 Junos 设备能够提交和合并来自多个客户端的更改,并以明显高于将数据提交到候选配置数据库时的吞吐量执行提交。因此,临时数据库在需要快速配置和快速配置更改的动态环境中(例如大型数据中心)具有优势。
临时数据库上的提交操作比静态数据库上的相同操作所需的时间更少,因为临时数据库不受静态数据库中所需的相同验证的约束。因此,临时提交模型提供了比标准提交模型更好的性能,但代价是标准模型中存在的一些更强大的功能。临时提交模型具有以下限制:
-
将验证配置数据语法,但不验证配置数据语义。
-
某些配置语句不受支持,如 临时配置数据库中不支持的配置语句中所述。
-
不处理配置组和接口范围。
-
不处理宏、提交脚本和翻译脚本。
-
不会存档以前版本的临时配置。
-
临时配置数据不会显示在使用标准 show 命令的正常配置中。
-
在以下情况下,临时配置数据不会保留:
-
安装需要重建 Junos 架构的软件包,例如 OpenConfig 或 YANG 软件包。
-
执行软件升级或统一不中断服务的软件升级 (ISSU)。
-
重新启动或重启设备。
-
强烈建议您在使用临时配置数据库时要小心,因为提交无效的配置数据可能会损坏临时数据库,从而导致 Junos 进程重新启动甚至崩溃,从而导致系统或网络中断。
Junos 设备验证提交到临时数据库的配置数据的语法,但不验证语义或约束。例如,如果配置引用未定义的路由策略,则该配置可能在语法上正确,但在语义上不正确。在这种情况下,标准提交模型会生成提交错误,但临时提交模型不会。因此,在将所有配置数据提交到临时数据库之前,必须验证所有配置数据。如果提交的配置数据无效或导致不希望的网络中断,则必须从数据库中删除有问题的数据,或者在必要时重新启动设备,这将删除所有临时配置数据。
临时配置数据库除了存储配置数据外,还存储内部版本信息。因此,对于相同的配置数据,临时配置数据库的大小始终大于静态配置数据库,并且临时数据库上的大多数操作(无论是添加、修改还是删除)都会增加数据库的大小。
使用临时配置数据库时,对静态配置数据库的提交操作可能需要更长的时间,因为必须执行其他操作才能合并静态和临时配置数据。
临时数据库实例
Junos 设备提供自动启用的默认临时数据库实例,以及启用临时配置数据库的用户定义实例的功能。JET 应用程序以及 NETCONF 和 Junos XML 协议客户端应用程序可以同时加载数据并将其提交到临时数据库的单独实例。活动设备配置是静态和临时配置数据库的合并视图。
从 Junos OS 18.2R1 版开始,Junos OS 支持配置最多七个临时配置数据库的用户定义实例。在早期版本中,您最多可以配置八个用户定义的实例。Junos OS 演化版支持配置 8 个用户定义的实例。
临时数据库实例在多个客户端应用程序可能需要同时更新设备配置的情况下非常有用,例如当两个或多个 SDN 控制器同时将配置数据推送到同一设备时。在标准提交模型中,一个控制器可能对候选配置具有独占锁,从而防止另一个控制器对其进行修改。通过使用单独的临时实例,控制器可以同时部署更改。
除了静态配置数据库之外,应用程序还可以同时将数据加载和提交到不同的临时数据库实例。但是,设备会按顺序处理提交。因此,对特定数据库的提交可能会延迟,具体取决于处理顺序。
Junos 进程从静态配置数据库和临时配置数据库中读取配置数据。当正在使用一个或多个临时数据库实例并且存在冲突的数据时,具有较高优先级的数据库中的语句将覆盖具有较低优先级的数据库中的语句。数据库优先级(从最高到最低)如下所示:
-
临时配置数据库的用户定义实例中的语句。
如果有多个用户定义的临时实例,则优先级由在层次结构级别配置
[edit system configuration-database ephemeral]
实例的顺序(从最高优先级到最低优先级)确定。 -
默认临时数据库实例中的语句。
-
静态配置数据库中的语句。
请考虑以下配置:
system { configuration-database { ephemeral { instance 1; instance 2; } } }
图 1 说明了临时数据库实例和静态(已提交)配置数据库的优先级顺序。在此示例中,临时数据库实例 1 具有最高优先级,其次是临时数据库实例 2,然后是默认临时数据库实例,最后是静态配置数据库。
临时数据库常规提交模型
JET 应用程序以及 NETCONF 和 Junos XML 协议客户端应用程序可以修改临时配置数据库。JET 应用程序必须以加载和提交操作对的形式发送配置请求。NETCONF 和 Junos XML 协议客户端应用程序可以在执行提交操作之前执行多个加载操作。
在将所有配置数据加载到临时数据库并将其提交到设备上之前,必须对其进行验证,因为提交无效的配置数据可能会导致 Junos 进程重新启动甚至崩溃,从而导致系统或网络中断。
客户端应用程序可以同时将数据加载和提交到临时数据库的不同实例。同时为不同临时实例发出的提交将由设备排队并串行处理。如果客户端与会话断开连接,设备将丢弃临时实例中任何未提交的配置更改,但该客户端已提交到临时实例的配置数据不受影响。
提交临时实例时,系统会验证临时配置数据的语法,但不验证语义。提交完成后,设备会通知受影响的系统进程。这些进程读取更新的配置,并根据 临时数据库实例中描述的优先级规则将临时数据合并到活动配置中。活动设备配置是静态和临时配置数据库的合并视图。
由于两个操作系统之间的架构差异,运行 Junos OS 演化版的设备上临时数据库的提交时间将略长于运行 Junos OS 的设备。
有关提交和同步临时配置数据库实例的详细信息,请参阅 使用 NETCONF 或 Junos XML 协议提交和同步临时配置数据。
在使用高可用性功能的设备上使用临时数据库
高可用性 是指为网络通信提供冗余和可靠性的硬件和软件组件。在使用高可用性功能的系统上使用临时数据库之前,应考虑某些行为和注意事项,这些功能包括冗余路由引擎、平稳路由引擎切换 (GRES)、不间断活动路由 (NSR) 以及使用虚拟机箱的 MX 系列路由器或 EX 系列交换机的机箱间冗余。以下各节介绍这些行为,并概述了不同的临时数据库提交同步模型如何影响这些行为。
了解临时数据库提交同步模型
临时配置数据库有两种模型,用于在提交同步操作期间跨路由引擎或虚拟机箱成员同步临时配置数据:
-
异步(默认)
-
同步
与标准提交模型不同,默认临时提交模型异步执行提交同步操作。请求路由引擎提交临时配置并发出提交完成通知,而无需等待其他路由引擎首先同步并提交配置。使用高可用性功能的设备要求在发生故障转移时同步主路由引擎和备份路由引擎。但是,在某些情况下,异步提交同步操作可能会中断,并且无法将临时配置同步到另一个路由引擎。
在运行 Junos OS 21.1R1 或更高版本的设备上以及运行 Junos OS 演化的设备上,您可以将临时数据库配置为使用同步提交模型进行提交同步操作,类似于静态配置数据库使用的模型。
在双路由引擎或 MX 系列虚拟机箱环境中,同步提交模型的工作方式如下:
- 主路由引擎启动其临时实例的初始提交操作。
- 在其提交操作期间的给定时间点,主路由引擎在备份路由引擎上启动提交。
- 如果备份路由引擎成功提交配置,则主路由引擎将继续其提交操作。如果备份路由引擎上的提交失败,则主路由引擎也会使提交失败。
当 EX 系列虚拟机箱使用同步提交模型时,具有主路由引擎角色的成员交换机首先会同时在其他成员上启动提交操作。由于 EX 系列虚拟机箱可以有多个成员,因此主交换机随后会继续执行其提交操作,即使其他成员上的提交失败也是如此。
同步提交操作比异步提交操作慢,但它们可以更好地保证临时配置在路由引擎和虚拟机箱成员之间同步。因此,同步提交模型使您能够在也使用高可用性功能的设备上以更高的可靠性使用临时数据库。
与静态配置数据库的情况一样,即使使用同步提交同步模型,在极少数情况下,设备也会在备份路由引擎上提交更新的临时配置,但无法在主路由引擎上完成提交,从而导致配置不同步。
要为临时配置数据库启用同步提交同步模型,请在静态配置数据库中的层次结构级别配置commit-synchronize-model synchronous
[edit system configuration-database ephemeral]
语句。
运行 Junos OS 20.2R1 或更高版本的设备以及运行 Junos OS 演化版的设备也支持临时数据库的故障转移配置同步。配置故障切换同步且备份路由引擎与主路由引擎同步时(例如,当它新插入、重新联机或角色更改期间时),它会同步其静态和临时配置数据库。在早期 Junos OS 版本中,备份路由引擎仅同步其静态配置数据库。要启用故障转移同步,请在静态配置数据库中的层次结构级别配置commit synchronize
[edit system]
语句。
对于故障切换同步,仅当备份设备和主设备运行相同的软件版本时,备份路由引擎或 MX 虚拟机箱备份设备才会将临时配置数据库与主设备同步。
在运行 Junos OS 版本 21.1R1 或更高版本的设备上以及运行 Junos OS 演化版的设备上,提交同步操作和故障切换同步操作都使用负载更新操作而不是负载覆盖操作将临时配置数据同步到其他路由引擎。通过使用负载更新操作,设备只需在更新期间通知与已更改语句对应的 Junos 进程,从而最大限度地减少可能对网络造成的中断。
冗余路由引擎
双路由引擎系统支持配置临时数据库。但是,临时提交模型不会在提交操作期间自动将临时配置数据同步到备份路由引擎。客户端应用程序可以在每次提交或每个会话的基础上同步临时实例中的数据,也可以将临时实例配置为在每次提交实例时自动同步其数据。有关详细信息,请参阅 使用 NETCONF 或 Junos XML 协议提交和同步临时配置数据。
多机箱环境不支持将临时配置数据库同步到其他路由引擎。
当客户端应用程序在临时实例中提交数据并将其同步到备份路由引擎时,默认情况下,临时数据库会异步执行提交同步操作。可以将临时数据库配置为使用同步提交模型进行提交同步操作。此外,从 Junos OS 20.2R1 版开始,双路由引擎设备还支持临时数据库的故障切换配置同步。有关详细信息,请参阅 了解临时数据库提交同步模型。
平滑路由引擎切换 (GRES)
平滑路由引擎切换使具有冗余路由引擎的设备能够继续转发数据包,即使一个路由引擎发生故障也是如此。GRES 要求主路由引擎和备份路由引擎在切换发生之前同步配置和某些状态信息。
默认情况下,临时数据库以异步方式执行提交同步操作。在运行 Junos OS 版本 21.1R1 或更高版本的受支持设备上以及运行 Junos OS 演化的设备上,您可以将临时数据库配置为使用同步提交模型执行提交同步操作,如 了解临时数据库提交同步模型中所述。当设备对提交时间没有严格要求时,建议在启用了 GRES 的设备上使用同步提交模型。同步提交操作比异步提交操作慢,但它们可以更好地保证临时配置在路由引擎之间同步。因此,使用此提交模型,可以在启用了 GRES 的设备上以更高的可靠性使用临时数据库。
运行 Junos OS 演化版的双路由引擎设备默认启用 GRES。
建议 不要 在启用了 GRES 的设备上将临时数据库与异步提交同步模型一起使用,因为在某些情况下,发生切换时,临时数据库可能不会在主路由引擎和备份路由引擎之间同步。例如,如果提交同步操作因突然断电而中断,则备份和主路由引擎可能不会同步临时数据库。此外,在运行 Junos OS 版本 20.1 及更低版本的设备上,当备份路由引擎将其配置与主路由引擎同步时,不会同步临时配置数据库。因此,例如,如果备份路由引擎重新启动,它将删除临时配置数据,这些数据不会在重新启动后保留,并且在数据库联机时不会再次自动同步数据库。因此,发生切换时,临时数据库可能不会在备份路由引擎和主路由引擎之间同步。
启用 GRES 且临时数据库使用异步提交模型(默认)时,您必须显式配置设备以将临时配置数据同步到备份路由引擎。要启用同步,请在静态配置数据库中的层次结构级别配置allow-commit-synchronize-with-gres
[edit system configuration-database ephemeral]
语句。如果启用了 GRES,并且您未配置allow-commit-synchronize-with-gres
该语句,则当您请求对该实例执行提交同步操作时,使用异步提交模型的设备不会将临时实例同步到备份路由引擎。
不间断活动路由 (NSR)
默认情况下,临时数据库以异步方式执行提交同步操作。在运行 Junos OS 版本 21.1R1 或更高版本的受支持设备上以及运行 Junos OS 演化的设备上,您可以将临时数据库配置为使用同步提交模型执行提交同步操作,如 了解临时数据库提交同步模型中所述。我们建议您在启用了不间断活动路由 (NSR) 的设备上使用同步提交模型。同步提交操作比异步提交操作慢,但它们可以更好地保证临时配置在路由引擎之间同步。因此,通过此提交模型,您可以在启用了 NSR 的设备上以更高的可靠性使用临时数据库。
建议 不要 在启用了 NSR 的设备上将临时数据库与异步提交同步模型一起使用,因为它带有某些警告。在使用双路由引擎的部署中,主路由引擎上的临时实例上的提交同步操作会导致备份路由引擎上的异步提交。如果设备在更新配置的过程中通知路由协议进程 (rpd),则由于备份路由引擎上提交的异步性质,可能会导致系统出现不良行为。
将临时实例同步到备份路由引擎时通知的进程取决于 Junos OS 版本。在 Junos OS 20.4 及更低版本中,当您更新主路由引擎上的临时实例时,备份路由引擎上的更改将覆盖临时实例的完整配置,并将其替换为最新版本。在 Junos OS 20.1 及更低版本中,当在备份路由引擎上应用新配置时,Junos OS 会通知在该临时实例中包含语句的所有系统进程。从 Junos OS 20.2R1 版开始,临时数据库的行为得到了增强。如果临时实例已在主路由引擎和备份路由引擎之间同步,并且您更新主路由引擎上的临时实例,则 Junos OS 仅在提交备份路由引擎上的更改时,才会通知与临时实例配置的已修改部分对应的进程。从 Junos OS 21.1R1 版开始,设备使用负载更新操作(而非负载覆盖操作)将临时实例同步到备份路由引擎,因此它仅通知与已更改语句对应的进程。
仅当使用临时数据库的应用程序与路由协议进程交互时,它们才会在此 NSR 情况下受到影响。例如,在这种情况下,SmartWall Threat Defense Director (SmartWall TDD) 不会受到影响,因为它仅通过临时数据库与防火墙进程 (dfwd) 交互。
MX 系列虚拟机箱
从 Junos OS 20.2R1 版开始,MX 系列虚拟机箱支持配置临时数据库。您只能在虚拟机箱主设备的主路由引擎上配置和提交临时实例。
MX 系列虚拟机箱不会在提交操作期间自动同步任何临时配置数据。与双路由引擎系统一样,您可以按提交或按会话同步临时实例中的数据,也可以将临时实例配置为在每次提交实例时自动同步其数据。临时数据仅从主设备上的主路由引擎同步到备份设备上的主路由引擎。
在任何情况下,MX 系列虚拟机箱都不会将临时配置数据从主路由引擎同步到相应虚拟机箱成员上的备份路由引擎。
MX 系列虚拟机箱必须配置 GRES。如果将临时数据库配置为使用同步提交同步模型,则当您请求提交同步操作时,设备会将临时实例同步到其他路由引擎。但是,如果临时数据库使用异步提交同步模型(缺省值),则必须在静态配置数据库中显式配置该 allow-commit-synchronize-with-gres
语句以启用同步。有关临时数据库提交模型的详细信息,请参阅 了解临时数据库提交同步模型 。
在使用异步提交同步模型的 MX 系列虚拟机箱上提交并同步临时实例时:
-
虚拟机箱主设备验证配置语法,并在其主路由引擎上提交临时实例。
-
如果提交成功,主设备会通知备份设备同步临时实例。
-
备份设备仅在其主路由引擎上提交临时实例。如果提交操作失败,备份设备会在系统日志文件中记录一条消息,但不通知主设备。
在配置为使用同步提交同步模型的 MX 系列虚拟机箱上提交并同步临时实例时:
-
虚拟机箱主设备在其主路由引擎上开始提交临时实例。
-
在其提交操作的给定点,主设备在备份设备的主路由引擎上启动提交。
-
如果备份设备成功提交配置,则主设备将继续执行其提交操作。如果备份设备无法提交配置,则主设备也未能提交。
如前所述,对临时数据库使用异步提交同步模型时,提交可以在主设备上成功,但在备份设备上会失败。使用同步提交同步模型时,两个主路由引擎的提交是成功还是失败,极少数情况除外。
MX 系列虚拟机箱支持临时数据库的故障切换配置同步。在静态配置数据库中的层次结构级别配置 commit synchronize
语句 [edit system]
,并且虚拟机箱备份设备上的主路由引擎与虚拟机箱主设备上的主路由引擎同步时(例如,在重新启动后),其将同步其静态和临时配置数据库。
对于故障切换同步,仅当两台设备运行相同的软件版本时,MX 虚拟机箱备份设备才会将临时配置数据库与主设备同步。
EX 系列虚拟机箱
EX 系列虚拟机箱支持临时配置数据库。您只能在具有主路由引擎角色的成员交换机上配置和提交临时实例。从 Junos OS 23.4R1 版开始,您可以跨 EX 系列虚拟机箱成员同步临时数据库。
EX 系列虚拟机箱不会在提交操作期间自动同步任何临时配置数据。您可以每次提交或按会话同步临时实例中的数据,也可以将临时实例配置为在每次提交实例时自动同步其数据。
您可以在 EX 系列虚拟机箱上配置 GRES,以使虚拟机箱能够在主路由引擎发生故障时继续转发数据包。如果将临时数据库配置为使用同步提交同步模型,则当您请求提交同步操作时,设备会将临时实例同步到其他成员。但是,如果临时数据库使用异步提交同步模型(默认)并且配置了 GRES,则必须在静态配置数据库中显式配置语句 allow-commit-synchronize-with-gres
以启用同步。
在使用异步提交同步模型的 EX 系列虚拟机箱上提交并同步临时实例时:
-
主路由引擎角色中的成员交换机验证配置语法并提交临时实例。
-
如果提交成功,主设备会通知进程
commit-syncd
,进而在每个成员交换机上启动提交。 -
每个成员交换机提交临时实例。如果提交操作在任何成员上失败,则不会影响其他成员上的提交操作。
在配置为使用同步提交同步模型的 EX 系列虚拟机箱上提交并同步临时实例时:
-
主路由引擎角色中的成员交换机同时在所有成员交换机上启动提交。
-
每个成员交换机提交临时实例并通知主交换机。如果提交操作在任何成员上失败,则不会影响其他成员上的提交操作。
-
收到来自所有成员交换机的响应后,主交换机会提交临时实例。
如前所述,在异步模型中,主交换机依靠 commit-syncd
进程按顺序在每个成员交换机上启动提交。 commit-syncd
如果进程因任何原因失败,则可能无法启动某些提交。在同步提交模型中,主交换机直接和并行在所有成员交换机上启动提交。因此,同步提交模型通常比异步提交模型更可靠。在任何一种情况下,如果一个成员上的提交失败,则不会影响或阻止其他成员上的提交。
此外,在同步提交模型中,主交换机会在提交发生时显示每个成员的提交进度。在异步模型中,提交在后台进行,因此在这种情况下,主设备仅记录提交结果。
临时数据库最佳实践
临时配置数据库使多个应用程序能够同时进行快速配置更改。由于临时配置数据库不使用与静态配置数据库相同的保护措施,因此应仔细考虑如何使用临时数据库。我们建议遵循这些最佳实践,以优化性能并避免在使用临时配置数据库时出现潜在问题。
调节提交频率
临时数据库旨在加快提交速度。但是,如果使用配置的应用程序无法跟上提交操作的速率,则过于频繁的提交可能会导致问题。因此,我们建议您仅在设备的运行状态反映上一次提交的更改后提交下一组更改。
例如,如果执行频繁的快速提交,则在 Junos 进程读取上一个更新之前,设备可能会覆盖存储在外部文件中的某些配置数据。如果 Junos 进程错过重要更新,设备或网络可能会表现出不可预测的行为。
确保数据完整性
当您将数据提交到临时数据库时,Junos 设备不会验证配置数据语义。因此,在加载和提交配置之前,必须执行其他步骤以确保数据完整性。我们建议您始终:
-
在将配置数据加载到数据库之前对其进行验证
-
将相关配置语句合并到单个数据库中
在将所有配置数据加载到临时数据库之前,应对其进行验证。我们建议您使用静态数据库预先验证配置数据,该数据库会同时验证语法和语义。
此外,应始终将相关配置数据加载到单个数据库中。在同一数据库中添加相关或从属配置数据有助于确保设备可以在提交操作期间检测和处理相关语句。例如,如果在静态配置数据库或临时配置数据库中定义防火墙过滤器,则应将过滤器的应用程序配置到同一配置数据库中的接口。
相比之下,假设您在静态数据库中配置了一些语句,但在临时数据库中配置了相关或相关语句。提交静态数据库时,系统仅验证该数据库中的数据。系统可能无法识别临时数据库中的依赖配置,这可能会导致验证失败,从而导致提交失败。
整合扩展配置
我们建议您将扩展的配置加载到单个临时数据库实例中,而不是将它们分布在多个数据库中。例如,扩展配置可能包括以下大型列表:
-
策略选项
-
前缀列表
-
虚拟帧
-
防火墙过滤器
将顶级配置层次结构限制为单个数据库时,内部优化可使 Junos 进程更有效地使用配置。或者,如果将配置分散到多个数据库中,Junos 进程必须解析配置的合并视图,这通常需要更多资源和处理时间。
更改历史记录表
功能支持由您使用的平台和版本决定。使用 功能资源管理器 确定您的平台是否支持某个功能。
commit synchronize
语句
[edit system]
且备份路由引擎与主路由引擎同步时(例如,当它新插入、重新联机或角色更改期间时),它会同步其静态和临时配置数据库。