使用 Oracle® Solaris 11.2 目录和命名服务:DNS 和 NIS

退出打印视图

更新时间: 2014 年 7 月
 
 

维护更新后的映射

以下各节介绍完成更新随缺省集合提供的映射之后进行的其他过程。

传播 NIS 映射

更改映射后,Makefile 将使用 yppush 将新映射传播到从属服务器(除非在 Makefile 中设置了 NOPUSH)。它会通知 ypserv 守护进程并发送映射传送请求以完成此操作。然后,从属服务器上的 ypserv 守护进程会启动 ypxfr 进程,然后该进程将与主服务器上的 ypxfrd 守护进程联系。将执行某些基本检查(例如映射是否已真正更改?),然后传送映射。从属服务器上的 ypxfr 然后将向 yppush 进程发送一个响应来指示传输是否成功。

svc:/network/rpc/bind 服务的 config/local_only 属性必须设置为 false。否则,NIS 主服务器无法通过使用 yppush 命令将更新后的 NIS 主服务器版本映射到 NIS 从属服务器。


注 -  对于尚未存在于从属服务器上的新创建的映射,以上过程将可行。必须通过在从属服务器上运行 ypxfr 将新映射发送到从属服务器。

有时候,映射无法传播,这时必须使用 ypxfr 手动发送新映射信息。您可以选择以两种不同方式使用 ypxfr:通过 root crontab 文件定期使用,或在命令行中交互使用。这些方法将在以下各节中进行讨论。

使用 cron 命令进行映射传送

不同映射的更改速度有所不同。例如,某些映射可能数月不更改一次,如缺省映射中的 protocols.byname 和非缺省映射中的 auto_master。不过,passwd.byname 可能一天更改数次。使用 crontab 命令调度映射传送,可以为各个映射设置特定的传播时间。

要以适合于映射的速度定期运行 ypxfr,每台从属服务器中的根 crontab 文件应包含适当的 ypxfr 项。ypxfr 与主服务器联系,并仅在主服务器中的副本比本地副本更新时才传送映射。


注 - 如果主服务器运行带有缺省 –m 选项的 rpc.yppasswdd,则每次 yp 口令发生更改时,passwd 守护进程都会运行 make,重新生成 passwd 映射。

将 Shell 脚本用于 cronypxfr

作为为每个映射创建单独的 crontab 项的备选方法,您可能更喜欢让根 crontab 命令运行 shell 脚本来定期更新所有映射。用于更新映射的 shell 脚本样例位于 /usr/lib/netsvc/yp 目录中。这些脚本名为 ypxfr_1perdayypxfr_1perhourypxfr_2perday。您可以修改或替换这些 shell 脚本来满足站点需要。以下示例显示的是缺省 ypxfr_1perday shell 脚本。

示例 3  ypxfr_1perday Shell 脚本
#! /bin/sh
#
# ypxfr_1perday.sh - Do daily yp map check/updates
PATH=/bin:/usr/bin:/usr/lib/netsvc/yp:$PATH
export PATH
# set -xv
ypxfr group.byname
ypxfr group.bygid
ypxfr protocols.byname
ypxfr protocols.bynumber
ypxfr networks.byname
ypxfr networks.byaddr
ypxfr services.byname
ypxfr ypservers

如果根 crontab 每天执行一次,此 shell 脚本会每天更新一次映射。您还可以具有其他脚本,用以每周更新一次映射、每月更新一次映射、每小时更新一次映射,等等。不过请注意,频繁传播映射会引起性能降低。有关更多信息,请参见 crontab(1) 手册页。

在为 NIS 域配置的每台从属服务器上,以 root 用户的身份运行相同的 shell 脚本。逐个更改每台服务器上确切的执行时间,以避免使主服务器陷入停顿状态。

如果要从特定的从属服务器中传送映射,请在 shell 脚本中使用 ypxfr–h machine 选项。放入脚本中的命令的语法如下所示。

# /usr/lib/netsvc/yp/ypxfr –h machine [ –c ] mapname

其中,machine 是要传送的映射所在服务器的名称,mapname 是所请求的映射的名称。如果使用了 –h 选项但未指定计算机,ypxfr 将尝试从主服务器中获取映射。如果执行 ypxfrypserv 未在本地运行,则必须使用 –c 标志,以使 ypxfr 不向本地 ypserver 发送清除当前映射的请求。

您可以使用 –s domain 选项从其他域向本地域传送映射。这些映射在各个域中必须相同。例如,两个域可能会共享相同的 services.bynameservices.byaddr 映射。另外,为实现更多的控制,可以使用 rcprsync 来跨域传送文件。

直接调用 ypxfr 命令

调用 ypxfr 命令的另一种方法是将其作为命令来运行。通常,只在异常情况下才使用此方法-例如,在设置临时 NIS 服务器来创建测试环境时或在尝试使断开服务的 NIS 服务器快速与其他服务器保持一致时。

记录 ypxfr 活动

ypxfr 的传送尝试和结果可以捕获并存储在日志文件中。如果存在名为 /var/yp/ypxfr.log 的文件,则会向该文件中附加结果。对于该日志文件的大小没有任何限制。为防止日志文件无限制地增大,请键入以下命令定期清空该文件。

# cd /var/yp
# cp ypxfr.log ypxfr.log.old
# cat /dev/null > /var/yp/ypxfr.log

可让 crontab 一周执行一次上述命令。要禁用日志记录,请删除日志文件。