我的组织希望集中管理所有生产服务器的 Oracle TNSnames 文件。当该文件发生更改时,他们希望能够以最小的努力将更改推送到所有使用它的服务器。
已考虑的方法:
- 集中式文件服务器(缺点:如果文件服务器或文件服务器的网络连接中断,服务器将无法访问关键文件)
- 每台服务器上的 Subversion 客户端(缺点:在生产中使用源代码控制工具,增加了复杂性)
- 在每个服务器上存储文件的单独副本(缺点:更改文件内容涉及在许多不同的服务器上进行更改)
更新我可以使用 DFS 来执行此操作吗?
答案1
这不是 Oracle 的问题。这是配置管理工具(如 puppet、bcfg2、cfengine、chef 等)的典型用例。(其中,至少 puppet 对管理 Windows 机器和 Unix 机器有一定的支持)
从您的角度来看,此案有几点上诉理由:
- 每台机器都有自己一份该文件的本地副本,这意味着如果配置管理服务器(或网络路径)消失,机器仍然有该文件;只是在与母舰的连接恢复之前,它不会得到任何更新
- 更改会自动从配置管理服务器推送到每个 Oracle 框
- 每台客户端(Oracle)机器上的额外复杂性很小
- 变化发生在一个地方。
当然,缺点是,这意味着您需要了解如何运行/配置配置管理系统。当然,这样做,您可能会发现它的更多用途,使您的环境和管理更加高效。
答案2
由于 TNSNames 在服务器使用时不会被锁定,因此请尝试在每台服务器上执行 cron 作业或计划任务,每隔 X 分钟/小时更新一次文件。
编辑:更新源应为可从所有 Oracle 服务器访问的文件服务器(CIFS、NFS 等)。您还可以设置脚本以在文件更新失败时通知您,尽管失败仅意味着没有更新,而不是数据库服务器上缺少关键文件。
答案3
在每个服务器上存储文件的单独副本(缺点:更改文件内容涉及在许多不同的服务器上进行更改)
不过,我还是会选择这个。编写一个脚本,读取要访问的服务器列表,可能使用根据字段而变化的操作系统/登录控制方法。或者,木偶可以以类似的方式将配置文件推送到 Linux 或 Windows。Puppet 还将记录文件更改的版本和日志文件。
集中式文件服务器(缺点:如果文件服务器或文件服务器的网络连接中断,服务器将无法访问关键文件)
您可以使用 IP 故障转移功能放置冗余服务器,但这无法解决网络问题。我不认为这是解决单一用途任务的有效方法。
每台服务器上的 Subversion 客户端(缺点:在生产中使用源代码控制工具,增加了复杂性)
您仍然需要编写脚本或向每台服务器发送拉取请求。不过,我看不出“生产中的源代码控制工具”有什么内在的缺点。
答案4
您也可以为此使用 DFS - 只要 DFS 根目录中有多个文件服务器,这应该可以解决冗余不足的问题。您需要在支持 DFS 的 Linux 机器上安装一个 SMB 客户端;我不知道这是否容易/免费/不可能/有缺陷。