当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 巧用cfengine管理linux服务器

Linux服务器
Linux上双网卡绑定方法(Suse9SP3)
Linux操作系统调优参数的意义
Linux下使用SSH客户端及其Sftp文件传送
教你恢复被误删除的Linux文件
SQL Server注入大全及防御
Linux无法解析域名的解决办法
Linux系统下安装和配置MyEclipse的方法
Ubuntu下VirtualBox 1.4.0设置文件共享
Windows与Linux系统共享StarDict字典文件
修改Linux下相关的登陆信息
Windows通过SecureCRT远程登录Linux主机
Linux操作系统如何修改SWAP交换区的大小
Linux操作系统下为Apache目录添加密码
Linux时间设置与同步(NTP)
Linux内核补丁AMD旁路转换缓冲(TLB)错误
Linux架设DHCP服务器的方法
Fedora 8下Apache配置与管理
Linux操作系统下用单网卡捆绑双IP的方法
Ubuntu Linux系统环境变量配置文件
SUSE Linux中将Tomcat作为Service运行

Linux服务器 中的 巧用cfengine管理linux服务器


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-18   浏览: 138 ::
收藏到网摘: n/a

cfengine(配置引擎)是一种UNIX管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。Cfengine适用于管理各种环境,从一台主机到上万台主机的机群均可使用。到2.2版本为止,我们现在所知的用于一般性管理的最大安装机群约为20,000台。

图-1是Cfengine的组成部分的关系图。

 图-1Cfengine的组成部分的关系图

基本安装

 在任何一种情况下,你都需要两个库:BerkeleyDB,用于内部数据库的使用;和OpenSSL,用于加密方法。这些库都是开放资源,并且如同cfengine一样可以免费使用。没有这些库,你将无法使用cfengine,你也不能用其他的库来替代这两个库。本文使用的RHEL5.0已经包括这些库。

 #wgetftp://fr.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/cfengine-2.2.2-1.el5.rf.i386.rpm

 #rpm-ivhcfengine-2.2.2-1.el5.rf.i386.rpm

 接下来的一步是建立cfengine工作目录树的基本结构:

 手动建立Cfengine的工作目录

 #mkdir/var/cfengine

 #mkdir/var/cfengine/bin

 #mkdir/var/cfengine/inputs

 接下来,在工作目录bin的子目录下(例如:/var/cfengine/bin)建立cfengine可执行程序的本地副本。实际运行过程中,是这些副本被执行,因此当网络在执行任务期间断掉,也不会对系统产生风险。

 步骤3复制Cfengine二进制代码到工作目录

 #cp/usr/local/sbin/cfagent/var/cfengine/bin

 #cp/usr/local/sbin/cfexecd/var/cfengine/bin

 #cp/usr/local/sbin/cfservd/var/cfengine/bin

 #chown-Rroot:0/var/cfengine

 #chmod-R755/var/cfengine



3运行所需的进程

 在最简单的安装中,可以通过在每台主机上手动运行cfagent来使用cfengine。但是,如果运行一个或多个守护进程,则会获益良多。

 (1)cfexecd守护进程

 尽管在理论上可以按需随时运行cfagent,但最好定期自动运行cfagent。这是使用cfexecd

 的时间;cfexecd以守护进程的方式运行并按定义、预定义的计划执行cfagent。通过将时间类添加到cfagent.conf的control块的schedule设置中对此计划进行修改。默认设置是Min00_05,这意味着cfagent将在每个小时的前5分钟运行。要每小时运行两次,例如,可以将下面的代码放入cfagent.conf的control段中:

 schedule=(Min00_05Min30_35)

 cfexecd守护进程没有自己的配置文件,但它不在cfagent.conf之外使用此设置。

 还可以使用系统的cron守护进程定期运行cfexecd。下列条目可以添加到系统crontab(通常

 为/etc/crontab)中以便每小时执行(和报告)cfagent:

 0****root/usr/local/sbin/cfexecd-

 F-F选项告诉cfexecd不要进入守护进程模式,因为它正由cron运行。

 为获得可靠性,请以守护进程的方式运行cfexecd,还可以从cron运行(可能是每天一次)。

 然后,可以在cfagent.conf中检查crontab条目并检查cfexecd守护进程是否正在运行。如果将下面的代码放入cfagent.conf中,请执行这些检查并更正任何问题:

 editfiles:

 {/etc/crontab

 AppendIfNoSuchLine"0****root/var/cfengine/bin/cfexecd-F"

 }

 processes:

 "cfexecd"restart"/var/cfengine/bin/cfexecd"

 通过此技术,如果一种方法工作不正常,那么另一方法最后会修复它的问题。

 (2)cfservd守护进程

 cfservd守护进程在所有系统中并非是必需的。它需要运行cfengine文件服务器,对我们而言,它只是中心配置服务器。它还允许从其他系统远程执行cfagent。如果需要此功能,则需要在每个系统中运行cfservd。在任一情况下,都应始终进行检查,以确保它与cfagent.conf中的下列命令一起运行:

 processes:

 "cfservd"restart"/var/cfengine/bin/cfservd"

 3查看类标识系统

 类是cfengine的核心。每个系统都属于一个或多个类。或者,如果换一种视角思考,许多类都是在每次cfagent运行时基于各种不同种类信息进行创建。配置文件中的每个操作都仅限于特定的类。因此,任何给定的操作都可以只在一个主机上或运行特定操作系统的多个主机上执行,也可以在每个主机上执行。要在任意给定的系统中确定定义哪些标准类,请运行下面的命令:

 #cfagent-p-v如图-2。


