示例:使用 NETCONF 配置临时配置数据库
临时数据库是一个备用配置数据库,使客户端应用程序能够同时在 Junos 设备上加载和提交配置更改,与向候选配置数据库提交数据时更大的吞吐量。此示例演示如何在 NETCONF 会话中启用临时配置数据库的实例并更新该实例。
要求
此示例使用以下软件组件:
支持配置临时数据库的设备,Junos OS或更高版本16.2R2或 Junos OS 22.1R1 或更高版本运行。
开始之前:
在设备上启用 NETCONF-over-SSH Junos。
概述
多个 NETCONF 和 Junos XML 协议客户端应用程序可以使用临时数据库实例,同时向Junos设备加载和提交配置更改。此示例将启用临时数据库实例, eph1
然后通过 NETCONF 会话配置实例。
客户端应用程序必须打开临时配置数据库的实例,才能查看或修改它。建立 NETCONF 会话后,客户端通过使用 Junos XML <open-configuration>
协议操作 <ephemeral-instance>
打开临时实例,其中将子标记和实例名称括起来。打开临时实例将自动获得一个独占锁。
随后,客户端以文本格式将配置数据加载 eph1
至临时实例。由于配置数据采用文本格式,因此 <load-configuration>
操作必须包含 format="text"
属性,且配置数据必须括在元素 <configuration-text>
中。
以下示例在临时实例中提交配置更改,方法为发出 Junos XML 协议<commit-configuration>
操作。属性<load-configuration>
action="merge"
仅决定如何将配置数据合并到临时数据库的实例中。将更改提交到临时实例后,设备根据优先级划分规则将配置数据合并到活动配置中。如果不同配置数据库中eph1
的数据存在冲突,则实例中的语句的优先级高于默认临时实例或静态配置数据库中的语句。如果有其他用户定义的[edit system configuration-database ephemeral]
临时实例,优先级由层级配置中所列实例的顺序决定。
该操作 <close-configuration/>
会关闭开放式临时实例并释放排他锁。 eph1
在设备重新启动之前,已提交临时数据将保留,此时设备会删除临时实例中的配置数据以及所有其他临时实例中的数据。
配置
启用临时数据库实例
逐步过程
要启用临时数据库实例:
配置实例的名称。
[edit] user@host# set system configuration-database ephemeral instance eph1
提交配置。
[edit] user@host# commit
结果
在配置模式下,输入 命令以确认您的 show system configuration-database
配置。如果输出未显示预期的配置,请重复此示例中的说明,以更正配置。
[edit] user@host# show system configuration-database ephemeral { instance eph1; }
配置临时数据库实例
逐步过程
要配置临时数据库实例并提交来自 NETCONF 会话的更改,客户端应用程序将执行以下步骤:
打开临时数据库实例。
<rpc> <open-configuration> <ephemeral-instance>eph1</ephemeral-instance> </open-configuration> </rpc> ]]>]]>
将配置数据加载至开放临时实例,并包括适用于该数据的标记和属性。
<rpc> <load-configuration action="merge" format="text"> <configuration-text> protocols { mpls { label-switched-path to-hastings { to 192.0.2.1; } } } </configuration-text> </load-configuration> </rpc> ]]>]]>
如果操作
<load-configuration>
未生成任何错误,请提交配置。<rpc> <commit-configuration/> </rpc> ]]>]]>
关闭临时数据库实例。
<rpc> <close-configuration/> </rpc> ]]>]]>
结果
如果在打开或关闭数据库时没有任何错误,NETCONF 服务器将返回一个空 <rpc-reply>
元素来响应请求。NETCONF 服务器返回在 和 <load-configuration>
<ok/>
元素中括 <load-configuration-results>
住的空标记,表示操作 <rpc-reply>
成功。同样,NETCONF 服务器返回 <commit-configuration>
一个包含于元素中的空 <ok/>
标记,表示操作成功 <rpc-reply>
。
验证
验证提交
目的
NETCONF 服务器对提交操作的响应应指示提交成功与否。您还可以查看系统日志文件中临时数据库的提交事件,以验证提交是否成功。
行动
查看系统日志文件并显示匹配的事件 UI_EPHEMERAL
。
user@host> show log messages | match UI_EPHEMERAL Feb 10 13:20:32 host mgd[5172]: UI_EPHEMERAL_COMMIT: User 'user' has requested commit on 'eph1' ephemeral database Feb 10 13:20:32 host mgd[5172]: UI_EPHEMERAL_COMMIT_COMPLETED: commit complete on 'eph1' ephemeral database
意义
消息 UI_EPHEMERAL_COMMIT_COMPLETED
标记表示实例上的提交操作 eph1
成功。
验证临时数据库实例中的配置数据
目的
验证正确的配置数据已添加到临时实例中。
行动
在 NETCONF 会话内,打开临时数据库实例并检索配置。
<rpc> <open-configuration> <ephemeral-instance>eph1</ephemeral-instance> </open-configuration> </rpc> ]]>]]> <rpc> <get-configuration format="text"/> </rpc> ]]>]]>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/16.2R2/junos"> <configuration-text xmlns="http://xml.juniper.net/xnm/1.1/xnm"> ## Last changed: 2017-02-10 13:20:32 PDT protocols { mpls { label-switched-path to-hastings { to 192.0.2.1; } } } </configuration-text> </rpc-reply> ]]>]]>
<rpc> <close-configuration/> </rpc> ]]>]]>
您可查看从 CLI show ephemeral-configuration instance instance-name
提交到临时数据库实例的配置数据,您可以在 Junos OS 版本 18.2R1 show ephemeral-configuration instance-name
和更高版本中发出操作命令,或发出早期版本中的操作命令。
故障 排除
在打开临时实例时排除问题
问题
您尝试打开临时数据库的实例,并且服务器仅返回一个开放 <rpc-reply>
标记。例如:
<rpc> <open-configuration> <ephemeral-instance>eph1</ephemeral-instance> </open-configuration> </rpc> ]]>]]> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:junos="http://xml.juniper.net/junos/16.2R2/junos">
当另一个客户端对实例具有排他锁时,可能会出现此问题。
解决 方案
如果另一位用户对临时实例具有排他锁定,则客户端应用程序可以发出远程过程调用 (RPC) 来更新临时实例,但是该临时实例的操作将在锁发布之前处理。当锁释放时,服务器 </rpc-reply>
应发出关闭标记,并处理临时实例锁定时发出的任何 RPC。
或者,客户端应用程序可以选择更新不同的临时实例,但需要注意,在解决冲突配置语句时,不同临时实例的优先级不同。
操作问题故障排除
问题
即使已验证提交成功且配置数据存在于该临时实例的配置中,设备不会执行由于将某些配置数据提交到临时数据库实例而应该发生的操作更改。
如果存在另一个用户定义的临时实例,其配置数据与优先级更高,则操作更改可能不会发生。如果临时实例中的数据存在冲突,则优先级较高的实例中的语句将替代优先级较低的实例中的语句。临时配置数据库的用户定义实例的优先级高于默认临时数据库实例,其优先级高于静态配置数据库。如果有多个用户定义的临时实例,优先级由配置中所列实例的顺序决定。
解决 方案
您可以在设备上发出操作命令来 show configuration system configuration-database ephemeral 验证配置的临时实例及其优先级顺序。实例按从高到低的顺序列出。如果有优先级更高的其他实例,请查看这些实例中的配置数据,以确定是否有冲突语句。 show ephemeral-configuration merge
您还可以显示静态和临时配置数据库的合并视图,例如Junos OS 版本 18.2R1 show ephemeral-configuration | display merge
和更高版本中发出 命令,或发出早期版本中的 命令。
如果临时实例的配置数据相互冲突,优先级低于另一个用户定义的临时实例,并且该层次结构级别的配置应对设备生效,则必须删除另一个临时实例中的冲突数据,或将配置数据放在优先级更高的实例中。