cfengine自动化配置系统原理与实践_第1页
cfengine自动化配置系统原理与实践_第2页
cfengine自动化配置系统原理与实践_第3页
cfengine自动化配置系统原理与实践_第4页
cfengine自动化配置系统原理与实践_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.:.;在日常系统管理任务中,管理上千台效力器,需求暂时的改动其一个配置,例如删掉某个帐号停掉某个效力 普通我们只能不厌其烦的登到每一台机器上反复的完成这些动作,或者写脚本循环登录及其执行操作 假设有了cfengine,一个命令就可以搞定了.是不是很看效率,请看如下实际之领会.以下的所提到的cfengine是2.2版本的.1. cfengine 概述cfengine是一个功能强大的自动化系统管理工具.援用其官网的说法cfengine是一种 UNIX 管理工具,其目的是使简单的管理的义务自动化,使困难的义务变得较容易.它的目的是使系统从任何形状收敛到一种理想形状.运用cfengine,它可以保证

2、他的系统总是维持他所希望的那个形状. 假设说有黑客进来了修正了某个重要的配置文件的内容或者权限,也会被cfengine自动修复!1.1. cfengine 功能概述检查和配置网络接口编辑系统和用户的文本文件维护符号链接检查和设置文件的权限删除渣滓文件检查重要文件和文件系统的存在控制用户脚本和shell命令的执行基于类的断定构造进程管理其他细节功能,大家可以访问它的官方网站,里面的文档非常丰富 HYPERLINK / /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每次更新,它总是被首先解析和执行,此配置的主要义务就是从效力端拷贝一组配置文件. 假设其他配置文件有误,此配置文件也可以继续更新配置文件,在下次运转的时,就可以运转胜利. 对大部分网站来说,这个文件在cfengine系统初

5、初始运转后,不需求去变变卦的.cfagent.conf此配置文件是cfengine的中心文件,它包含了一切功能操作配置.可以运用文件导入功能(import功能),使配置文件易读,参考上图cfservd.conf此配置文件是 cfservd 守护进程的配置文件.文件定义了那些主机可以远程执行cfagent和那些主机可以传输特定的文件.cfengine运用到配置文件,我们需求集中化版本控制(比如Subversion).这样就可以记录一切变卦,以便在需求时,可以会滚到某个特定的版本配置.2. 运用Classes(与group一样)标识系统cfengine中最重要的概念就是Classes. 每种系统都

6、属于一个或者多个 classes. cfagent每次运转的时,会根据很多各种不同信息来定义classes.可以在特定的classes执行特定的操作. 因此,任何操作都可以在一台主机上执行,也可以在运转特定操作系统的主机上运转,也可以在一切的主机上运转. Cfengine 运用内置的和用户定义的classes.2.1. 预定义Classes的分类主机本生根据其架构决议很多classes 比如主机称号,主机ip,操作系统等. 很多classes 根据当前的日期和时间定义的.为了确定在给定系统上定义了那些规范classes,可以运转如下命令: rootlinux# /var/cfengine/bi

7、n/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 Yr2021 addr_ alidc_net alidc_net_hzidc_com any cfengine_01 cfengine_01_hst_xyi_cn_alidc_net cfengine_01_hst_xyi_cn_alidc_net_hzidc_com cfengine_2

8、 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_el5_customxen lin

9、ux_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_2021 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 redhatenterpriseserver_5_3 red

10、hatenterpriseserver_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_3Kernel: linux linux_2_6_18_131_el5_customxen linux

11、_x86_64 linux_x86_64_2_6_18_131_el5_customxenArchitecture: 64_bit linux_x86_64 x86_64Hostname: cfengine_01 cfengine_01_hst_xyi_cn_alidc_net cfengine_01_hst_xyi_cn_alidc_net_hzidc_comIP 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_90 ipv4_172_22_5_91Date/

