cfengine自动化配置系统原理与实践.docx
《cfengine自动化配置系统原理与实践.docx》由会员分享,可在线阅读,更多相关《cfengine自动化配置系统原理与实践.docx(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在日常系统管理工作中,管理上千台服务器,需要临时的改变其一个配置,例如删掉某个帐号停掉某个服务 一般我们只能不厌其烦的登到每一台机器上重复的完成这些动作,或者写脚本循环登录及其执行操作 如果有了cfengine,一个命令就可以搞定了.是不是很看效率,请看如下实践之体会.以下的所提到的cfengine是2.2版本的.1. cfengine 概述cfengine是一个功能强大的自动化系统管理工具.引用其官网的说法cfengine是一种 UNIX 管理工具,其目的是使简单的管理的任务自动化,使困难的任务变得较容易.它的目标是使系统从任何状态收敛到一种理想状态.使用cfengine,它可以保证你的系统
2、总是维持你所希望的那个状态. 如果说有黑客进来了修改了某个重要的配置文件的内容或者权限,也会被cfengine自动修复!1.1. cfengine 功能概述 检查和配置网络接口 编辑系统和用户的文本文件 维护符号链接 检查和设置文件的权限 删除垃圾文件 检查重要文件和文件系统的存在 控制用户脚本和shell命令的执行 基于类的判定结构 进程管理其他细节功能,大家可以访问它的官方网站,里面的文档十分丰富 http:/www.cfengine.org/1.2. 使用cfengine的益处当你切换使用cfengine来管理系统配置时,你可以得到以下好处: 可以保证所有被管理服务器使用统一标准化的系统
3、配置 可以针对不同的系统进行配置的变更(如linux,freebsd.) 可以记录系统变更,如果需要还可以在执行一次,将系统保持在正确的状态1.3. cfengine 组件说明Cfengine是一个用于设置和维护计算机系统的工具,包含了以下几个组件:cfagent 自动配置代理,其配置文件为update.conf 和 cfagent.confcfservd文件服务和远程激活服务,其配置文件为cfservd.confcfexecd 计划执行 cfagent 命令cfenvd 异常检测服务cfrun 远程通过cfservd调用cfagent的方法,其配置文件为cfrun.hostscfshow 检
4、查有帮助的数据库的内容的方法(辅助)cfenvgraph 异常检测服务cfenvd的附属工具(辅助)cfkey 密匙生成工具(每台服务器运行一次)。1.4. cfengine 配置文件每个系统必须要有最少的配置文件.默认情况下,你需要将配置文件放到/var/cfengine/inputs 目录中.可以集中化管理配置文件,通过拉的方式更新到所有客户端系统update.conf此配置文件要保持简单,cfengine每次更新,它总是被首先解析和执行,此配置的主要任务就是从服务端拷贝一组配置文件. 如果其他配置文件有误,此配置文件也能够继续更新配置文件,在下次运行的时,就可以运行成功. 对大部分网站来
5、说,这个文件在cfengine系统初初始运行后,不需要去变变更的.cfagent.conf此配置文件是cfengine的核心文件,它包含了所有功能操作配置.可以使用文件导入功能(import功能),使配置文件易读,参考上图cfservd.conf此配置文件是 cfservd 守护进程的配置文件.文件定义了那些主机可以远程执行cfagent和那些主机可以传输特定的文件.cfengine使用到配置文件,我们需要集中化版本控制(比如Subversion).这样就可以记录所有变更,以便在需要时,可以会滚到某个特定的版本配置.2. 使用Classes(与group相同)标识系统cfengine中最重要的
6、概念就是Classes. 每种系统都属于一个或者多个 classes. cfagent每次运行的时,会根据很多各种不同信息来定义classes.可以在特定的classes执行特定的操作. 因此,任何操作都可以在一台主机上执行,也可以在运行特定操作系统的主机上运行,也可以在所有的主机上运行. Cfengine 使用内置的和用户定义的classes.2.1. 预定义Classes的分类主机本生根据其架构决定很多classes 比如主机名称,主机ip,操作系统等. 很多classes 根据当前的日期和时间定义的.为了确定在给定系统上定义了那些标准classes,可以运行如下命令: rootlinux
7、# /var/cfengine/bin/cfagent -p -v | grep Defined Defined Classes = ( 172_22_5 172_22_5_90 172_22_5_91 64_bit Day17 Hr11 Hr11_Q1 March Min10_15 Min11 Q1 Redhat_AS5 Wednesday Yr2010 addr_ alidc_net alidc_net_hzidc_com any cfengine_01 cfengine_01_hst_xyi_cn_alidc_net cfengine_01_hst_xyi_cn_alidc_net_hz
8、idc_com cfengine_2 cfengine_2_2 cfengine_2_2_3 cfengine_server cn_alidc_net cn_alidc_net_hzidc_com com compiled_on_linux_gnu fe80_216_3eff_fe16_55b hst_xyi_cn_alidc_net hst_xyi_cn_alidc_net_hzidc_comhzidc_com ipv4_172 ipv4_172_22 ipv4_172_22_5 ipv4_172_22_5_90 ipv4_172_22_5_91 linux linux_2_6_18_131
9、_el5_customxen linux_x86_64 linux_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_2009 lsb_compliant net net_hzidc_com net_iface_bond0 net_iface_lo redhat redhat_s redhat_s_5 redhat_s_5_3 redhatenterpriseserver redhatenterpriseserver_5 redhatenterp
10、riseserver_5_3 redhatenterpriseserver_tikanga x86_64 xyi_cn_alidc_net xyi_cn_alidc_net_hzidc_com )正如你所看到的,这个系统中包含了很多预定义classes,他们属于几个分类: Operating System: redhat redhat_s redhat_s_5 redhat_s_5_3 redhatenterpriseserver redhatenterpriseserver_5 redhatenterpriseserver_5_3 Kernel: linux linux_2_6_18_131
11、_el5_customxen linux_x86_64 linux_x86_64_2_6_18_131_el5_customxen Architecture: 64_bit linux_x86_64 x86_64 Hostname: cfengine_01 cfengine_01_hst_xyi_cn_alidc_net cfengine_01_hst_xyi_cn_alidc_net_hzidc_com IP Address: 172_22_5 172_22_5_90 172_22_5_91 ipv4_172 ipv4_172_22 ipv4_172_22_5 ipv4_172_22_5_9
12、0 ipv4_172_22_5_91 Date/Time: Day17 Hr11 Hr11_Q1 March Min10_15 Min11 Q1每个系统都属于 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
13、) ) web_app1 = ( IPRange(172.16.6.1-250) IPRange(172.16.7.1-250) IPRange(172.16.14.1-250) ) ntp_server= ( nagios1 nagios2 nagios3 monitor_xy7 monitor_xy8 monitor_xy9 ) # 通过配置文件 判断是否属于某一类型的主机 dns = ( /usr/bin/test -f /etc/named.conf ) web_normal = ( /usr/bin/test -f /etc/httpd/conf/httpd.conf ) # 通过c
14、fengine内部命令来判断 first_ten_server = ( RegCmp(webserver0-9i,$host) ) # all server all_server= ( dns web_app1 ) copy: any: # 根据拷贝结果,定义新的classes $(clientconf)/syslog.confdest=$(etcdir)/syslog.conf owner=$(fowner) group=$(fgroup) mode=644 server=$(cfserver) trustkey=true define=new_syslog shellcommands: n
15、ew_syslog: /etc/init.d/syslog restart /dev/null 2&1以上配置只是cfagent.conf 中的一段而已,从上面可以看出: 可以根据执行命令程序的返回结果来定义class,如果命令返回结果为0,此系统属于此定义的class. class 的定义可以是包含已有或者已定义的class 可以根据执行操作的结果来定义新的classes.比如上面的配置例子,当syslog.conf配置改变了,当拷贝完成时,会定义一个new_syslog的class. 在shellcommands的操作中,会根据new_syslog class 来重启syslog服务.3.
16、 cfengine系统的搭建与使用3.1. cfengine 配置文件管理方式一般来说,cfengine 的配置文件,都是集中化方式管理,配置文件都通过版本控制软件进行修改和更新.系统管理更新配置文件后,提交到svn后,cfengine server 更新配置文件,推送到客户端.3.2. cfengine 运行方式1. 管理员登录主服务器更新配置文件(svn),通过运行cfrun命令通知客户端进行更新.cfrun在cfrun.hosts 文件中查找客户端的列表.请注意,主服务器可以自行充当客户端。此图中有两个客户端:主服务器和远程客户端.2. cfrun与每个客户端上的 cfservd 进行通
17、信,cfservd 然后运行cfagent.3. cfagent连接主服务器,首先检查update.conf是否有新版本,如果有更新,将它传输到客户端.4. cfagent 先评估 update.conf 的内容,并获取策略文件(cfagent.conf 和相关文件)的最新版本.5. 随后评估 cfagent.conf以确定客户端是否处于所需状态。如果有偏差,cfagent 将执行已定义的操作来更正客户端配置.注意:没有绝对的服务端和客户端,在需要的情况下,客户端也可以作服务器端.3.3. cfengine 更新触发机制3.3.1. 服务器集中通知更新方式1. 服务器上运行cfrun,cfru
18、n会根据cfrun.hosts中的主机列表来连接到某个客户机的cfservd程序2. 客户机上cfservd调用本机的cfagent程序3. 客户机上cfagent程序执行update.conf,连接到服务器的cfservd,下载策略文件cafagent.conf4. 客户机下载成功后执行最新版本的策略文件,不成功就执行旧版本的.注意:update.conf的内容要简单,一般来说就是下载cfagent.conf策略文件,基本上这个文件创建好了之后就不会更改了.3.3.2. 客户端自主激活方式1. 客户机自动执行cfagent程序执行update.conf,连接到服务器的cfservd,下载策略
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- cfengine 自动化 配置 系统 原理 实践
限制150内