cfengine自動化配置系統(tǒng)原理與實踐.docx_第1頁
cfengine自動化配置系統(tǒng)原理與實踐.docx_第2頁
cfengine自動化配置系統(tǒng)原理與實踐.docx_第3頁
cfengine自動化配置系統(tǒng)原理與實踐.docx_第4頁
cfengine自動化配置系統(tǒng)原理與實踐.docx_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

在日常系統(tǒng)管理工作中,管理上千臺服務(wù)器,需要臨時的改變其一個配置,例如刪掉某個帳號停掉某個服務(wù) 一般我們只能不厭其煩的登到每一臺機(jī)器上重復(fù)的完成這些動作,或者寫腳本循環(huán)登錄及其執(zhí)行操作 如果有了cfengine,一個命令就可以搞定了.是不是很看效率,請看如下實踐之體會.以下的所提到的cfengine是2.2版本的.1. cfengine 概述cfengine是一個功能強(qiáng)大的自動化系統(tǒng)管理工具.引用其官網(wǎng)的說法cfengine是一種 UNIX 管理工具,其目的是使簡單的管理的任務(wù)自動化,使困難的任務(wù)變得較容易.它的目標(biāo)是使系統(tǒng)從任何狀態(tài)收斂到一種理想狀態(tài).使用cfengine,它可以保證你的系統(tǒng)總是維持你所希望的那個狀態(tài). 如果說有黑客進(jìn)來了修改了某個重要的配置文件的內(nèi)容或者權(quán)限,也會被cfengine自動修復(fù)!1.1. cfengine 功能概述 檢查和配置網(wǎng)絡(luò)接口 編輯系統(tǒng)和用戶的文本文件 維護(hù)符號鏈接 檢查和設(shè)置文件的權(quán)限 刪除垃圾文件 檢查重要文件和文件系統(tǒng)的存在 控制用戶腳本和shell命令的執(zhí)行 基于類的判定結(jié)構(gòu) 進(jìn)程管理其他細(xì)節(jié)功能,大家可以訪問它的官方網(wǎng)站,里面的文檔十分豐富 /1.2. 使用cfengine的益處當(dāng)你切換使用cfengine來管理系統(tǒng)配置時,你可以得到以下好處: 可以保證所有被管理服務(wù)器使用統(tǒng)一標(biāo)準(zhǔn)化的系統(tǒng)配置 可以針對不同的系統(tǒng)進(jìn)行配置的變更(如linux,freebsd.) 可以記錄系統(tǒng)變更,如果需要還可以在執(zhí)行一次,將系統(tǒng)保持在正確的狀態(tài)1.3. cfengine 組件說明Cfengine是一個用于設(shè)置和維護(hù)計算機(jī)系統(tǒng)的工具,包含了以下幾個組件:cfagent 自動配置代理,其配置文件為update.conf 和 cfagent.confcfservd文件服務(wù)和遠(yuǎn)程激活服務(wù),其配置文件為cfservd.confcfexecd 計劃執(zhí)行 cfagent 命令cfenvd 異常檢測服務(wù)cfrun 遠(yuǎn)程通過cfservd調(diào)用cfagent的方法,其配置文件為cfrun.hostscfshow 檢查有幫助的數(shù)據(jù)庫的內(nèi)容的方法(輔助)cfenvgraph 異常檢測服務(wù)cfenvd的附屬工具(輔助)cfkey 密匙生成工具(每臺服務(wù)器運(yùn)行一次)。1.4. cfengine 配置文件每個系統(tǒng)必須要有最少的配置文件.默認(rèn)情況下,你需要將配置文件放到/var/cfengine/inputs 目錄中.可以集中化管理配置文件,通過拉的方式更新到所有客戶端系統(tǒng)update.conf此配置文件要保持簡單,cfengine每次更新,它總是被首先解析和執(zhí)行,此配置的主要任務(wù)就是從服務(wù)端拷貝一組配置文件. 如果其他配置文件有誤,此配置文件也能夠繼續(xù)更新配置文件,在下次運(yùn)行的時,就可以運(yùn)行成功. 對大部分網(wǎng)站來說,這個文件在cfengine系統(tǒng)初初始運(yùn)行后,不需要去變變更的.cfagent.conf此配置文件是cfengine的核心文件,它包含了所有功能操作配置.可以使用文件導(dǎo)入功能(import功能),使配置文件易讀,參考上圖cfservd.conf此配置文件是 cfservd 守護(hù)進(jìn)程的配置文件.文件定義了那些主機(jī)可以遠(yuǎn)程執(zhí)行cfagent和那些主機(jī)可以傳輸特定的文件.cfengine使用到配置文件,我們需要集中化版本控制(比如Subversion).這樣就可以記錄所有變更,以便在需要時,可以會滾到某個特定的版本配置.2. 使用Classes(與group相同)標(biāo)識系統(tǒng)cfengine中最重要的概念就是Classes. 每種系統(tǒng)都屬于一個或者多個 classes. cfagent每次運(yùn)行的時,會根據(jù)很多各種不同信息來定義classes.可以在特定的classes執(zhí)行特定的操作. 因此,任何操作都可以在一臺主機(jī)上執(zhí)行,也可以在運(yùn)行特定操作系統(tǒng)的主機(jī)上運(yùn)行,也可以在所有的主機(jī)上運(yùn)行. Cfengine 使用內(nèi)置的和用戶定義的classes.2.1. 預(yù)定義Classes的分類主機(jī)本生根據(jù)其架構(gòu)決定很多classes 比如主機(jī)名稱,主機(jī)ip,操作系統(tǒng)等. 很多classes 根據(jù)當(dāng)前的日期和時間定義的.為了確定在給定系統(tǒng)上定義了那些標(biāo)準(zhǔn)classes,可以運(yùn)行如下命令: rootlinux# /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_hzidc_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_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 redhatenterpriseserver_5_3 redhatenterpriseserver_tikanga x86_64 xyi_cn_alidc_net xyi_cn_alidc_net_hzidc_com )正如你所看到的,這個系統(tǒng)中包含了很多預(yù)定義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_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_90 ipv4_172_22_5_91 Date/Time: Day17 Hr11 Hr11_Q1 March Min10_15 Min11 Q1每個系統(tǒng)都屬于 any 這個 class,當(dāng)你需要對 未定義或者不能使用classes標(biāo)識的系統(tǒng)進(jìn)行操作時候,可以使用 any 這個 class.2.2. 自定義Classes自定義classes 配置都是在cfagent.conf 中的groups區(qū)域中,請看如下例子: groups: web_app1 = ( IPRange(-250) IPRange(-250) IPRange(-250) ) web_app1 = ( IPRange(-250) IPRange(-250) IPRange(-250) ) ntp_server= ( nagios1 nagios2 nagios3 monitor_xy7 monitor_xy8 monitor_xy9 ) # 通過配置文件 判斷是否屬于某一類型的主機(jī) dns = ( /usr/bin/test -f /etc/named.conf ) web_normal = ( /usr/bin/test -f /etc/httpd/conf/httpd.conf ) # 通過cfengine內(nèi)部命令來判斷 first_ten_server = ( RegCmp(webserver0-9i,$host) ) # all server all_server= ( dns web_app1 ) copy: any: # 根據(jù)拷貝結(jié)果,定義新的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 中的一段而已,從上面可以看出: 可以根據(jù)執(zhí)行命令程序的返回結(jié)果來定義class,如果命令返回結(jié)果為0,此系統(tǒng)屬于此定義的class. class 的定義可以是包含已有或者已定義的class 可以根據(jù)執(zhí)行操作的結(jié)果來定義新的classes.比如上面的配置例子,當(dāng)syslog.conf配置改變了,當(dāng)拷貝完成時,會定義一個new_syslog的class. 在shellcommands的操作中,會根據(jù)new_syslog class 來重啟syslog服務(wù).3. cfengine系統(tǒng)的搭建與使用3.1. cfengine 配置文件管理方式一般來說,cfengine 的配置文件,都是集中化方式管理,配置文件都通過版本控制軟件進(jìn)行修改和更新.系統(tǒng)管理更新配置文件后,提交到svn后,cfengine server 更新配置文件,推送到客戶端.3.2. cfengine 運(yùn)行方式1. 管理員登錄主服務(wù)器更新配置文件(svn),通過運(yùn)行cfrun命令通知客戶端進(jìn)行更新.cfrun在cfrun.hosts 文件中查找客戶端的列表.請注意,主服務(wù)器可以自行充當(dāng)客戶端。此圖中有兩個客戶端:主服務(wù)器和遠(yuǎn)程客戶端.2. cfrun與每個客戶端上的 cfservd 進(jìn)行通信,cfservd 然后運(yùn)行cfagent.3. cfagent連接主服務(wù)器,首先檢查update.conf是否有新版本,如果有更新,將它傳輸?shù)娇蛻舳?4. cfagent 先評估 update.conf 的內(nèi)容,并獲取策略文件(cfagent.conf 和相關(guān)文件)的最新版本.5. 隨后評估 cfagent.conf以確定客戶端是否處于所需狀態(tài)。如果有偏差,cfagent 將執(zhí)行已定義的操作來更正客戶端配置.注意:沒有絕對的服務(wù)端和客戶端,在需要的情況下,客戶端也可以作服務(wù)器端.3.3. cfengine 更新觸發(fā)機(jī)制3.3.1. 服務(wù)器集中通知更新方式1. 服務(wù)器上運(yùn)行cfrun,cfrun會根據(jù)cfrun.hosts中的主機(jī)列表來連接到某個客戶機(jī)的cfservd程序2. 客戶機(jī)上cfservd調(diào)用本機(jī)的cfagent程序3. 客戶機(jī)上cfagent程序執(zhí)行update.conf,連接到服務(wù)器的cfservd,下載策略文件cafagent.conf4. 客戶機(jī)下載成功后執(zhí)行最新版本的策略文件,不成功就執(zhí)行舊版本的.注意:update.conf的內(nèi)容要簡單,一般來說就是下載cfagent.conf策略文件,基本上這個文件創(chuàng)建好了之后就不會更改了.3.3.2. 客戶端自主激活方式1. 客戶機(jī)自動執(zhí)行cfagent程序執(zhí)行update.conf,連接到服務(wù)器的cfservd,下載策略文件cafagent.conf2. 客戶機(jī)下載成功后執(zhí)行最新版本的策略文件,不成功就執(zhí)行舊版本的.注意:客戶端定期執(zhí)行cfagent,可以通過添加到crontab 或者 cfexecd定期調(diào)用.這樣的情況下,客戶端就不需要運(yùn)行cfservd程序.3.4. cfengine 服務(wù)器端設(shè)置1. 安裝cfengine軟件包,可以使用源碼或者rpm包,請參考互聯(lián)網(wǎng).2. cfengine服務(wù)端目錄結(jié)構(gòu) /var/cfengine/ |- backup |- bin |- clientconf#客戶端從此目錄下載和更新配置文件 |- inputs#服務(wù)端自身的配置文件 |- lib |- modules |- outputs |- ppkeys |- rpc_in |- rpc_out |- share - state3. 設(shè)置cfservd.conf配置文件,文件內(nèi)容如下 #cat /var/cfengine/clientconf/cfservd.conf (為了簡化一點,服務(wù)端和客戶端使用同樣的cfservd.conf配置) # # Who and what we allow access to, and who we trust # Master Server conf and Client cfservd conf # control: domain = ( ) cfrunCommand = ( /var/cfengine/bin/cfagent ) MaxConnections = ( 100 ) MultipleConnections = ( true ) IfElapsed = ( 1 ) DenyBadClocks = ( false ) AllowConnectionsFrom = ( /8 ) TrustKeysFrom = ( /8 )#自動交換key,不需要拷貝key LogAllConnections = ( true ) AllowUsers = ( root admin ) HostnameKeys = ( off ) ChecksumDatabase = ( /var/cfengine/cfdb ) grant: $(cfrunCommand)/8#允許ip在/8范圍內(nèi)的主機(jī),可以cfrun方式遠(yuǎn)程執(zhí)行cfagent /var/cfengine/8#允許ip在/8范圍內(nèi)的主機(jī),通過cfagent訪問拷貝此目錄下的文件注意:此cfservd.conf配置文件比較寬松,可以根據(jù)需要進(jìn)行權(quán)限的限制4. 設(shè)置update.conf配置文件(cfagent運(yùn)行時,第一解析的配置文件) #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 perform domain = ( ) # 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 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 owner=$(fowner) group=$(ogroup) mode=700 server=$(cfserver) trustkey=true encrypt=true注意:要盡可能保持update.conf文件簡單,只讓它更新必要的cfagent.conf配置文件,其他的具體功能操作都在cfagent.conf文件中定義.5. 設(shè)置cfagent.conf配置文件(cfengine的核心配置文件,所有的功能操作都在此配置文件中定義) #cat /var/cfengine/clientconf/cfagent.conf # # cfagent.conf for client # # group區(qū)塊定義群組(classes),可以在后續(xù)的配置中指定特定的組群執(zhí)行特定的操作,這樣就可以將不同類的配置文件都寫在同一個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 ) editfilesize = ( 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 = ( ) smtpserver = ( ) EmailMaxLines = ( n ) # No maximum lines Syslog = ( on ) # How many cfengines can run, what do we do when the servers busy SplayTime = ( 45 ) # Run everything immediately MaxCfengines = ( 20 ) Repository = ( /var/cfengine/backup ) # 如果使用cfexecd定時運(yùn)行cfagent,它會讀取 下面 schedule 中定義時間來運(yùn)行cfagent schedule = ( Monday.Hr10 Tuesday.Hr10 Wednesday.Hr10 Thursday.Hr10 Friday.Hr10 Monday.Hr15 ) # Set 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 on hostname, not IP Inform = ( on ) # Show diagnostic output ShowActions = ( off ) # Do not show verbose diagnostic output domain = ( ) # Obtain our domain name automatically # 可以自定義一些變量,方便后面引用,引用方式 $(cfserver) cfserver = ( 00 ) clientconf = ( /var/cfengine/clientconf ) workdir = ( /var/cfengine ) etcdir = ( /etc ) optdir = ( /opt ) bin_mode = ( 755 ) # mode for binaries fowner = ( root ) # file owner fgroup = ( root ) # file group actionsequence = ( copy editfiles shellcommands processes ) # # copy 區(qū)塊: 從服務(wù)器拷貝配置文件,也可以遞歸拷貝目錄 copy: any: $(clientconf)/cfservd.conf dest=$(workdir)/inputs/cfservd.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)/sysctl.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 區(qū)塊: 此塊操作是自動編輯系統(tǒng)配置文件 editfiles: any: /root/.bashrc AutoCreate DeleteLinesContaining export PS1 AppendIfNoSuchLine export PS1=ne1;37meme1;32mueme1;33meme1;35mhem e4mpwdeme1;37meme1;36memn$ # # processes 區(qū)塊: 定義檢查系統(tǒng)進(jìn)程,如果沒有在ps里發(fā)現(xiàn)相應(yīng)進(jìn)程,cfagent將根據(jù)指定的命令啟動該進(jìn)程 processes: any: # Make sure these processes are always running cfservd restart /var/cfengine/bin/cfservd # # shellcommands 區(qū)塊: 定義了需要運(yùn)行的系統(tǒng)命令,可以是腳本,也可以是命令 shellcommands: any: # restart apache /etc/init.d/httpd restart # execute cmd /bin/echo client no do ser with domain # # files區(qū)塊: 定義了檢查系統(tǒng)文件屬性,如有不符將自動修正 files: any: /etc/passwd mode=644 # make sure the file permissions are right owner=root # make sure 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=fixall6. 設(shè)置cfrun.hosts配置文件(在服務(wù)端使用cfrun命令推配置到客戶端,文件定義要推的客戶端主機(jī)名列表,存放于Server端的/var/cfengine/inputs目錄) # #list of hosts youre going to manage (remote client must run cfservd) # domain = 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注意:此配置文件中的主機(jī)名要能解析(通過/etc/hosts 或者dns),否則運(yùn)行會找不到客戶端ip,服務(wù)端需要配置hos

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論