cfengine概述

1 . cfengine 的概述

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

 

cfengine 的要点

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

 

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

 

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

 

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

 

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

 

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

 

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

 

 

2 . cfengine 的功能

检查和配置网络接口

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

维护符号链接

检查和设置文件的权限

删除垃圾文件

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

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

基于类的判定结构

进程管理

 

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

 

3           cfengine 配置引擎的组件

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

cfagent 自动配置代理(必须)

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

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

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

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

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

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

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

 

cfagent 可以单独使用,如果要使用配置引擎所有的能力就需要安装和适当的使用其它组件。

 

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

 

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

 

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

1.        加速系统部署过程

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

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

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

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

 

4 . 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 ,并按指定邮箱给管理员发送信息。

5 . 配置引擎实践入门

5.1 安装

安装过程在redhat 4 u2 32 位系统上测试

安装版本是cfengine 2.1.22

文件: cfengine-2.1.22.tar.gz

安装过程:

tar -zxvf   cfengine-2.1.22.tar.gz

cd cfengine-2.1.22

./configure

make

make install

安装后文件存放目录

/usr/local/sbin   是二进制文件,如cfagent, cfservd, cfenvd, cfkey

/usr/local/share/cfengine   是配置的example

 

5.2  运行

单台主机只需要cfagent 就可以

要想进行网络部署,从中心一台机器管理网络中其它的主机,需要做一些配置部署工作,当然首要的操作系统要安装完成,网络IP 已做好规划和配置,一般机器都配置有两个网卡,前期可以只先配置一个网卡的IP ,以后的配置可以交给配置引擎来完成,配置工作任务说明,按顺序进行操作:

在每台机器安装完cfengine 后,按顺序执行cfkey, cfexecd, cfservd, cfenvd

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

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

配置引擎的样例文件在/usr/local/share/cfengine/ 目录

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

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 文件里定义了用于分发配置的目录/masterfile/inputs

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

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

 

在中心机上编辑 /var/cfengine/inputs/update.conf, 内容如下

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

#

# update.conf - for   test

#

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

 

###

#

# BEGIN update.conf

#

###

 

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

#

# This script distributes the configuration, a simple file so that,

# if there are syntax errors in the main config, we can still

# distribute a correct configuration to the machines afterwards, even

# though the main config won't parse. It is read and run just before the

# main configuration is parsed.

#

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

 

control:

 

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

 

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

 

   #

   # Which host/dir is the master for configuration roll-outs?

   #

 

   # policyhost      = ( caixuntest.caixun.com )

 

   policyhost      = ( 192.168.1.5 )

 

   master_cfinput  = ( /masterfile/inputs )

 

   AddInstallable = ( new_cfenvd new_cfservd )

 

   #

   # Some convenient variables

   #

 

   workdir         = ( /var/cfengine )

 

   cf_install_dir  = ( /usr/local/sbin )

 

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

 

  #

  # Make sure there is a local copy of the configuration and

  # the most important binaries in case we have no connectivity

  # e.g. for mobile stations or during DOS attacks

  #

 

copy:

 

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

                                  r=inf

                                  mode=700

                                  type=binary

                                  exclude=*.lst

                                  exclude=*~

                                  exclude=#*

                                  server=$(policyhost)

                                  trustkey=true

 

 

     $(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"

 

 

###

#

# END update.conf

#

###

 

 

 

 

在中心机上编辑 /var/cfengine/inputs/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 = ( caixun.com )

 

 

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

     AllowConnectionsFrom = ( 192.168.1.0/24 )

     TrustKeysFrom  = ( 192.168.1.0/24 )

     AllowUsers = ( root )

  #  HostnameKeys = ( on )

  # IfElapsed = ( 1 )

  # ExpireAfter = ( 15 )

  MaxConnections = ( 150 )

  MultipleConnections = ( true )

  #     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  192.168.1.

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

   /usr/local/sbin   192.168.1.

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

  #  /var/cfengine     *.caixun.com

   /var/cfengine     192.168.1.

 

 

在中心机上编辑 /var/cfengine/inputs/cfrun.hosts, 内容如下

#

# This is the host list for cfrun

#

# Only these hosts will be contacted by remote connection

#

 

 

# domain=caixun.com

 

access=root

 

# caixuntest

 

# caixun6

 

192.168.1.5

 

192.168.1.6

192.168.1.7

cfagent.conf 是进行应用配置的主文件,这个文件的编写是以我们的系统管理员的任务为根据,按照 cfengine 自身的语法规则编写。

cfengine 的源码包中 doc 目录下有参考文档:

  cfengine-Tutorial.html

  cfengine-Reference.html


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值