cfengine配置

Linux cfengine服务器与客户端的配置

一、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是一个用于设置和维护计算机系统的工具,包含了以下几个组件:

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

二、cfengine的安装

(一)、安装环境(服务器端和客户端)

1、制作yum源

mkdir -p /mnt/cdrom

mount -o loop /usr/local/rhel-server-6.4-i386-dvd.iso  /mnt/cdrom/(或者将镜像光盘挂载上去,通过df  -m 找到挂载的光盘如/dev/sr1,然后执行mount -o loop /dev/sr1  /mnt/cdrom)

cd /etc/yum.repos.d

mkdir -p bak

mv *.repo bak/

vi /etc/yum.repos.d/redhat.repo

(将

[RHEL]

name=RHEL6.4

baseurl=file:///mnt/cdrom

gpgcheck=0

gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

enabled=1

复制进去,保存退出)

yum clean all

yum update

2、通过yum安装环境

yum install gcc-c++.i686 flex.i686 bison.i686 pcre* db4* openssl*   -y

(二)、安装配置cfengine(服务器端)

1、将安装包cfengine-2.2.10.tar.gz下载到/root中,然后在/root路径下依次执行下列命令

tar -zxvf cfengine-2.2.10.tar.gz

cd cfengine-2.2.10

./configure

make

make install

2、创建配置文件

mkdir -p /var/cfengine/masterfile/inputs

mkdir /var/cfengine/inputs

mkdir /var/cfengine/outputs

mkdir /var/cfengine/bin

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

在/var/cfengine/inputs中创建配置cfservd.conf、update.conf、cfagent.conf、cfrun.hosts,并将cfagent.conf及需要客户端下载的文件复制到/var/cfengine/masterfile/inputs中,

然后依次运行如下命令

/var/cfengine/bin/cfkey

/var/cfengine/bin/cfexecd (可以不运行)

/var/cfengine/bin/cfservd

/var/cfengine/bin/cfenvd

查看cfengine进程及5308端口是否启动

ps -e |grep cf

netstat -an |grep 5308

在/var/cfengine/inputs中编辑cfrun.hosts,内容为

access = root

192.168.70.129

在/var/cfengine/inputs中编辑cfagent.conf

# cat cfagent.conf

control:

actionsequence = ( files shellcommands copy processes )

domain         = ( test.com )

timezone       = ( CST )

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

#   sysadm         = ( [email protected] )     # 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 zhangqing > /tmp/meil_`date +%y-%m-%d--%H-%M-%S`"

"/bin/echo hello zhangqingXU > /root/Desktop/x_`date +%y-%m-%d--%H-%M-%S`"

"/bin/sh /var/cfengine/inputs/x.sh"

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

processes:

new_cfservd::

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

new_cfenvd::

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

在/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 = ( test.com )

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

any::

AllowConnectionsFrom = ( 192.168.70.0/24 )

TrustKeysFrom  = ( 192.168.70.0/24 )

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  *.test.com

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

/usr/local/sbin   *.test.com

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

#  /var/cfengine     *.caixun.com

/var/cfengine     *.test.com

/usr/local/sbin/cfagent *.test.com

在/var/cfengine/inputs中编辑update.conf

# cat update.conf

control:

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

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

#   policyhost      = ( cfserver.mysite.com )

policyhost      = ( 192.168.70.132 )

master_cfinput  = ( /var/cfengine/masterfile/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"

(三)、安装配置cfengine(客户端)

1、cfengine-2.2.10.tar.gz安装同服务器端相同,但不需要创建masterfile

2、将服务器端cfservd.conf、update.conf、cfagent.conf复制到客户端/var/cfengine/inputs中

3、依次运行如下命令

/var/cfengine/bin/cfkey

/var/cfengine/bin/cfservd

(四)、关于DNS的设置

假如服务器主机名为service,ip 为192.168.70.132,客户机主机名为web1,ip 为192.168.70.129,则在服务器和客户机上编辑/etc/hosts,在其中添加

192.168.70.132  service.test.com

192.168.70.129  web1.test.com

其中test.com为cfservd.conf、update.conf、cfagent.conf中的域名,客户端也可以不解析服务器端的IP

(五)、测试执行方法

1、在服务器和客户端上关掉防火墙或者让防火墙放行5308端口

2、在服务器上运行cfrun  -v 或者在客户端执行cfagent –v (加上-v可以看到执行过程),若执行成功,则服务器端/var/cfengine/masterfile/inputs中的内容会被下载到客户端/var/cfengine/ inputs中,并按照cfagent.conf中的命令进行在客户端的各种操作。

例如在客户端安装apache服务,则在服务器/var/cfengine/masterfile/inputs/x.sh中编辑如下

#!/bin/bash

#tar -zxvf /var/cfengine/inputs/flex-2.5.4a.tar.gz -C /var/cfengine/inputs/flex/

echo "nihaoA_`date +%y-%m-%d--%H-%M-%S`" >> /root/Desktop/qq.txt

cd /var/cfengine/inputs/

tar zxvf  httpd-2.2.31.tar.gz

mkdir -p /usr/local/web/apache/

cd httpd-2.2.31

./configure  --prefix=/usr/local/web/apache   --enable-shared=max  --enable-module=rewirte  --enable-module=so

make

make install

chmod -R 555 /usr/local/web

cd /usr/local/web/apache/bin

echo ‘<html><body bgcolor=pink><h1>It works!</h1></body></html>‘>/usr/local/web/apache/htdocs/index.html

./apachectl start

#将httpd-2.2.31.tar.gz放在/var/cfengine/masterfile/inputs/中在命令行中执行cfrun -v |tee httpinstall.txt即可

时间: 2024-11-10 14:40:45

cfengine配置的相关文章

常见端口对应服务-有待优化更新

各种端口以及相应的服务 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(F

网络端口号大全

网络端口号大全 1 tcpmux TCP 端口服务多路复用5 rje 远程作业入口7 echo Echo 服务9 discard 用于连接测试的空服务11 systat 用于列举连接了的端口的系统状态13 daytime 给请求主机发送日期和时间17 qotd 给连接了的主机发送每日格言18 msp 消息发送协议19 chargen 字符生成服务:发送无止境的字符流20 ftp-data FTP 数据端口21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(FSP)使用22 ssh 安全

TCP/UDP常见端口参考

下面的表格中列举了包括在红帽企业 Linux 中的服务.守护进程.和程序所使用的最常见的通信端口.该列表还可以在 /etc/services 文件中找到.要查看由互联网号码分派局(IANA)制定的“著名的已注册动态端口”官方列表,请参考以下 URL: http://www.iana.org/assignments/port-numbers “层”是指服务或协议在交通层上使用 TCP 还是 UDP.若没有列举,这个服务或协议就两者都使用. 快速索引: 著名端口 端口号码 / 层 名称 注释 1 t

网络上的各种端口

1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(FSP)使用 22 ssh

常见TCP/UDP对应端口

本数据来源网络 著名端口 端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FT

端口号大全

著名端口 端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被

TCP/IP 端口号大全

TCP/IP 端口号大全 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(

linux常用端口

常用端口 端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被

端口表

TCP/IP 端口号大全 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat 用于列举连接了的端口的系统状态 13 daytime 给请求主机发送日期和时间 17 qotd 给连接了的主机发送每日格言 18 msp 消息发送协议 19 chargen 字符生成服务:发送无止境的字符流 20 ftp-data FTP 数据端口 21 ftp 文件传输协议(FTP)端口:有时被文件服务协议(