唐山网站建设

设为主页 加入收藏 繁體中文

巧用cfengine治理linux服务器

核心提示:文章标题:巧用cfengine治理linux服务器。Linux是中国站长站的1个技术频道。包括桌面利用,Linux系统治理,内核研究,嵌进式系统和开源等1些基天职类

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

图⑴是Cfengine的组成部份的关系图。

 图⑴Cfengine的组成部份的关系图

基本安装

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

 #wgetftp://fr.rpmfind.net/linux/dag/redhat/el5/en/i386/dag/RPMS/cfengine⑵.2.2⑴.el5.rf.i386.rpm

 #rpm-ivhcfengine⑵.2.2⑴.el5.rf.i386.rpm

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

 手动建立Cfengine的工作目录

 #mkdir/var/cfengine

 #mkdir/var/cfengine/bin

 #mkdir/var/cfengine/inputs

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

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

 #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

#p#分页标题#e#

3运行所需的进程

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

 (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运行(多是每天1次)。

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

 editfiles:

 {/etc/crontab

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

 }

 processes:

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

 通过此技术,假设1种方法工作不正常,那末另1方法最后会修复它的题目。

 (2)cfservd守护进程

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

 processes:

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

 3查看类标识系统

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

 #cfagent-p-v如图⑵。


图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服务器,敬请关注。

#p#分页标题#e#

在前面,向大家先容了在linux服务器如何安装cfengine(配置引擎),下面笔者开始配置cfengine治理Linux服务器。

 1、创建基本的配置文件

 这些配置文件需要放置在配置服务器上的主配置目录中。这些文件都是公共文件并以最初情势在网络中的每台服务器上使用。

 (1)cfservd.conf示例

 下面是cfservd守护进程的配置文件。它答应客户机传送主配置文件集合,还答应通过cfrun

 远程履行cfagent。明显,只有1个系统答应访问中心配置文件(服务器),但是,答应cfservd访问这些文件不会侵害其他系统上的任何文件(由于它们不复制这些文件)。但是,所有系统都可以从远程履行cfagent中获益,由于它答应从远程系统中按需履行cfagent。因此,可以在所有系统中使用以下cfservd.conf,这正是我们所需要的功能:

 control:

 domain=(mydomain.com)

 AllowUsers=(root)

 cfrunCommand=("/var/cfagent/bin/cfagent")

 admit:

 /usr/local/var/cfengine/inputs*.mydomain.com

 /var/cfagent/bin/cfagent*.mydomain.com

 CfrunCommand设置指定在接收到来自cfrun的连接时,要履行的cfagent2进制文件的位

 置。admit段非常重要,由于它指定哪个主机访问哪个文件。您必须授与对中心配置目录和cfagent2进制文件的访问权。您还需要对客户机需要从此服务器传送的任何其他文件授与访问权。

 (2)基本update.conf

 update.conf文件必须尽可能地简单并应进行较少的更改。此文件在cfagent.conf之前由

 cfagent分析和履行。假设cfagent.conf文件已受损,则在下次客户机履行cfagent时,它们会取得新版本,由于其update.conf文件依然有效。破坏的update.conf文件会带来麻烦,因此建议在将文件放进中心配置目录时,对任何更改都要进行完全的测试。另外,此文件在每台主机(包括服务器)上运行。cfagent命令很奇妙,在配置服务器上运行时在本地复制文件(而非通过网络)。control段定义1些变量,然后在copy段使用。可以通过$(var)或${var}序列来完成变量替换。

 1control:

 2actionsequence=(copytidy)

 3domain=(mydomain.com)

 4workdir=(/var/cfengine)

 5policyhost=(server.mydomain.com)

 6master_cfinput=(/usr/local/var/cfengine/inputs)

 7cf_install_dir=(/usr/local/sbin)

 8

 9copy:

 10$(cf_install_dir)/cfagentdest=$(workdir)/bin/cfagent

 11mode=755

 12type=checksum

 13

 14$(cf_install_dir)/cfservddest=$(workdir)/bin/cfservd

 15mode=755

 16type=checksum

 17

 18$(cf_install_dir)/cfexecddest=$(workdir)/bin/cfexecd

 19mode=755

 20type=checksum

 21

 22$(master_cfinput)dest=$(workdir)/inputs

 23r=inf

 24mode=644

 25type=binary

 26exclude=*.lst

 27exclude=*~

 28exclude=#*

 29server=$(policyhost)

 30tidy:

 31$(workdir)/outputspattern=*age=7

 留意行号是笔者添加的便于解释参数:

 第5行:字符串server.mydomain.com应替换为配置你自己服务器的主机名。

 第6行:包括主配置文件的主配置服务器目录。

 第7行:每个服务器保存cfengine2进制文件的位置。

 第11行:指定了源目录应递回复制到目标目录,递回深度无穷制。

 第13行:此选项最初会使人误解。它指定任何本地文件应与主副本进行字节比较,以肯定

 是否是需要更新。

 第17行:此选项指出从指定的服务器中检索文件。

 第31行:位于tidy段的此命令删除outputs/目录中在最后7天还没有访问的所有文件。

 每个文件的权限(模式)在每次运行时都要进行检查,即使文件已存在也是如此。

 (3)cfagent.conf的框架

 这是cfengine配置的实质。对系统履行的任何更改都有希看通过此文件来完成。这里的示例cfagent.conf非常简单,只用于测试。假设从cfengine调用脚本并且这些脚本天生任何输出,则输出结果将显示出来(交互式履行时),被记录或通过电子邮件发送(从cfexecd履行时)。由于通常情况下每个小时履行cfagent,所以假设出现题目或有些内容被更改且需要向治理员发送通知,则任何脚本都应产生输出。

 1.control:

 2.actionsequence=(filesdirectoriestidydisableprocesses)98

 3.domain=(mydomain.com)

 4.timezone=(EDTEST)

 5.access=(root)

 6.#Wherecfexecdsendsreports

 7.smtpserver=(mail.mydomain.com)

 8.sysadm=(root@mydomain.com)

 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命令非常重要,但轻易忽视。必须在此变量中列出要处理的每个代码段。假设编写了1个新的代码段,但忘记将其添加到此列表中,则命令不会履行。

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

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

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

 建目录。

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

 目录而非此目录本身。

 第17行:出于安全缘由,禁用这些文件。假设发现这些文件,则这些文件被重命名。假设

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

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

#p#分页标题#e#

2、创建配置服务器

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

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

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

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

 3、豫备客户机系统

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

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

#p#分页标题#e#

4、使用cfrun

 cfrun命令答应在网络上任何数目的系统中履行cfagent。它需要在当前目录中包括名为

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

 domain=mydomain.com

 server.mydomain.com

 client1.mydomain.com

 client2.mydomain.com

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

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

 outputdir=/tmp/cfrun_output

 maxchild=10106

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

 通常运行cfrun可以不带参数。假设确切要指定参数,格式以下所示:

 cfrunCFRUN_OPTIONSHOSTS--CFAGENT_OPTIONS-CLASSES

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

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

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

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

 以后是类的可选列表。假设指定了某些类,那末只有与其中某个类匹配的主机将实际履行

 cfagent(虽然已联系了每个主机,由于每个主机必须决定它是否是匹配其中1个类)。

 5、利用实例:使用cfengine备份数据

 假设您已浏览本文之前的大部份内容,就会知道cfengine非常棒。1旦安装并运行了cfengine,它便可以够为您做任何事,包括备份数据。

 1、使用cfengine履行本地备份

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

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

 copy:

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

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

 每次履行cfagent时都会履行这个复制进程,通常来讲这过于频繁了。可以限制每天只履行1次这类操纵:

 copy:

 Hr06.OnTheHour::

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

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

 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、在备份时排除文件

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

 ignore参数。可以指定任意多个这类参数,每个参数都提供了1种模式,任何匹配的文件和目录都将被忽视。这是避免对特定目录履行递回操纵的惟1方法。

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

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

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

 面是1个例子:

 copy:

 Hr06.OnTheHour::

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

 ignore=cache#Netscapecachedirectory

 ignore=Cache#Mozillacachedirectory

 exclude=*.tmp

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

 总结:cfengine是1种独特的系统治理工具。即使您没有决定使用它,但其概念和履行将对您的工作产生帮助。假设您决定使用它,您将发现cfengine无穷的灵活性和惊人的用处。

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

http://www.fw8.net/
TAG:服务器,系统,进程,文件,客户机
评论加载中...
内容:
评论者: 验证码: