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

下載本文檔

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

文檔簡介

/在日常系統(tǒng)管理工作中,管理上千臺效勞器,需要臨時的改變其一個配置,例如刪掉某個帳號停掉某個效勞

一般我們只能不厭其煩的登到每一臺機器上重復(fù)的完成這些動作,或者寫腳本循環(huán)登錄及其執(zhí)行操作

如果有了cfengine,一個命令就可以搞定了.是不是很看效率,請看如下實踐之體會.以下的所提到的cfengine是2.2版本的.1.cfengine概述cfengine是一個功能強大的自動化系統(tǒng)管理工具.引用其官網(wǎng)的說法"cfengine是一種UNIX管理工具,其目的是使簡單的管理的任務(wù)自動化,使困難的任務(wù)變得較容易.

它的目標(biāo)是使系統(tǒng)從任何狀態(tài)收斂到一種理想狀態(tài).使用cfengine,它可以保證你的系統(tǒng)總是維持你所希望的那個狀態(tài).

如果說有黑客進來了修改了某個重要的配置文件的內(nèi)容或者權(quán)限,也會被cfengine自動修復(fù)!1.1.cfengine功能概述檢查和配置網(wǎng)絡(luò)接口編輯系統(tǒng)和用戶的文本文件維護符號鏈接檢查和設(shè)置文件的權(quán)限刪除垃圾文件檢查重要文件和文件系統(tǒng)的存在控制用戶腳本和shell命令的執(zhí)行基于類的判定結(jié)構(gòu)進程管理其他細節(jié)功能,大家可以訪問它的官方網(wǎng)站,里面的文檔十分豐富[]1.2.使用cfengine的益處當(dāng)你切換使用cfengine來管理系統(tǒng)配置時,你可以得到以下好處:可以保證所有被管理效勞器使用統(tǒng)一標(biāo)準化的系統(tǒng)配置可以針對不同的系統(tǒng)進行配置的變更(如linux,freebsd)可以記錄系統(tǒng)變更,如果需要還可以在執(zhí)行一次,將系統(tǒng)保持在正確的狀態(tài)1.3.cfengine組件說明Cfengine是一個用于設(shè)置和維護計算機系統(tǒng)的工具,包含了以下幾個組件:cfagent自動配置代理,其配置文件為update.conf和cfagent.confcfservd文件效勞和遠程激活效勞,其配置文件為cfservd.confcfexecd方案執(zhí)行cfagent命令cfenvd異常檢測效勞cfrun遠程通過cfservd調(diào)用cfagent的方法,其配置文件為cfrun.hostscfshow檢查有幫助的數(shù)據(jù)庫的內(nèi)容的方法(輔助)cfenvgraph異常檢測效勞cfenvd的附屬工具(輔助)·cfkey密匙生成工具(每臺效勞器運行一次)。1.4.cfengine配置文件每個系統(tǒng)必須要有最少的配置文件.默認情況下,你需要將配置文件放到/var/cfengine/inputs目錄中.可以集中化管理配置文件,通過拉的方式更新到所有客戶端系統(tǒng)update.conf此配置文件要保持簡單,cfengine每次更新,它總是被首先解析和執(zhí)行,此配置的主要任務(wù)就是從效勞端拷貝一組配置文件.

如果其他配置文件有誤,此配置文件也能夠繼續(xù)更新配置文件,在下次運行的時,就可以運行成功.

對大局部網(wǎng)站來說,這個文件在cfengine系統(tǒng)初初始運行后,不需要去變變更的.cfagent.conf此配置文件是cfengine的核心文件,它包含了所有功能操作配置.可以使用文件導(dǎo)入功能(import功能),使配置文件易讀,參考上圖cfservd.conf此配置文件是cfservd守護進程的配置文件.文件定義了那些主機可以遠程執(zhí)行cfagent和那些主機可以傳輸特定的文件.cfengine使用到配置文件,我們需要集中化版本控制(比方Subversion).這樣就可以記錄所有變更,以便在需要時,可以會滾到某個特定的版本配置.2.使用Classes(與group相同)標(biāo)識系統(tǒng)cfengine中最重要的概念就是Classes.每種系統(tǒng)都屬于一個或者多個classes.