12、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(-250) IPRange(-250) IPRange(-250) ) web_app1 = ( IPRange(-250) IPRange(-250) IPRange(-

13、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 ) # 经过cfengine内部命令来判别 first_ten_server = ( RegCmp(webserver0-9i,$host) ) # all server all_se

14、rver= ( 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: new_syslog: /etc/init.d/syslog restart /dev/null 2&1以上配置只是cfagent.conf 中的一段而已,从上面可以看出:

15、可以根据执行命令程序的前往结果来定义class,假设命令前往结果为0,此系统属于此定义的class.class 的定义可以是包含已有或者已定义的class可以根据执行操作的结果来定义新的classes.比如上面的配置例子,当syslog.conf配置改动了,当拷贝完成时,会定义一个new_syslog的class. 在shellcommands的操作中,会根据new_syslog class 来重启syslog效力.3. cfengine系统的搭建与运用3.1. cfengine 配置文件管理方式普通来说,cfengine 的配置文件,都是集中化方式管理,配置文件都经过版本控制软件进展修正和更

16、新.系统管理更新配置文件后,提交到svn后,cfengine server 更新配置文件,推送到客户端.3.2. cfengine 运转方式管理员登录主效力器更新配置文件(svn),经过运转cfrun命令通知客户端进展更新.cfrun在cfrun.hosts 文件中查找客户端的列表.请留意,主效力器可以自行充任客户端。此图中有两个客户端:主效力器和远程客户端.cfrun与每个客户端上的 cfservd 进展通讯,cfservd 然后运转cfagent.cfagent衔接主效力器,首先检查update.conf能否有新版本,假设有更新,将它传输到客户端.cfagent 先评价 update.co

17、nf 的内容,并获取战略文件cfagent.conf 和相关文件的最新版本.随后评价 cfagent.conf以确定客户端能否处于所需形状。假设有偏向,cfagent 将执行已定义的操作来更正客户端配置.留意:没有绝对的效力端和客户端,在需求的情况下,客户端也可以作效力器端.3.3. cfengine 更新触发机制3.3.1. 效力器集中通知更新方式效力器上运转cfrun,cfrun会根据cfrun.hosts中的主机列表来衔接到某个客户机的cfservd程序客户机上cfservd调用本机的cfagent程序客户机上cfagent程序执行update.conf,衔接到效力器的cfservd,下

18、载战略文件cafagent.conf客户机下载胜利后执行最新版本的战略文件,不胜利就执行旧版本的.留意:update.conf的内容要简单,普通来说就是下载cfagent.conf战略文件,根本上这个文件创建好了之后就不会更改了.3.3.2. 客户端自主激活方式客户机自动执行cfagent程序执行update.conf,衔接到效力器的cfservd,下载战略文件cafagent.conf客户机下载胜利后执行最新版本的战略文件,不胜利就执行旧版本的.留意:客户端定期执行cfagent,可以经过添加到crontab 或者 cfexecd定期调用.这样的情况下,客户端就不需求运转cfservd程序.

19、3.4. cfengine 效力器端设置安装cfengine软件包,可以运用源码或者rpm包,请参考互联网.cfengine效力端目录构造 /var/cfengine/ |- backup |- bin |- clientconf#客户端从此目录下载和更新配置文件 |- inputs#效力端本身的配置文件 |- lib |- modules |- outputs |- ppkeys |- rpc_in |- rpc_out |- share - state设置cfservd.conf配置文件,文件内容如下 #cat /var/cfengine/clientconf/cfservd.conf (

20、为了简化一点,效力端和客户端运用同样的cfservd.conf配置) # # Who and what we allow access to, and who we trust # Master Server conf and Client cfservd conf # control: domain = ( hzidc ) cfrunCommand = ( /var/cfengine/bin/cfagent ) MaxConnections = ( 100 ) MultipleConnections = ( true ) IfElapsed = ( 1 ) DenyBadClocks = (

21、 false ) AllowConnectionsFrom = ( /8 ) TrustKeysFrom = ( /8 )#自动交换key,不需求拷贝key LogAllConnections = ( true ) AllowUsers = ( root admin ) HostnameKeys = ( off ) ChecksumDatabase = ( /var/cfengine/cfdb ) grant: $(cfrunCommand)/8#允许ip在/8范围内的主机,可以cfrun方式远程执行cfagent /var/cfengine/8#允许ip在/8范围内的主机,经过cfagent

22、访问拷贝此目录下的文件留意:此cfservd.conf配置文件比较宽松,可以根据需求进展权限的限制设置update.conf配置文件(cfagent运转时,第一解析的配置文件) #cat /var/cfengine/clientconf/update.conf # # update.conf - ensure that the inputs and binaries in /var/cfengine are # synced to those on the server. # control: actionsequence = ( copy ) # sequence of actions to

23、 perform domain = ( hzidc ) # our domain DefaultCopyType = ( checksum ) # Copy based on checksum, not mtime HostnameKeys = ( off ) cfserver = ( 00 ) # host running cfservd workdir = ( /var/cfengine ) # the workdir clientconf = ( /var/cfengine/clientconf ) input_mode = ( 700 ) # mode for input files

24、bin_mode = ( 755 ) # mode for binaries fowner = ( root ) # file owner ogroup = ( root ) # file group any: # the class to match SplayTime = ( 1 ) # max number of minutes over # which cfengine will share # its load on the server # copy: $(clientconf)/cfagent.conf dest=$(workdir)/inputs/cfagent.conf ow

25、ner=$(fowner) group=$(ogroup) mode=700 server=$(cfserver) trustkey=true encrypt=true留意:要尽能够坚持update.conf文件简单,只让它更新必要的cfagent.conf配置文件,其他的详细功能操作都在cfagent.conf文件中定义.设置cfagent.conf配置文件(cfengine的中心配置文件,一切的功能操作都在此配置文件中定义) #cat /var/cfengine/clientconf/cfagent.conf # # cfagent.conf for client # # group区块定