图2查看类标识系统

 如您所见,我的系统存在相当数量的预定义类。它们可以划分为如下类别:

 操作系统:linux_i686_2_6_18_8_el5xen

 体系结构:linux_i686_2_6_18_8_el5xen__1_SMP

 主机名:kaybee_orgkaybeeorg

 IP地址:10_1_110_1_1_1ipv4_10ipv4_10_1ipv4_10_1_1ipv4_10_1_1_1

 日期/时间:MayMin15_20Min19Q2TuesdayYr2008

 可以以此使用ps-ef|grepcf命令和netstat-anlp|grepcfservd查看进程运行情况的服务占用的端口情况如图3、4



图3使用ps-ef|grepcf命令查看服务进程


使用netstat-anlp|grepcfservd命令查看服务占用的端口

 到此为止笔者在linux服务器安装了cfengine(配置引擎),下篇文章中笔者开始配置cfengine管理Linux服务器,敬请关注。

 9.files:

 10./etc/passwdmode=644owner=rootaction=fixall

 11./etc/shadowmode=600owner=rootaction=fixall

 12./etc/groupmode=644owner=rootaction=fixall

 13.directories:

 14./tmpmode=1777owner=rootgroup=root

 15.tidy:

 16./tmprecurse=infage=7rmdirs=sub

 17.disable:

 18./root/.rhosts

 19./etc/hosts.equiv

 20.processes:

 21."cfservd"restart"/var/cfengine/bin/cfservd"

 22."cfexecd"restart"/var/cfengine/bin/cfexecd"

 第2行:actionsequence命令非常重要,但容易忽略。必须在此变量中列出要处理的每个代码段。如果编写了一个新的代码段,但忘记将其添加到此列表中,则命令不会执行。

 第4行:cfengine将确保系统使用此列表中的一个时区进行配置。

 第10行:此代码段检查一些重要文件的所有权和权限并更正它发现的任何问题。

 第14行:此代码段检查/tmp/目录中的权限并在需要时更正这些权限。如果需要,它还创

 建目录。

 第16行:此代码段从/tmp/目录中删除过去7天中尚未访问的所有文件。还删除/tmp/的子

 目录而非此目录本身。

 第17行:出于安全原因,禁用这些文件。如果发现这些文件,则这些文件被重命名。如果

 这些文件是可执行文件,则可执行的位被取消设置。

 第20行:本段验证cfservd和cfexecd守护进程是否正在运行,如果没有运行,则启动它们。

二、创建配置服务器

 配置服务器包含cfengine配置文件的主副本。它还像所有客户机系统一样,定期处理此配置文件。服务器必须运行经过正确配置的cfservd,以便客户机系统可以从系统中检索主配置文件。配置服务器需要特殊位置来保存cfengine主配置文件。在本例中,此位置是/usr/local/var/cfengine/inputs/。此位置可以是除/var/cfengine/inputs/之外的任何目录,因为重要主机在执行时与其他主机一样,将文件复制到此目录中。

 与所有系统相似,此服务器也应作为守护进程或从cron(最好是两者)运行cfexecd。

 下面生成服务器密钥,需要在服务器系统上运行cfkey来创建公钥和私钥文件。这些文件位于/var/cfengine/ppkeys/目录中并将被命名为localhost.priv和localhost.pub。然后需要将localhost.pub复制到同一目录中的新文件中。此文件应称为root-10.1.1.1.pub,假定您的IP地址为10.1.1.1。只需让cfrun命令连接到本身即可,但无论如何执行此操作会很有用。

 根据下节描述的客户机的IP地址,服务器还需要在适当文件中保存的每个客户机的公钥。

 三、准备客户机系统

 客户机系统的配置相对简单。一旦安装了实际的cfengine二进制文件,则需要生成和复制适当的公钥(如本节所述)。还需要从主服务器手动复制update.conf文件,并放在/var/cfengine/inputs/中。在正确的位置保存此文件后,则应手动运行cfagent以下载其余的配置文件并完成系统配置。每个客户机都应以守护进程的方式或从cron运行cfexecd。可能要在每个客户机上运行cfservd并允许使用cfrun远程执行cfagent。假定已经在服务器上的cfagent.conf文件中完成了配置,则这些守护进程将在第一次手动执行cfagent时启动。

 下面生成客户机密钥,需要在每个客户机系统上运行cfkey。此操作将在/var/cfengine/ppkeys/中创建localhost.priv和localhost.pub。然后,需要将中心服务器的公钥复制到客户机。如果服务器的IP地址是10.1.1.1,则应将其公钥复制到客户机上/var/cfengine/ppkeys/目录中的root-10.1.1.1.pub。最后,需要将客户机的公钥(localhost.pub)复制到服务器的/var/cfengine/ppkeys/目录中。此外,此文件应按照客户机的IP地址进行命名(如果其IP地址是10.2.2.2,则此文件应在服务器上被命名为root-10.2.2.2.pub)。这可以手动完成,也可以在初始系统配置脚本中自动完成。

