中国青基会

查看完整版本: Linux cfengine服务器配置

hew 2009-2-28 20:30

Linux cfengine服务器配置

磁针石 联系方式: gmail and gtalk: xurongzhong#gmail.com

参考资料

*     [url]http://yahoon.blog.51cto.com/13184/47275[/url]

*     [url]http://hi.baidu.com/jackli00/blog/item/e004ee55942e5d5fd10906f5.html[/url]

*     《Unix 和 Linux 自动化管理》第2版第4章


cfengine 的概述

       可以直接跳至安装章节。装完之后再看介绍等。

cfengine(配置引擎)是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易。它的目标是使系统从任何状态收敛到一种理想状态。依照它的作者 Mark Burgess 所说,cfengine 总是使您的系统更接近于您所定义的配置;它决不会使系统变得更糟。



cfengine 的要点

cfengine 将改变您的系统管理方法。 您将运行一个命令并观察系统将收敛到一种稳定状态。我保证这看起来象在变魔术。在您喝茶的时候,cfengine 将编辑文件、运行命令并创建符号链接。



然而,cfengine 并不能代替您思考。在将配置文件放入产品之前,您仍需要编写它并对它进行测试。而另一方面,cfengine 所做的事情几乎很少会造成损害。



cfengine 使系统收敛成为可能。收敛可以帮助管理员达到稳定性、可靠性和可预测性。 虽然它不是达到那些目标的唯一方法。



稳定性可定义为防止无意的更改。当 cfengine 实现收敛时,它通过规则集做到这一点。 良好设计的规则(请放心,cfengine 使良好的设计变得容易)只是使系统达到一种理想状态(如在 cfengine 规则中定义的那样理想)。例如,每次运行 cfengine 时,都可以重新创建关键的系统符号链接。或者,只要修改了本地副本,都可以从可信资源库复制 init.d 启动脚本。 如果 cfengine 没有发觉进程在运行,那么可以重新启动它们。



可靠性是使机器幸免于问题的能力。网络出故障或磁盘出故障是主要的可靠性考验。您的系统能幸免于那些问题吗?通过收敛到一种理想状态,您可以期望系统处于或接近那一理想状态。虽然可靠性不单由 cfengine 完成,但收敛可使之更加容易。 因为稳定的系统不太可能受问题影响,所以稳定性也是可靠性的主要资产。最后,cfengine 的收敛使获得“空白”系统并使它达到期望的状态成为可能, 并能够对关键系统进行快速临时替换。



这 里,有必要说明期望和理想的状态。目前为止,我们假设仅有一种理想状态,它就是那个期望的状态。事实上,对于所有机器来说并没有理想状态。机器按任务、位置、连通性、用户、操作系统类型和版本等分类。 每个系统管理员都用某些方法来对他的机器分类。 虽然对于所有机器来说没有一种理想状态,但对于给定的机器类有一个要达到的理想状态。这是 cfengine 的设计目标。cfengine 使寻找理想状态变得可行,并且易于收敛到该状态。



可 预测性是机器按照期望的那样来运转的能力。 收敛通过使系统变得稳定且可靠来达到可预测性。而且,一旦新机器收敛到一种理想状态,就可以期望它象它所替换的旧机器那样工作。当机器将很快收敛到一个已知状态时,就可以很容易地估计添加系统或替换它们的调度成本。最后,为您系统编写的软件可以期望系统处于一种接近理想的状态。 然后,系统资源处于一种可预测的状态,这样,软件就可以更多地集中在功能上,而更少地将每个系统作为怀有敌意的未知领域对待。


cfengine 的功能

检查和配置网络接口

编辑系统和用户的文本文件

维护符号链接

检查和设置文件的权限

删除垃圾文件

检查重要文件和文件系统的存在

控制用户脚本和shell命令的执行

基于类的判定结构

进程管理



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


cfengine配置引擎的组件

*     Cfengine组件

Cfengine是一个用于设置和维护计算机系统的工具,包含了以下几个组件:

cfagent 自动配置代理(必须),框架的核心,可手工执行,或者cfexecd带起,或者远程cfrun触发cfservd拉起。

cfservd 文件服务和远程激活服务(可选)

cfexecd 计划和报告服务(建议)

cfenvd 异常检测服务(强烈建议)

cfrun 远程激活cfagent的方法(需要的时候用这个)

cfshow 检查有帮助的数据库的内容的方法(辅助)

cfenvgraph  异常检测服务cfenvd的附属工具(辅助)

cfkey 密匙生成工具(每台主机运行一次).,

所有命令的帮助-h,-v详细信息,-d2打开调试开关。



配置引擎组合了perl和shell等语言,但要比perl和shell要高级:一个简单的描述能导致在多个主机上执行成百上千的操作,也能够自己建立非常有深度的脚本。一旦采用了配置引擎,就可以代替手工配置,从而节约出大量的时间去做其它的事情



