




已閱讀5頁,還剩7頁未讀, 繼續免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
在日常系統管理工作中,管理上千臺服務器,需要臨時的改變其一個配置,例如刪掉某個帳號停掉某個服務 一般我們只能不厭其煩的登到每一臺機器上重復的完成這些動作,或者寫腳本循環登錄及其執行操作 如果有了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,可以運行如下命令: 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 )正如你所看到的,這個系統中包含了很多預定義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每個系統都屬于 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(-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_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: new_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. cfengine系統的搭建與使用3.1. cfengine 配置文件管理方式一般來說,cfengine 的配置文件,都是集中化方式管理,配置文件都通過版本控制軟件進行修改和更新.系統管理更新配置文件后,提交到svn后,cfengine server 更新配置文件,推送到客戶端.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. 客戶機下載成功后執行最新版本的策略文件,不成功就執行舊版本的.注意:update.conf的內容要簡單,一般來說就是下載cfagent.conf策略文件,基本上這個文件創建好了之后就不會更改了.3.3.2. 客戶端自主激活方式1. 客戶機自動執行cfagent程序執行update.conf,連接到服務器的cfservd,下載策略文件cafagent.conf2. 客戶機下載成功后執行最新版本的策略文件,不成功就執行舊版本的.注意:客戶端定期執行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 - state3. 設置cfservd.conf配置文件,文件內容如下 #cat /var/cfengine/clientconf/cfservd.conf (為了簡化一點,服務端和客戶端使用同樣的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范圍內的主機,可以cfrun方式遠程執行cfagent /var/cfengine/8#允許ip在/8范圍內的主機,通過cfagent訪問拷貝此目錄下的文件注意:此cfservd.conf配置文件比較寬松,可以根據需要進行權限的限制4. 設置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 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. 設置cfagent.conf配置文件(cfengine的核心配置文件,所有的功能操作都在此配置文件中定義) #cat /var/cfengine/clientconf/cfagent.conf # # cfagent.conf for client # # 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: # 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定時運行cfagent,它會讀取 下面 schedule 中定義時間來運行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 區塊: 從服務器拷貝配置文件,也可以遞歸拷貝目錄 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 區塊: 此塊操作是自動編輯系統配置文件 editfiles: any: /root/.bashrc AutoCreate 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/cfservd # # 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 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. 設置cfrun.hosts配置文件(在服務端使用cfrun命令推配置到客戶端,文件定義要推的客戶端主機名列表,存放于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注意:此配置文件中的主機名要能解析(通過/etc/hosts 或者dns),否則運行會找不到客戶端ip,服務端需要配置hos
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025簽訂合同代理授權書
- 2025翻譯服務合同(口譯)
- 2025中文版租房合同樣本
- 《神經疾病癥狀學》課件
- 《直腸癌根治術》課件
- 《POCT臨床應用管理》課件
- 《薪資結構設計與優化》課件
- (三診)德陽市高中2022級高三第三次診斷考試政治試卷(含答案)
- 人教版八年級地理第七章 第三節“東方之珠”-香港和澳門 教學設計
- 2025年重慶貨運資格證答題竅門
- 2025-2030銅金屬行業市場深度調研及前景趨勢與投資研究報告
- 2025年遼寧省大連市甘井子區中考一模語文試題(原卷版)
- 《關于強化危險化學品“一件事”全鏈條安全管理的措施》學習解讀
- 【2025新教材】教科版一年級科學下冊全冊教案【含反思】
- 2025年由民政局策劃的離婚協議官方文本模板
- 高血壓科普健康宣教課件
- 班級安全員信息員培訓
- 科技領域實驗室質量控制關鍵技術與方法
- 商場運營部的培訓
- 四年級 人教版 數學《小數的意義》課件
- 《糖尿病與肥胖》課件
評論
0/150
提交評論