cfagent每次運行的時,會根據(jù)很多各種不同信息來定義classes.可以在特定的classes執(zhí)行特定的操作.

因此,任何操作都可以在一臺主機上執(zhí)行,也可以在運行特定操作系統(tǒng)的主機上運行,也可以在所有的主機上運行.

Cfengine使用內(nèi)置的和用戶定義的classes.2.1.預(yù)定義Classes的分類主機本生根據(jù)其架構(gòu)決定很多classes比方主機名稱,主機ip,操作系統(tǒng)等.

很多classes根據(jù)當(dāng)前的日期和時間定義的.為了確定在給定系統(tǒng)上定義了那些標(biāo)準classes,可以運行如下命令:[root@linux]#/var/cfengine/bin/cfagent-p-v|grepDefined

DefinedClasses=(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_2

cfengine_2_2cfengine_2_2_3cfengine_servercn_alidc_netcn_alidc_net_hzidc_comcomcompiled_on_linux_gnufe80__216_3eff_fe16_55b

hst_xyi_cn_alidc_nethst_xyi_cn_alidc_net_hzidc_comhzidc_comipv4_172ipv4_172_22ipv4_172_22_5ipv4_172_22_5_90ipv4_172_22_5_91linux

linux_2_6_18_131_el5_customxenlinux_x86_64linux_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_2009lsb_compliantnetnet_hzidc_com

net_iface_bond0net_iface_loredhatredhat_sredhat_s_5redhat_s_5_3redhatenterpriseserverredhatenterpriseserver_5

redhatenterpriseserver_5_3redhatenterpriseserver_tikangax86_64xyi_cn_alidc_netxyi_cn_alidc_net_hzidc_com)正如你所看到的,這個系統(tǒng)中包含了很多預(yù)定義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每個系統(tǒng)都屬于any這個class,當(dāng)你需要對未定義或者不能使用classes標(biāo)識的系統(tǒng)進行操作時候,可以使用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=(nagios1nagios2nagios3monitor_xy7monitor_xy8monitor_xy9)

#通過配置文件判斷是否屬于某一類型的主機

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("webserver[0-9]i","${host}"))

#allserver

all_server=(dnsweb_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/syslogrestart>/dev/null2>&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_syslogclass來重啟syslog效勞.3.cfengine系統(tǒng)的搭建與使用3.1.cfengine配置文件管理方式一般來說,cfengine的配置文件,都是集中化方式管理,配置文件都通過版本控制軟件進行修改和更新.

系統(tǒng)管理更新配置文件后,提交到svn后,cfengineserver更新配置文件,推送到客戶端.3.2.cfengine運行方式管理員登錄主效勞器更新配置文件(svn),通過運行cfrun命令通知客戶端進行更新.cfrun在cfrun.hosts文件中查找客戶端的列表.

請注意,主效勞器可以自行充當(dāng)客戶端。此圖中有兩個客戶端:主效勞器和遠程客戶端.cfrun與每個客戶端上的cfservd進行通信,cfservd然后運行cfagent.cfagent連接主效勞器,首先檢查update.conf是否有新版本,如果有更新,將它傳輸?shù)娇蛻舳?cfagent先評估update.conf的內(nèi)容,并獲取策略文件(cfagent.conf和相關(guān)文件)的最新版本.隨后評估cfagent.conf以確定客戶端是否處于所需狀態(tài)。如果有偏差,cfagent將執(zhí)行已定義的操作來更正客戶端配置.注意:沒有絕對的效勞端和客戶端,在需要的情況下,客戶端也可以作效勞器端.3.3.cfengine更新觸發(fā)機制3.3.1.效勞器集中通知更新方式效勞器上運行cfrun,cfrun會根據(jù)cfrun.hosts中的主機列表來連接到某個客戶機的cfservd程序客戶機上cfservd調(diào)用本機的cfagent程序客戶機上cfagent程序執(zhí)行update.conf,連接到效勞器的cfservd,下載策略文件cafagent.conf客戶機下載成功后執(zhí)行最新版本的策略文件,不成功就執(zhí)行舊版本的.注意:update.conf的內(nèi)容要簡單,一般來說就是下載cfagent.conf策略文件,根本上這個文件創(chuàng)立好了之后就不會更改了.3.3.2.客戶端自主激活方式客戶機自動執(zhí)行cfagent程序執(zhí)行update.conf,連接到效勞器的cfservd,下載策略文件cafagent.conf客戶機下載成功后執(zhí)行最新版本的策略文件,不成功就執(zhí)行舊版本的.注意:客戶端定期執(zhí)行cfagent,可以通過添加到crontab或者cfexecd定期調(diào)用.這樣的情況下,客戶端就不需要運行cfservd程序.3.4.cfengine效勞器端設(shè)置安裝cfengine軟件包,可以使用源碼或者rpm包,請參考互聯(lián)網(wǎng).cfengine效勞端目錄結(jié)構(gòu)/var/cfengine/

