您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > cfengine自动化配置系统原理与实践
在日常系统管理工作中,管理上千台服务器,需要临时的改变其一个配置,例如删掉某个帐号停掉某个服务一般我们只能不厌其烦的登到每一台机器上重复的完成这些动作,或者写脚本循环登录及其执行操作如果有了cfengine,一个命令就可以搞定了.是不是很看效率,请看如下实践之体会.以下的所提到的cfengine是2.2版本的.1.cfengine概述cfengine是一个功能强大的自动化系统管理工具.引用其官网的说法cfengine是一种UNIX管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易.它的目标是使系统从任何状态收敛到一种理想状态.使用cfengine,它可以保证你的系统总是维持你所希望的那个状态.如果说有黑客进来了修改了某个重要的配置文件的内容或者权限,也会被cfengine自动修复!1.1.cfengine功能概述检查和配置网络接口编辑系统和用户的文本文件维护符号链接检查和设置文件的权限删除垃圾文件检查重要文件和文件系统的存在控制用户脚本和shell命令的执行基于类的判定结构进程管理其他细节功能,大家可以访问它的官方网站,里面的文档十分丰富[]1.2.使用cfengine的益处当你切换使用cfengine来管理系统配置时,你可以得到以下好处:可以保证所有被管理服务器使用统一标准化的系统配置可以针对不同的系统进行配置的变更(如linux,freebsd....)可以记录系统变更,如果需要还可以在执行一次,将系统保持在正确的状态1.3.cfengine组件说明Cfengine是一个用于设置和维护计算机系统的工具,包含了以下几个组件:cfagent自动配置代理,其配置文件为update.conf和cfagent.confcfservd文件服务和远程激活服务,其配置文件为cfservd.confcfexecd计划执行cfagent命令cfenvd异常检测服务cfrun远程通过cfservd调用cfagent的方法,其配置文件为cfrun.hostscfshow检查有帮助的数据库的内容的方法(辅助)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|grepDefinedDefinedClasses=(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_2cfengine_2_2cfengine_2_2_3cfengine_servercn_alidc_netcn_alidc_net_hzidc_comcomcompiled_on_linux_gnufe80__216_3eff_fe16_55bhst_xyi_cn_alidc_nethst_xyi_cn_alidc_net_hzidc_comhzidc_comipv4_172ipv4_172_22ipv4_172_22_5ipv4_172_22_5_90ipv4_172_22_5_91linuxlinux_2_6_18_131_el5_customxenlinux_x86_64linux_x86_64_2_6_18_131_el5_customxenlinux_x86_64_2_6_18_131_el5_customxen__1_SMP_Tue_Sep_15_15_46_11_CST_2009lsb_compliantnetnet_hzidc_comnet_iface_bond0net_iface_loredhatredhat_sredhat_s_5redhat_s_5_3redhatenterpriseserverredhatenterpriseserver_5redhatenterpriseserver_5_3redhatenterpriseserver_tikangax86_64xyi_cn_alidc_netxyi_cn_alidc_net_hzidc_com)正如你所看到的,这个系统中包含了很多预定义classes,他们属于几个分类:OperatingSystem:redhatredhat_sredhat_s_5redhat_s_5_3redhatenterpriseserverredhatenterpriseserver_5redhatenterpriseserver_5_3Kernel:linuxlinux_2_6_18_131_el5_customxenlinux_x86_64linux_x86_64_2_6_18_131_el5_customxenArchitecture:64_bitlinux_x86_64x86_64Hostname:cfengine_01cfengine_01_hst_xyi_cn_alidc_netcfengine_01_hst_xyi_cn_alidc_net_hzidc_comIPAddress:172_22_5172_22_5_90172_22_5_91ipv4_172ipv4_172_22ipv4_172_22_5ipv4_172_22_5_90ipv4_172_22_5_91Date/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}))#allserverall_server=(dnsweb_app1)copy:any::#根据拷贝结果,定义新的classes$(clientconf)/syslog.confdest=$(etcdir)/syslog.confowner=$(fowner)group=$(fgroup)mode=644server=$(cfserver)trustkey=truedefine=new_syslogshellcommands: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.conf4.客户机下载
本文标题:cfengine自动化配置系统原理与实践
链接地址:https://www.777doc.com/doc-8510 .html