cfengine自动化配置系统原理与实践.docx
- 文档编号:10749636
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:16
- 大小:59.13KB
cfengine自动化配置系统原理与实践.docx
《cfengine自动化配置系统原理与实践.docx》由会员分享,可在线阅读,更多相关《cfengine自动化配置系统原理与实践.docx(16页珍藏版)》请在冰豆网上搜索。
cfengine自动化配置系统原理与实践
在日常系统管理工作中,管理上千台服务器,需要临时的改变其一个配置,例如删掉某个帐号停掉某个服务
一般我们只能不厌其烦的登到每一台机器上重复的完成这些动作,或者写脚本循环登录及其执行操作
如果有了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.管理员登录主服务器更新配置文件(svn),通过运行cfrun命令通知客户端进行更新.cfrun在cfrun.hosts文件中查找客户端的列表.
请注意,主服务器可以自行充当客户端。
此图中有两个客户端:
主服务器和远程客户端.
2.cfrun与每个客户端上的cfservd进行通信,cfservd然后运行cfagent.
3.cfagent连接主服务器,首先检查update.conf是否有新版本,如果有更新,将它传输到客户端.
4.cfagent先评估update.conf的内容,并获取策略文件(cfagent.conf和相关文件)的最新版本.
5.随后评估cfagent.conf以确定客户端是否处于所需状态。
如果有偏差,cfagent将执行已定义的操作来更正客户端配置.
注意:
没有绝对的服务端和客户端,在需要的情况下,客户端也可以作服务器端.
3.3.cfengine更新触发机制
3.3.1.服务器集中通知更新方式
1.服务器上运行cfrun,cfrun会根据cfrun.hosts中的主机列表来连接到某个客户机的cfservd程序
2.客户机上cfservd调用本机的cfagent程序
3.客户机上cfagent程序执行update.conf,连接到服务器的cfservd,下载策略文件cafagent.conf
4.客户机下载成功后执行最新版本的策略文件,不成功就执行旧版本的.
注意:
update.conf的内容要简单,一般来说就是下载cfagent.conf策略文件,基本上这个文件创建好了之后就不会更改了.
3.3.2.客户端自主激活方式
1.客户机自动执行cfagent程序执行update.conf,连接到服务器的cfservd,下载策略文件cafagent.conf
2.客户机下载成功后执行最新版本的策略文件,不成功就执行旧版本的.
注意:
客户端定期执行cfagent,可以通过添加到crontab或者cfexecd定期调用.这样的情况下,客户端就不需要运行cfservd程序.
3.4.cfengine服务器端设置
1.安装cfengine软件包,可以使用源码或者rpm包,请参考互联网.
2.cfengine服务端目录结构
/var/cfengine/
|--backup
|--bin
|--clientconf#客户端从此目录下载和更新配置文件
|--inputs#服务端自身的配置文件
|--lib
|--modules
|--outputs
|--ppkeys
|--rpc_in
|--rpc_out
|--share
`--state
3.设置cfservd.conf配置文件,文件内容如下
#cat/var/cfengine/clientconf/cfservd.conf(为了简化一点,服务端和客户端使用同样的cfservd.conf配置)
###############################################################################
#Whoandwhatweallowaccessto,andwhowetrust
#MasterServerconfandClientcfservdconf
###############################################################################
control:
domain=()
cfrunCommand=("/var/cfengine/bin/cfagent")
MaxConnections=(100)
MultipleConnections=(true)
IfElapsed=
(1)
DenyBadClocks=(false)
AllowConnectionsFrom=(172.0.0.0/8)
TrustKeysFrom=(172.0.0.0/8)#自动交换key,不需要拷贝key
LogAllConnections=(true)
AllowUsers=(rootadmin)
HostnameKeys=(off)
ChecksumDatabase=(/var/cfengine/cfdb)
grant:
$(cfrunCommand)172.0.0.0/8#允许ip在172.0.0.0/8范围内的主机,可以cfrun方式远程执行cfagent
/var/cfengine172.0.0.0/8#允许ip在172.0.0.0/8范围内的主机,通过cfagent访问拷贝此目录下的文件
注意:
此cfservd.conf配置文件比较宽松,可以根据需要进行权限的限制
4.设置update.conf配置文件(cfagent运行时,第一解析的配置文件)
#cat/var/cfengine/clientconf/update.conf
###############################################################################
#update.conf-ensurethattheinputsandbinariesin/var/cfengineare
#syncedtothoseontheserver.
###############################################################################
control:
actionsequence=(copy)#sequenceofactionstoperform
domain=()#ourdomain
DefaultCopyType=(checksum)#Copybasedonchecksum,notmtime
HostnameKeys=(off)
cfserver=(172.16.20.100)#hostrunningcfservd
workdir=(/var/cfengine)#theworkdir
clientconf=(/var/cfengine/clientconf)
input_mode=(700)#modeforinputfiles
bin_mode=(755)#modeforbinaries
fowner=(root)#fileowner
ogroup=(root)#filegroup
any:
:
#theclasstomatch
SplayTime=
(1)#maxnumberofminutesover
#whichcfenginewillshare
#itsloadontheserver
############################################################################
copy:
$(clientconf)/cfagent.confdest=$(workdir)/inputs/cfagent.conf
owner=$(fowner)group=$(ogroup)
mode=700
server=$(cfserver)trustkey=trueencrypt=true
注意:
要尽可能保持update.conf文件简单,只让它更新必要的cfagent.conf配置文件,其他的具体功能操作都在cfagent.conf文件中定义.
5.设置cfagent.conf配置文件(cfengine的核心配置文件,所有的功能操作都在此配置文件中定义)
#cat/var/cfengine/clientconf/cfagent.conf
###############################################################################
#cfagent.confforclient
###############################################################################
#group区块定义群组(classes),可以在后续的配置中指定特定的组群执行特定的操作,这样就可以将不同类的配置文件都写在同一个cfagent.conf文件中.
groups:
Redhat_AS3=(redhat_as_3)
Redhat_AS4=(redhat_as_4)
Redhat_2u1=(redhat_as_2_1)
Redhat_7u3=(redhat_7_3)
Redhat_AS5=(redhat_s_5)
control:
any:
:
##BasicCfengineconfigurations
access=(root)
editfilesize=(0)#0turnsofftheeditfilesizelimit.
netmask=(255.255.255.0)#Setsthenetmaskifyouusenetconfig.
timezone=(CST)
##HowandWheredoweoutputstuff?
sysadmin=(admin@)
smtpserver=()
EmailMaxLines=(n)#Nomaximumlines
Syslog=(on)
##Howmanycfenginescanrun,whatdowedowhentheserver'sbusy
SplayTime=(45)#Runeverythingimmediately
MaxCfengines=(20)
Repository=(/var/cfengine/backup)
#如果使用cfexecd定时运行cfagent,它会读取下面schedule中定义时间来运行cfagent
schedule=(Monday.Hr10Tuesday.Hr10Wednesday.Hr10Thursday.Hr10Friday.Hr10Monday.Hr15)
##Setsomedefaults
DefaultCopyType=(checksum)#Copybasedonchecksum,notmtime
DeleteNonUserFiles=(false)#Donotdeleteunownedfiles
Exclamation=(on)#Informusofproblems.
ExpireAfter
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cfengine 自动化 配置 系统 原理 实践