|--backup

|--bin

|--clientconf#客戶端從此目錄下載和更新配置文件

|--inputs#效勞端自身的配置文件

|--lib

|--modules

|--outputs

|--ppkeys

|--rpc_in

|--rpc_out

|--share

`--state設(shè)置cfservd.conf配置文件,文件內(nèi)容如下#cat/var/cfengine/clientconf/cfservd.conf(為了簡化一點,效勞端和客戶端使用同樣的cfservd.conf配置)

###############################################################################

#Whoandwhatweallowaccessto,andwhowetrust

#MasterServerconfandClientcfservdconf

###############################################################################

control:

domain=()

cfrunCommand=("/var/cfengine/bin/cfagent")

MaxConnections=(100)

MultipleConnections=(true)

IfElapsed=(1)

DenyBadClocks=(false)

AllowConnectionsFrom=(/8)

TrustKeysFrom=(/8)#自動交換key,不需要拷貝key

LogAllConnections=(true)

AllowUsers=(rootadmin)

HostnameKeys=(off)

ChecksumDatabase=(/var/cfengine/cfdb)

grant:

$(cfrunCommand)/8#允許ip在/8范圍內(nèi)的主機,可以cfrun方式遠程執(zhí)行cfagent

/var/cfengine/8#允許ip在/8范圍內(nèi)的主機,通過cfagent訪問拷貝此目錄下的文件注意:此cfservd.conf配置文件比較寬松,可以根據(jù)需要進行權(quán)限的限制設(shè)置update.conf配置文件(cfagent運行時,第一解析的配置文件)#cat/var/cfengine/clientconf/update.conf

###############################################################################

#update.conf-ensurethattheinputsandbinariesin/var/cfengineare

#syncedtothoseontheserver.

###############################################################################

control:

actionsequence=(copy)#sequenceofactionstoperform

domain=()#ourdomain

DefaultCopyType=(checksum)#Copybasedonchecksum,notmtime

HostnameKeys=(off)

cfserver=(00)#hostrunningcfservd

workdir=(/var/cfengine)#theworkdir

clientconf=(/var/cfengine/clientconf)

input_mode=(700)#modeforinputfiles

bin_mode=(755)#modeforbinaries

fowner=(root)#

ogroup=(root)#

any::#theclasstomatch

SplayTime=(1)#maxnumberofminutesover

#whichcfenginewillshare

#itsloadontheserver

############################################################################

copy:

$(clientconf)/cfagent.confdest=$(workdir)/inputs/cfagent.conf

owner=$(fowner)group=$(ogroup)

mode=700

server=$(cfserver)trustkey=trueencrypt=true注意:要盡可能保持update.conf文件簡單,只讓它更新必要的cfagent.conf配置文件,其他的具體功能操作都在cfagent.conf文件中定義.設(shè)置cfagent.conf配置文件(cfengine的核心配置文件,所有的功能操作都在此配置文件中定義)#cat/var/cfengine/clientconf/cfagent.conf

###############################################################################

#cfagent.confforclient

###############################################################################

#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::

##BasicCfengineconfigurations

access=(root)

edit=(0)#0turnsofftheeditlimit.

netmask=()#Setsthenetmaskifyouusenetconfig.

timezone=(CST)

##HowandWheredoweoutputstuff?

sysadmin=()

smtpserver=()

EmailMaxLines=(n)#Nomaximumlines

Syslog=(on)

##Howmanycfenginescanrun,whatdowedowhentheserver'sbusy

SplayTime=(45)#Runeverythingimmediately

MaxCfengines=(20)

Repository=(/var/cfengine/backup)

#如果使用cfexecd定時運行cfagent,它會讀取下面schedule中定義時間來運行cfagent

schedule=(Monday.Hr10Tuesday.Hr10Wednesday.Hr10Thursday.Hr10Friday.Hr10Monday.Hr15)

##Setsomedefaults

DefaultCopyType=(checksum)#Copybasedonchecksum,notmtime

DeleteNonUserFiles=(false)#Donotdeleteunownedfiles

Exclamation=(on)#Informusofproblems.

ExpireAfter=(30)#Don'tletcfenginerunlongerthen60minutes.

HostnameKeys=(off)#Storekeysbasedonhostname,notIP

Inform=(on)#Showdiagnosticoutput

ShowActions=(off)#Donotshowverbosediagnosticoutput

domain=()#Obtainourdomainnameautomatically

#可以自定義一些變量,方便后面引用,引用方式$(cfserver)

cfserver=(00)

clientconf=(/var/cfengine/clientconf)

workdir=(/var/cfengine)

etcdir=(/etc)

optdir=(/opt)

bin_mode=(755)#modeforbinaries

fowner=(root)#

fgroup=(root)#

actionsequence=(copyeditfilesshellcommandsprocesses)

###############################################################################

##copy區(qū)塊:從效勞器拷貝配置文件,也可以遞歸拷貝目錄

copy:

any::

$(clientconf)/cfservd.confdest=$(workdir)/inputs/cfservd.conf

owner=$(fowner)group=$(fgroup)

mode=700

server=$(cfserver)trustkey=true

$(clientconf)/update.confdest=$(workdir)/inputs/update.conf

owner=$(fowner)group=$(fgroup)

mode=700

server=$(cfserver)trustkey=true

#引用前面自定義個group(classes),屬于Redhat_AS4這個組的拷貝以下配置文件

Redhat_AS4::

$(clientconf)/sysctl.confdest=/etc/sysctl.conf

owner=$(fowner)group=$(fgroup)

mode=777

server=$(cfserver)trustkey=true

$(clientconf)/limits.confdest=/etc/security/limits.conf

owner=$(fowner)group=$(fgroup)

mode=777

server=$(cfserver)trustkey=true

###############################################################################

##editfiles區(qū)塊:此塊操作是自動編輯系統(tǒng)配置文件

editfiles:

any::

{/root/.bashrc

AutoCreate

DeleteLinesContaining"exportPS1"

AppendIfNoSuchLine"exportPS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\h\e[m\e[4m`pwd`\e[m\e[1;37m]\e[m\e[1;36m\e[m\n\$'"

}

###############################################################################

##processes區(qū)塊:定義檢查系統(tǒng)進程,如果沒有在ps里發(fā)現(xiàn)相應(yīng)進程,cfagent將根據(jù)指定的命令啟動該進程

processes:

any::

#Makesuretheseprocessesarealwaysrunning

"cfservd"restart"/var/cfengine/bin/cfservd"

###############################################################################

##shellcommands區(qū)塊:定義了需要運行的系統(tǒng)命令,可以是腳本,也可以是命令

shellcommands:

any::

#restartapache

"/etc/init.d/httpdrestart"

#executecmd

"/bin/echoclientnodoserwithdomain"

###############################################################################

##files區(qū)塊:定義了檢查系統(tǒng)文件屬性,如有不符將自動修正

files:

any::

/etc/passwd

mode=644#makesuretheareright

owner=root#makesureit'sownedbyroot

action=fixall#ifanythingiswrong,fixitimmediately!

checksum=md5#keepa"tripwire"checksumtotellus

/etc/ssh/sshd_configm=644o=rootg=0act=fixall設(shè)置cfrun.hosts配置文件(在效勞端使用cfrun命令"推"配置到客戶端,文件定義要"推"的客戶端主機名列表,存放于Server端的/var/cfengine/inputs目錄)#####################################################################

#listofhostsyou'regoingtomanage(remoteclientmustruncfservd)

#####################################################################

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論