配置引擎的主要目的是建立一个单一的中心配置文件,它定义了网络中的每个主机是怎么配置的,并且用一个直观的方式去执行。每个主机上都运行着一个解释程序来解析主文件,每个主机依靠这个文件进行配置检查,如果系统背离了配置文件的定义,就会自动进行修复。



在服务器系统的部署维护中采用配置引擎有以下好处:

1.       加速系统部署过程

2.       消除部署过程中的人为技术原因、操作方法等造成的各类配置文件的差错

3.       配置文件集中存储、备份,方便了管理

4.       对由于硬件造成的重新部署维护,可以快速实施

5.       结合perl,sh等系统维护脚本,完成更为复杂的任务




cfengine工作原理说明

由cfrun执行远端主机的配置工作

1、在中心配置服务器上执行cfrun后,按cfrun.hosts里的主机列表调用远端服务器的cfservd进程

2、远端服务器的cfservd调用本机的cfagent,执行update.conf中的内容,从中心配置服务器的主目录下载更新配置文件cfagent.conf等,然后执行cfagent.conf中的内容

3、cfagent执行完后返回给cfservd,并由cfservd返回运行结果给中心配置服务器的cfrun,显示。然后执行cfrun.hosts中的下一个主机。



计划执行配置任务

cfexecd按照cfagent.conf中设定的时间或周期执行cfagent,并按指定邮箱给管理员发送信息。




下载

到[url]http://www.cfengine.org[/url]下载cfengine的程序,目前稳定版最新的是cfengine-2.2.9.tar.gz。
安装

./configure

make

make install

执行文件被安装到了/usr/local/sbin目录下,都是cf开头的。配置文件模板被放在了/usr/local/share/cfengine目录下。
配置



*执行cfkey:cfkey执行后生成/var/cfengine/ppkey目录和两个本地公私密匙

*执行cfexecd:cfexecd执行后生成/var/cfeninge/inputs,outputs等目录。

*cp /usr/local/sbin/cf* /var/cfengine/bin/

*如需拷贝模板配置文件,执行:

cp /usr/local/share/cfengine/cfagent.conf.example /var/cfengine/inputs/cfagent.conf
cp /usr/local/share/cfengine/cfservd.conf.example /var/cfengine/inputs/cfservd.conf
cp /usr/local/share/cfengine/update.conf.example /var/cfengine/inputs/update.conf

下面是三个非常重要的配置文件:

update.conf  cfagent执行时,首先执行update.conf里的内容,然后执行cfagent.conf里的内容,为什么用两个文件?update.conf一般完成的是每次都固定的任务,很少去变更,以防出错。cfagent.conf是经常进行变更维护的配置文件,如果有语法错误也不会影响update.conf的基本任务的完成,仍然能够从中心位置获得配置文件。

cfservd.conf 是cfservd的配置文件,cfservd是提供了文件服务和cfrun的运行的网络通讯层。

cfrun.hosts 是cfrun能够控制的计算机   

这三个文件通过安全的方式复制到所有的机器上,目标目录是/var/cfengine/inputs

简要说明:cfagent, cfservd等执行时默认是在/var/cfengine/inputs目录里找update.conf/cfagent.conf, cfservd.conf启动配置文件。我们在update.conf文件里定义了用于分发配置的目录/var/cfengine/master/inputs。

当在中心机上执行cfrun时,会控制cfrun.hosts文件里写的主机执行cfagent,调用update.conf,从中心机的/var/cfengine/master/inputs下载文件到本地的/var/cfengine/inputs目录,然后调用cfagent.conf文件,开始本地主机的配置任务。 —是否有开始本机配置,待确认。

cfagent.conf是应用部署过程的核心文件,可以执行的任务有:文件的符号连接,复制文件,删除文件,执行shell/perl脚本,进程的启动和停止,装载文件系统,编辑文件等等,系统管理员经常做的任务都可以做

*在服务器10.50.20.100上建立/var/cfengine/master/inputs



*     在服务器10.50.20.100的/var/cfengine/master/inputs配置cfagent.conf



# cat cfagent.conf



control:



   actionsequence = ( files shellcommands copy processes )

#   domain         = ( mysite.com )

   timezone       = ( CST )

#   smtpserver     = ( smtphost.mysite.org )  # used by cfexecd

#   sysadm         = ( [email]neil@mysite.com[/email] )     # where to mail output



######################################################################

#resolve:

   #

   # Add these name servers to the /etc/resolv.conf file

   #

#    10.50.20.100    # local nameserver

######################################################################



copy:



#  Get a file from some trusted server, e.g. password sync

#  To do this, you need to use cfkey to install keys



#  /etc/shadow mode=0600 server=passwordserver



######################################################################



files:

   /etc/named.conf

         mode=744        # make sure the file permissions are right

         owner=root      # make sure it's owned by root

         action=fixall   # if anything is wrong, fix it immediately!

         checksum=md5    # keep a "tripwire" checksum to tell us

                         # if any changes occur here

   /etc/ntp.conf mode=700 owner=root action=fixall