四、使用cfrun

 cfrun命令允许在网络上任何数量的系统中执行cfagent。它需要在当前目录中包含名为

 cfrun.hosts的配置文件(或通过-f选项指定的文件)。文件的内容应如下所示:

 domain=mydomain.com

 server.mydomain.com

 client1.mydomain.com

 client2.mydomain.com

 除域设置外,此文件仅是包含每台主机(包括服务器)的一个列表。通过将下列选项添加到

 文件顶部,还可以将输出记录到一系列文件中(而非显示在屏幕上):

 outputdir=/tmp/cfrun_output

 maxchild=10106

 上述代码告诉cfrun生成10个进程,并将每台主机的输出保存在指定目录的不同文件中。

 通常运行cfrun可以不带参数。如果确实要指定参数,格式如下所示:

 cfrunCFRUN_OPTIONSHOSTS--CFAGENT_OPTIONS-CLASSES

 CFRUN_OPTIONS是可选的。可为cfrun命令包含任何数量的选项。接着,可以指定主机

 名的可选列表。如果已指定了某些主机,则只联系这些主机。如果未指定任何主机,则联系

 cfrun.hosts文件中的每个主机。

 第一个--之后是在每个远程系统上运行的要传送给实际cfagent命令的任何选项。第二个--

 之后是类的可选列表。如果指定了某些类,那么只有与其中某个类匹配的主机将实际执行

 cfagent(尽管已联系了每个主机,因为每个主机必须决定它是否匹配其中一个类)。

 五、应用实例:使用cfengine备份数据

 如果您已经阅读本文之前的大部分内容,就会知道cfengine非常棒。一旦安装并运行了cfengine,它就可以为您做任何事,包括备份数据。

 1、使用cfengine执行本地备份

 首先,可以使用cfengine完成文件和目录的复制。cfengine可以执行完美的复制--包括

 特殊文件、符号链接以及目录的复制。它还可以保留文件的宿主和权限。下面是一个基本的配置,可以将其放入cfagent.conf文件中(如果已经有了一个copy段,可以在现有的copy段后面直接添加内容):

 copy:

 /etcdest=/usr/local/backup/etcpurge=truer=inf

 这样可以让网络中的每台主机都递归地将/etc/目录精确地复制到/usr/local/backup/目录中。purge=true选项可以让复制操作删除那些源目录中没有而目标目录中存在的文件。

 每次执行cfagent时都会执行这个复制过程,通常来说这过于频繁了。可以限制每天只执行一次这种操作:

 copy:

 Hr06.OnTheHour::

 /etcdest=/usr/local/backup/etcpurge=truer=inf

 现在只有在每天06:00运行cfagent时才会执行复制操作。此处假设您在整点时运行cfagent,而且每小时运行一次。如果不这样做,就应该适当调节示例中的时间设置。此例的问题是每天的备份都会覆盖前一天的备份。因此,您用来判断系统/etc/目录中可能出现的问题的时间只有不到24个小时。不必担心,我可以增强备份系统的功能,让它保留一周中有价值的备份。

 control:

 day_of_week=(ExecResult(/bin/date+%a))

 copy:

 Hr06.OnTheHour::

 /etcdest=/usr/local/backup/${day_of_week}/etc

 purge=truer=inf

 现在您可以把有价值的备份数据保留7天,这些备份位于/usr/local/backup/Mon/etc、

 /usr/local/backup/Tue/etc等目录中。

 2、在备份时排除文件

 如果想在备份时包括或者排除一些文件,可以在copy段中使用3个可选参数。第一个是

 ignore参数。可以指定任意多个这种参数,每个参数都提供了一种模式,任何匹配的文件和目录都将被忽略。这是防止对特定目录执行递归操作的惟一方法。

 第二个参数是include。可以使用这个参数来指定在复制时应该包括的所有文件列表。可以

 指定任意多个include参数,但是即使只有一个include参数,也会导致不匹配的文件在默认情况下被排除在复制操作之外。

 最后一个参数是exclude选项。任何匹配这种模式的文件都会被排除在复制操作之外。下

 面是一个例子:

 copy:

 Hr06.OnTheHour::

 /homedest=/usr/local/backup/homepurge=truer=inf

 ignore=cache#Netscapecachedirectory

 ignore=Cache#Mozillacachedirectory

 exclude=*.tmp

 上面的例子表示tmp文件会被排除在备份文件之外。

 总结:cfengine是一种独特的系统管理工具。即使您没有决定使用它,但其概念和执行将对您的工作产生帮助。如果您决定使用它,您将发现cfengine无限的灵活性和惊人的用处。

上一页[1][2][3][4][5]