26、义群组(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: # Basic Cfengine configurations access = ( root ) editfiles

27、ize = ( 0 ) # 0 turns off the editfilesize limit. netmask = ( ) # Sets the netmask if you use netconfig. timezone = ( CST ) # How and Where do we output stuff? sysadmin = ( adminadmin ) smtpserver = ( smtp.admin ) EmailMaxLines = ( n ) # No maximum lines Syslog = ( on ) # How many cfengines can run,

28、 what do we do when the servers busy SplayTime = ( 45 ) # Run everything immediately MaxCfengines = ( 20 ) Repository = ( /var/cfengine/backup ) # 假设运用cfexecd定时运转cfagent,它会读取 下面 schedule 中定义时间来运转cfagent schedule = ( Monday.Hr10 Tuesday.Hr10 Wednesday.Hr10 Thursday.Hr10 Friday.Hr10 Monday.Hr15 ) # Se

29、t some defaults DefaultCopyType = ( checksum ) # Copy based on checksum, not mtime DeleteNonUserFiles = ( false ) # Do not delete unowned files Exclamation = ( on ) # Inform us of problems. ExpireAfter = ( 30 ) # Dont let cfengine run longer then 60 minutes. HostnameKeys = ( off ) # Store keys based

30、 on hostname, not IP Inform = ( on ) # Show diagnostic output ShowActions = ( off ) # Do not show verbose diagnostic output domain = ( hzidc ) # Obtain our domain name automatically # 可以自定义一些变量,方便后面援用,援用方式 $(cfserver) cfserver = ( 00 ) clientconf = ( /var/cfengine/clientconf ) workdir = ( /var/cfeng

31、ine ) etcdir = ( /etc ) optdir = ( /opt ) bin_mode = ( 755 ) # mode for binaries fowner = ( root ) # file owner fgroup = ( root ) # file group actionsequence = ( copy editfiles shellcommands processes ) # # copy 区块: 从效力器拷贝配置文件,也可以递归拷贝目录 copy: any: $(clientconf)/cfservd.conf dest=$(workdir)/inputs/cf

32、servd.conf owner=$(fowner) group=$(fgroup) mode=700 server=$(cfserver) trustkey=true $(clientconf)/update.conf dest=$(workdir)/inputs/update.conf owner=$(fowner) group=$(fgroup) mode=700 server=$(cfserver) trustkey=true # 援用前面自定义个group(classes),属于Redhat_AS4这个组的拷贝以下配置文件 Redhat_AS4: $(clientconf)/sysc

33、tl.conf dest=/etc/sysctl.conf owner=$(fowner) group=$(fgroup) mode=777 server=$(cfserver) trustkey=true $(clientconf)/limits.conf dest=/etc/security/limits.conf owner=$(fowner) group=$(fgroup) mode=777 server=$(cfserver) trustkey=true # # editfiles 区块: 此块操作是自动编辑系统配置文件 editfiles: any: /root/.bashrc A

34、utoCreate DeleteLinesContaining export PS1 AppendIfNoSuchLine export PS1=ne1;37meme1;32mueme1;33meme1;35mhem e4mpwdeme1;37meme1;36memn$ # # processes 区块: 定义检查系统进程,假设没有在ps里发现相应进程,cfagent将根据指定的命令启动该进程 processes: any: # Make sure these processes are always running cfservd restart /var/cfengine/bin/cfse

35、rvd # # shellcommands 区块: 定义了需求运转的系统命令,可以是脚本,也可以是命令 shellcommands: any: # restart apache /etc/init.d/httpd restart # execute cmd /bin/echo client no do ser with domain # # files区块: 定义了检查系统文件属性,如有不符将自动修正 files: any: /etc/passwd mode=644 # make sure the file permissions are right owner=root # make sur

36、e its owned by root action=fixall # if anything is wrong, fix it immediately! checksum=md5 # keep a tripwire checksum to tell us /etc/ssh/sshd_config m=644 o=root g=0 act=fixall设置cfrun.hosts配置文件(在效力端运用cfrun命令推配置到客户端,文件定义要推的客户端主机名列表,存放于Server端的/var/cfengine/inputs目录) # #list of hosts youre going to m

37、anage (remote client must run cfservd) # domain = hzidc access = root admin hostnamekeys = off outputdir= /var/cfengine/output #-host list-# test_name1 test_name2 test_name3 test_name4 test_name5 test_name6 test_name7 test_name8 test_name9 test_name10留意:此配置文件中的主机名要能解析(经过/etc/hosts 或者dns),否那么运转会找不到客户端ip,效力端需求配置hosts

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论