######################################################################



shellcommands:

                "/bin/rm -rf /tmp/meil*"

                "/bin/echo hello > /tmp/meil_`date +%y-%m-%d--%H-%M-%S`"

######################################################################

processes:

   new_cfservd::

    "cfservd" signal=term restart /var/cfengine/bin/cfservd

   new_cfenvd::

    "cfenvd" signal=kill restart "/var/cfengine/bin/cfenvd -H"

动作类型简介:

groups, control, copy, homeservers, binservers, mailserver, mountables,import, broadcast, resolve, defaultroute, directories, miscmounts,files, ignore, tidy, required, links, disable, shellcommands,strategies,editfiles, processes

*     在服务器10.50.20.100的/var/cfengine/inputs 配置 cfrun.hosts



# vi cfrun.hosts

access=root

10.50.2.22

这里10.50.2.22就是客户端。

*     在服务器10.50.20.100的/var/cfengine/inputs 配置 cfservd.conf



# cat cfservd.conf

#########################################################

# This is a cfd config file

# The access control here follows after any tcpd

# control in /etc/hosts.allow and /etc/hosts.deny

#########################################################

# Could import cf.groups here and use a structure like

# in cfengine.conf, cf.main, cf.groups

control:

#        domain = ( mysite.com )

     cfrunCommand  = ( "/usr/local/sbin/cfagent" )



any::

     AllowConnectionsFrom = ( 10.50.2.0/8 )

     TrustKeysFrom  = ( 10.50.2.0/8 )

     AllowUsers = ( root )

#  HostnameKeys = ( on )

# IfElapsed = ( 1 )

# ExpireAfter = ( 15 )

  MaxConnections = ( 150 )

  MultipleConnections = ( true )

   LogAllConnections = ( true )

   ExpireAfeter = ( 15 ) #

#     AutoExecInterval = ( 60 )

#     AutoExecCommand  = ( "/iu/nexus/local/gnu/lib/cfengine/bin/cfwrap /iu/nexus/local/gnu/lib/cfengine/bin/cfhourly")





#########################################################



admit:   # or grant:



#  /masterfile/inputs  *.caixun.com

   /masterfile/inputs  10. *.mysite.com

#  /usr/local/sbin   *.caixun.com

   /usr/local/sbin   10. *.mysite.com

#  /var/cfengine/bin/cfagent  *.caixun.com

#  /var/cfengine     *.caixun.com

   /var/cfengine     10. *.mysite.com

        /usr/local/sbin/cfagent 10. *.mysite.com

*     在服务器10.50.20.100的/var/cfengine/inputs 配置update.conf



# cat update.conf

control:



   actionsequence  = ( copy processes tidy )  # Keep this simple and constant

#   domain          = ( mysite.com )  # Needed for remote copy

#   policyhost      = ( cfserver.mysite.com )

    policyhost      = ( 10.50.20.100 )

    master_cfinput  = ( /var/cfengine/master/inputs )

    AddInstallable = ( new_cfenvd new_cfservd )



   # Some convenient variables

   workdir         = ( /var/cfengine )

   cf_install_dir  = ( /usr/local/sbin )



  !AllBinaryServers::



     SplayTime = ( 1 )



copy:



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

                                  r=inf

                                  mode=700

                                  type=binary

                                  exclude=*.lst

                                  exclude=*~

                                  exclude=#*

                                  server=$(policyhost)

                                  trustkey=true

# Copy local exec file to bin

!quetzalcoatal::



     $(cf_install_dir)/cfagent    dest=$(workdir)/bin/cfagent

                                  mode=755

                                  backup=false

                                  type=checksum



     $(cf_install_dir)/cfservd    dest=$(workdir)/bin/cfservd

                                  mode=755

                                  backup=false

                                  type=checksum

                                  define=new_cfservd



     $(cf_install_dir)/cfexecd    dest=$(workdir)/bin/cfexecd

                                  mode=755

                                  backup=false

                                  type=checksum



     $(cf_install_dir)/cfenvd     dest=$(workdir)/bin/cfenvd

                                  mode=755

                                  backup=false

                                  type=checksum

                                  define=new_cfenvd



#####################################################################

tidy:

     # Cfexecd stores output in this directory.

     # Make sure we don't build up files and choke on our own words!



     $(workdir)/outputs pattern=* age=7



#####################################################################

processes:

  new_cfservd::



    "cfservd" signal=term restart /var/cfengine/bin/cfservd

  new_cfenvd::

"cfenvd" signal=kill restart "/var/cfengine/bin/cfenvd -H"



*     在服务器10.50.2.22的配置

安装,然后配置和服务器一样的/var/cfengine/inputs
页: [1]
查看完整版本: Linux cfengine服务器配置
Baidu