集群环境下维护各节点 Linux 软件包的方法 |
发布时间: 2012/6/28 17:02:27 |
前言 目前,越来越多的网站采用 Linux 操作系统,提供邮件、Web、文件存储、数据库等服务。也有非常多的公司在企业内部网中利用 Linux 服务器提供这些服务。随着人们对 Linux 服务器依赖的加深,对其可靠性、负载能力和计算能力也倍加关注。Linux 集群技术应运而生,可以以低廉的成本,很好地满足人们的这些需要。随着 Linux 集群环境的使用越来越广泛,管理员维护集群各个节点的软件面临着越来越大的问题,例如如何在节点安装新的软件、如何维护各节点软件版本的一致性,等等。如果让管理员一个个节点的安装、更新,那将会是一项非常繁重并且容易出错的工程。为了充分发挥 Linux 集群系统的潜在性能,我们需要有更好的方法来维护集群节点的软件包。本文将会介绍几种常用的软件维护工具,最后还将给出集群环境下实现节点软件包自动维护的方法。 Linux 集群环境手工维护软件存在的问题 Linux 操作系统跟微软操作系统不同,它都是一个个相对独立的软件所构成的一个操作系统,一个软件包完成一项单独的功能。为此 Linux 系统管理员平时大部分时间都在跟 Linux 系统软件包打交道。系统管理员要根据企业员工的需要,选择并安装恰当的软件包。 Linux 服务器的软件包也如同 Windows 操作系统的补丁一样在不断的升级。Linux 服务器软件的升级主要有两个目的。一是增强软件的功能,二是解决一些已知的安全漏洞。如 RedHat 公司在知道新的安全漏洞之后,就会马上研究开发出相应的解决方案,然后在新版本的软件包中进行解决。为此系统管理员必须及时的了解软件包的最新信息并及时的对软件包进行升级,让软件包保持最新的版本。 在 Linux 系统中,软件包的依赖关系让人很是头疼。如在安装 Linux 系统时,不是选择安装所有的软件包。在安装完 Linux 系统后,若再进行软件安装的话,就可能会遇到一些依赖关系的问题,如在安装 PHP 软件包时,系统就可能会提示一些错误信息。说需要其他的一些软件包的支持。其实类似的情况在 Windows 中也会遇到。如有时候安装一些应用软件可能对浏览器的版本会有要求或者要求操作系统的补丁达到 SP2 以上等等。不过在微软操作系统上这种软件依赖关系要比在 Linux 系统中少见的多,而且处理起来也方便一些。 Linux 环境下维护软件工具介绍 Linux 环境下软件包的维护工具有很多种,本文中我们只简单介绍一下 RPM,YUM 和 AutoUpdate 三种工具。 RPM RPM 源自 Red Hat Package Manager 的缩写,最初在 Red Hat Linux 中被用作软件包管理。在众多的 Linux 发行版中均有应用,如 Fedora 、RedHat、Mandriva、SuSE、YellowDog 等,还有一些非 Linux 平台,如 Novell 的 NetWare、IBM 的 AIX 等。 软件在 RPM 中是以包的形式存在的,包括可执行程序以及运行时所需要的文件。用户可以使用 RPM 用来处理如下的任务: 管理软件的安装、删除、升级等。 查询软件信息,如软件内容、版本、文件归属等。 依赖性检查 生成软件包,进行软件包的验证和签名等。 RPM 不只是一个包管理工具,更是文件格式和标准。因为 RPM 应用的广泛性,有众多的包管理软件是基于 RPM 做的二次开发。 RPM 在软件包依赖性上存在弱点,这使其受人诟病。这一点在其他一些包管理工具中得到了解决。 YUM YUM 源自 Yellowdog Updater, Modified,这是一个开源并且与 RPM 兼容的包管理工具。2007 年,YUM 应用到了 RedHat 平台,并且成为了很多 Linux 发行版的标准功能。 YUM 有一个简单的插件接口,开发人员可以方便的通过接口增加新的功能。YUM 的数据库采用了 xml 格式,这使其很快成为了一个标准。另外,.sqlite meta-data 格式也在引入,也提供了更好的性能。 YUM 的最大好处就是能自动的解决软件包依赖性问题,使得软件包的管理更加的自动化和方便。特别是如果需要管理一大批的计算机,比起 RPM,使用 YUM 会方便许多。YUM 还可以提供服务缓冲功能,在管理一批机器的时候,可以指定其中某一台为镜像服务器,其他机器从镜像服务器上进行下载而不是通过 Internet,这样不但可以节省带宽和资源,对于管理员来说,也可以方便的让一批机器保持一致性。 AutoUpdate AutoUpdate 是一个由 Perl 脚本编写的包管理工具,功能类似 RedHat 的 up2date 或者 autorpm(这两个基本已停止了开发)。AutoUpdate 可以自动的从不同的 ftp 或者 http 站点下载和安装 rpm 包;也可以用于让多台机器与某一台自定义的服务器保持软件包的同步。AutoUpdate 从一开始就被设计为不仅仅运行于 RedHat 平台,所有 RPM 兼容的 Linux 发行版都可以用。 与其他的包管理工具相比,AutoUpdate 有如下的特点: 与 up2date 等类型的工具相比,AutoUpdate 可以同时支持 RedHat 或者第三方的 rpm 包。另外,还可以通过设置一台服务器,其他机器从服务器获取包的方式来节省总体的带宽。 AutoUpdate 能自动处理依赖性问题,特别是有多个可选依赖树存在的情况下。 做版本比较的时候仅仅根据文件名,而不是整个 rpm 的头。 AutoUpdate 被设计为以计划任务的模式自动运行。另外,没有交互式或者图形化的界面。 AutoUpdate 有 5 种独立的工作模式:download、get、Update/Install、Merge、Purge。 1. download 模式 AutoUpdate 连接到远程服务器,比较服务器和本机上软件包版本的差异,下载并安装所有需要升级的软件包。远程服务器可以在命令行中指定,支持本地文件、ftp、http、https、sftp 等。 autodld 命令可用于 download 模式,下面是一个调用的例子: 清单 1. autodld 调用示范
服务器被配置为:ftp.mat.univie.ac.at。autodld 从服务器上发现了新的 rpm 包 rsync-2.-13.i386.rpm 之后,进行了下载、升级和删除安装文件的操作。 2. get 模式 get 模式与 download 模式类似,不同之处在于 get 模式可以指定需要更新的软件包名。如想要安装某服务器上的 zip 包,可用下面的命令:
3. Update/Install 模式 update 模式用于将已安装过的软件包升级到新的版本。软件包名称由命令行指定,或者搜索升级目录中存在的。install 模式与 update 模式类似,区别在于即使系统中没有旧版本,也会进行安装。 AutoUpdate 的工作顺序如下:首先,所有的 rpm 包(kernel 包除外)会被升级,如果存在没有解决的依赖问题,autoupdate 会检查是否 rpm 的目录中存在满足条件的 rpm 包;然后新的 kernel 包会被安装,并且根据用户的需要,将新的 kernel image 加入到启动中。 例如,如果升级包在当前目录下,可以用命令:autoupd *.rpm 对系统进行升级。如果想要重新安装,则可以用命令:autoins *.rpm。 4. Merge 模式 Merge 模式用于将 update 目录中新的 rpm 包合并到 rpm 目录中去(移除旧的版本),使用 automrg 命令。 5. Purge 模式 Purge 模式用于删除旧的软件包,使用 autoprg 命令。 6. 配置文件 AudoUpdate 有很多配置文件用来给用户更多的自定义选择,这些文件都放置在 /etc 目录下。 7. 单机模式 对于单机应用,主要的配置文件是 autoupdate.conf、*.dld 和 *.get。 autoupdate.conf 是最主要的配置文件,在 /etc/autoupdate.d 目录下,对于简单应用来说不需要做什么改动。 用户至少需要一个 .dld 文件来让 AutoUpdate 正常工作,几个主要项的内容如下: 清单 2. .dld 配置文件
dld 文件可以是多个,用户只要执行 autodld 即可根据所有的 dld 文件进行升级。 如果用户想使用 get 模式,就需要配置 *.get 文件。 清单 3. .get 配置文件
8. 服务器 - 客户端模式 假设有一批机器需要做更新,但是如果都从 Internet 上下载会很慢并且占用带宽。使用 AutoUpdate 可以设置其中一台为服务器,其他机器为客户端的方式,服务器下载完成后,其他所有客户端从这台服务器上下载 rpm 包。这样可以保证速度并且节省带宽。 设置为服务器模式很简单,我们先考虑服务器和客户端完全同配置的情况: 在 autoupdate.conf 中配置:CleanUp=0。这样,充当服务器的机器更新之后不会删除下载的 rpm 包。 将服务器的 rpm 包下载目录以某种方式 export 出去,如 ftp、http、nfs 等,使得其他客户端机器可以访问。 在客户端机器上的 *.dld 文件中,将 Host 设置为服务器即可。 如果服务器和客户端 CPU 体系结构不一致,则需要在 autoupdate.conf 中配置:BestMatch=0。这样服务器会下载所有体系结构的包,而不只是服务器本身的。各客户端会在服务器上下载符合自己 CPU 的 rpm 包。 本文出自:亿恩科技【www.enkj.com】 |