cfengine自动化配置系统原理与实践docx.docx
- 文档编号:39300
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:16
- 大小:57.18KB
cfengine自动化配置系统原理与实践docx.docx
《cfengine自动化配置系统原理与实践docx.docx》由会员分享,可在线阅读,更多相关《cfengine自动化配置系统原理与实践docx.docx(16页珍藏版)》请在冰豆网上搜索。
cfengine自动化配置系统原理与实践docx
在日常系统管理工作中,管理上千台服务器,需要临时的改变其一个配置,例如删掉某个帐号停掉某个服务
一般我们只能不厌其烦的登到每一台机器上重复的完成这些动作,或者写脚本循环登录及其执行操作
如果有了cfengine,一个命令就可以搞定了.是不是很看效率,请看如下实践之体会.以下的所提到的cfengine是2.2版本的.
1.cfengine概述
cfengine是一个功能强大的自动化系统管理工具.引用其官网的说法"cfengine是一种UNIX管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易.
它的目标是使系统从任何状态收敛到一种理想状态.使用cfengine,它可以保证你的系统总是维持你所希望的那个状态.
如果说有黑客进来了修改了某个重要的配置文件的内容或者权限,也会被cfengine自动修复!
1.1.cfengine功能概述
∙检查和配置网络接口
∙编辑系统和用户的文本文件
∙维护符号链接
∙检查和设置文件的权限
∙删除垃圾文件
∙检查重要文件和文件系统的存在
∙控制用户脚本和shell命令的执行
∙基于类的判定结构
∙进程管理其他细节功能,大家可以访问它的官方网站,里面的文档十分丰富[http:
//www.cfengine.org/]
1.2.使用cfengine的益处
当你切换使用cfengine来管理系统配置时,你可以得到以下好处:
∙可以保证所有被管理服务器使用统一标准化的系统配置
∙可以针对不同的系统进行配置的变更(如linux,freebsd....)
∙可以记录系统变更,如果需要还可以在执行一次,将系统保持在正确的状态
1.3.cfengine组件说明
Cfengine是一个用于设置和维护计算机系统的工具,包含了以下几个组件:
cfagent
自动配置代理,其配置文件为update.conf和cfagent.conf
cfservd
文件服务和远程激活服务,其配置文件为cfservd.conf
cfexecd
计划执行cfagent命令
cfenvd
异常检测服务
cfrun
远程通过cfservd调用cfagent的方法,其配置文件为cfrun.hosts
cfshow
检查有帮助的数据库的内容的方法(辅助)
cfenvgraph
异常检测服务cfenvd的附属工具(辅助)·cfkey密匙生成工具(每台服务器运行一次)。
1.4.cfengine配置文件
每个系统必须要有最少的配置文件.默认情况下,你需要将配置文件放到/var/cfengine/inputs目录中.可以集中化管理配置文件,通过拉的方式更新到所有客户端系统
update.conf
此配置文件要保持简单,cfengine每次更新,它总是被首先解析和执行,此配置的主要任务就是从服务端拷贝一组配置文件.
如果其他配置文件有误,此配置文件也能够继续更新配置文件,在下次运行的时,就可以运行成功.
对大部分网站来说,这个文件在cfengine系统初初始运行后,不需要去变变更的.
cfagent.conf
此配置文件是cfengine的核心文件,它包含了所有功能操作配置.可以使用文件导入功能(import功能),使配置文件易读,参考上图
cfservd.conf
此配置文件是cfservd守护进程的配置文件.文件定义了那些主机可以远程执行cfagent和那些主机可以传输特定的文件.
cfengine使用到配置文件,我们需要集中化版本控制(比如Subversion).这样就可以记录所有变更,以便在需要时,可以会滚到某个特定的版本配置.
2.使用Classes(与group相同)标识系统
cfengine中最重要的概念就是Classes.每种系统都属于一个或者多个classes.
cfagent每次运行的时,会根据很多各种不同信息来定义classes.可以在特定的classes执行特定的操作.
因此,任何操作都可以在一台主机上执行,也可以在运行特定操作系统的主机上运行,也可以在所有的主机上运行.
Cfengine使用内置的和用户定义的classes.
2.1.预定义Classes的分类
主机本生根据其架构决定很多classes比如主机名称,主机ip,操作系统等.
很多classes根据当前的日期和时间定义的.
为了确定在给定系统上定义了那些标准classes,可以运行如下命令:
[root@linux]#/var/cfengine/bin/cfagent-p-v|grepDefined
DefinedClasses=(172_22_5172_22_5_90172_22_5_9164_bitDay17Hr11Hr11_Q1MarchMin10_15Min11Q1Redhat_AS5WednesdayYr2010addr_
alidc_netalidc_net_hzidc_comanycfengine_01cfengine_01_hst_xyi_cn_alidc_netcfengine_01_hst_xyi_cn_alidc_net_hzidc_comcfengine_2
cfengine_2_2cfengine_2_2_3cfengine_servercn_alidc_netcn_alidc_net_hzidc_comcomcompiled_on_linux_gnufe80__216_3eff_fe16_55b
hst_xyi_cn_alidc_nethst_xyi_cn_alidc_net_hzidc_comhzidc_comipv4_172ipv4_172_22ipv4_172_22_5ipv4_172_22_5_90ipv4_172_22_5_91linux
linux_2_6_18_131_el5_customxenlinux_x86_64linux_x86_64_2_6_18_131_el5_customxen
linux_x86_64_2_6_18_131_el5_customxen__1_SMP_Tue_Sep_15_15_46_11_CST_2009lsb_compliantnetnet_hzidc_com
net_iface_bond0net_iface_loredhatredhat_sredhat_s_5redhat_s_5_3redhatenterpriseserverredhatenterpriseserver_5
redhatenterpriseserver_5_3redhatenterpriseserver_tikangax86_64xyi_cn_alidc_netxyi_cn_alidc_net_hzidc_com)
正如你所看到的,这个系统中包含了很多预定义classes,他们属于几个分类:
∙OperatingSystem:
redhatredhat_sredhat_s_5redhat_s_5_3redhatenterpriseserverredhatenterpriseserver_5redhatenterpriseserver_5_3
∙Kernel:
linuxlinux_2_6_18_131_el5_customxenlinux_x86_64linux_x86_64_2_6_18_131_el5_customxen
∙Architecture:
64_bitlinux_x86_64x86_64
∙Hostname:
cfengine_01cfengine_01_hst_xyi_cn_alidc_netcfengine_01_hst_xyi_cn_alidc_net_hzidc_com
∙IPAddress:
172_22_5172_22_5_90172_22_5_91ipv4_172ipv4_172_22ipv4_172_22_5ipv4_172_22_5_90ipv4_172_22_5_91
∙Date/Time:
Day17Hr11Hr11_Q1MarchMin10_15Min11Q1
每个系统都属于any这个class,当你需要对未定义或者不能使用classes标识的系统进行操作时候,可以使用any这个class.
2.2.自定义Classes
自定义classes配置都是在cfagent.conf中的groups区域中,请看如下例子:
groups:
web_app1=(IPRange(172.16.2.1-250)IPRange(172.16.3.1-250)IPRange(172.16.4.1-250))
web_app1=(IPRange(172.16.6.1-250)IPRange(172.16.7.1-250)IPRange(172.16.14.1-250))
ntp_server=(nagios1nagios2nagios3monitor_xy7monitor_xy8monitor_xy9)
#通过配置文件判断是否属于某一类型的主机
dns=('/usr/bin/test-f/etc/named.conf')
web_normal=('/usr/bin/test-f/etc/httpd/conf/httpd.conf')
#通过cfengine内部命令来判断
first_ten_server=(RegCmp("webserver[0-9]i","${host}"))
#allserver
all_server=(dnsweb_app1)
copy:
any:
:
#根据拷贝结果,定义新的classes
$(clientconf)/syslog.confdest=$(etcdir)/syslog.conf
owner=$(fowner)group=$(fgroup)
mode=644
server=$(cfserver)trustkey=true
define=new_syslog
shellcommands:
new_syslog:
:
"/etc/init.d/syslogrestart>/dev/null2>&1"
以上配置只是cfagent.conf中的一段而已,从上面可以看出:
∙可以根据执行命令程序的返回结果来定义class,如果命令返回结果为0,此系统属于此定义的class.
∙class的定义可以是包含已有或者已定义的class
∙可以根据执行操作的结果来定义新的classes.
比如上面的配置例子,当syslog.conf配置改变了,当拷贝完成时,会定义一个new_syslog的class.
在shellcommands的操作中,会根据new_syslogclass来重启syslog服务.
3.cfengine系统的搭建与使用
3.1.cfengine配置文件管理方式
一般来说,cfengine的配置文件,都是集中化方式管理,配置文件都通过版本控制软件进行修改和更新.
系统管理更新配置文件后,提交到svn后,cfengineserver更新配置文件,推送到客户端.
3.2.cfengine运行方式
1.管理员登录主服务器更新配置文件(sv
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cfengine 自动化 配置 系统 原理 实践 docx