puppet運維自動化配置安裝學習

1.Puppet簡介
Puppet
是一個開源的自動化配置和部署工具,puppet是基於C/S架構的,服務端被稱爲Puppet master,客戶端軟件被稱爲Puppet agent,Puppet master服務器端保存着全部對客戶端服務器的配置代碼,Puppet agent則經過一個使用標準SSL協議進行加密和驗證的連接與Puppet master進行通訊。node



2.Puppet工做原理
1
)客戶端Puppetd向Master發起認證請求。
2
)客戶端puppet調用Facter,Factert探測出主機的變量信息,Puppetd將這些信息經過SSL鏈接發送到服務器端。
3
)服務器端的Puppet Master檢測客戶端的主機名,而後找到manifest對應的node配置,並對該內容進行解析,並將僞代碼發送給客戶端。
5
)客戶端接收到僞代碼並執行,將執行結果返回給服務器。
6
)服務器把客戶端的執行結果寫入日誌。mysql


3.物理環境linux


角色sql

OSshell

IPvim

hostnameruby

master服務器

Centos6.4_64架構

192.168.1.191app

master.puppet.net

slave

Centos6.4_64

192.168.1.192

slave.puppet.net


4.獲取puppet軟件包


puppet的官方網站(https://puppetlabs.com)下載最新的安裝版本puppet-3.1.1.tar.gz


也能夠在Linux終端用wget下載。

wgethttp://puppetlabs.com/downloads/puppet/puppet-3.1.1.tar.gz --no-check-certificate

wgethttp://puppetlabs.com/downloads/facter/facter-1.6.18.tar.gz--no-check-certificate



5.puppet安裝配置


5.1配置主機名,Puppet是經過主機名(FQDN)通訊的,在masteragent/etc/hosts文件裏面添加下面兩行。

192.168.1.191master.puppet.net

192.168.1.192slave.puppet.net


wKiom1LFPbHhXCUzAAAfAMvmtVY754.jpg


5.2Puppet master端的安裝。


1)Puppet是用ruby語言開發的,所以在安裝puppet以前先安裝ruby。

yum –y install ruby



2)安裝facter。

tar –zxvf facter-1.6.18.tar.gz

cd facter-1.6.18

ruby install.rb



3)安裝puppet。


先添加puppet用戶。

useradd –M –s /sbin/nologinpuppet

tar –zxvf puppet-3.1.1.tar.gz

cd puppet-3.1.1

ruby install.rb


4)啓動puppet master進程。

puppet master


#查看幫忙文檔

puppet help


puppet master第一次啓動的時候,會建立本地認證中心,給本身簽發證書和key,能夠在/etc/puppet/ssl裏面看到。


wKioL1LFPbLxAe1cAABcE1C9o4k084.jpg


#查看puppet的進程。

ps –aux | grep –v 「grep」 | grep 「puppet」


wKiom1LFPcmjyGDTAAB-L-A_mgY680.jpg




5.3Puppet slave端的安裝。


1)Puppet是用ruby語言開發的,所以在安裝puppet以前先安裝ruby。


yum –y install ruby


2)安裝facter。

tar –zxvf facter-1.6.18.tar.gz

cd facter-1.6.18

ruby install.rb



3)安裝puppet。

先添加puppet用戶。

useradd –M –s /sbin/nologinpuppet

tar –zxvf puppet-3.1.1.tar.gz

cd puppet-3.1.1

ruby install.rb




6.puppet agent 證書申請流程。


agent第一次鏈接master的時候會向master申請證書.以下


1)puppet agent --server master.puppet.net--waitforcert 60 –test


2)在master端查看客戶端的證書申請請求.

puppet cert --list


3)在master端給客戶端簽發證書.

puppet cert --sign slave.puppet.net


4)當證書籤發成功後,agent能夠和master之間創建鏈接.


puppet agent --servermaster.puppet.net --waitforcert 60 --test

wKioL1LFPcqg6QwyAAA98-9YAhI487.jpg




7.Puppet master-slave客戶端測試。


1)master端修改配置文件vim/etc/puppet/manifests/site.pp


node default {

file{"/tmp/magme.txt":

content => "hello,magme!,This is puppet master test file!!!";

}


}


2)agent端測試.

puppet agent --servermaster.puppet.net --test


wKiom1LFPeTylwE0AABSJqQXNRA938.jpg


3)在agent端的/tmp目錄中會出現magme.txt文件,說明puppet安裝配置成功.

cat /tmp/magme.txt

wKioL1LFPezQnNrqAAAfOzwOneo448.jpg




8.puppet單機測試.


在任意目錄中,新建vim test1.pp


notify {'notice':

message => 'hello puppet' ,

}


應用該文件.

puppet apply test1.pp

wKiom1LGIoPTsC54AAA63KavJpM923.jpg






9.實用案例:


文件分發:
經過puppet能夠向被管理機上推送文件,方法是使用file類型的source屬性
1:修改/etc/puppet/fileserver.conf
2:修改/etc/puppet/manifests/site.pp
實例:要把server服務器上/opt目錄下的mysql-5.1.49-linux-i686-icc-glibc23.tar.gz傳輸至client服務器的/opt目錄下,文件名不變。
第一步:Vi /etc/puppet/fileserver.conf
[files]
path /opt/
allow 192.168.133.0/24

第二步:vi/etc/puppet/manifests/site.pp
file
{ "/opt/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz":
source =>"puppet://$puppetserver/files/mysql-5.1.49-linux-i686-icc-glibc23.tar.gz",
}

第三步:
在client客戶端執行更新命令
puppetd --test --server testsns

此處「$puppetserver」是puppet Server端的名稱,即hostname,網上教程都是在hosts裏指定,生產環境下用內部的DNS上做解析,像我公司一個www平臺就有70臺linux服務器,一個個添加hosts,不搞死人去。

修改文件屬性:
實例:把/tmp/dd142/ puppet-2.6.13.tar.gz文件的權限改成puppet用戶,並設置權限爲666。
第一步:編輯Server端的site.pp
vi /etc/puppet/manifests/site.pp
---內容以下
file
{ "/tmp/dd142/puppet-2.6.13.tar.gz":
owner => "puppet",
group => "puppet",
mode => 666,
}
----
第二步:在client端執行命令
puppetd --test --server testsns

執行SHELL命令或shell腳本:
實例:經過puppet分發執行shell腳本,在客戶端的opt目錄下新建一目錄shelldir。
第一步:編輯Server端的site.pp
vi /etc/puppet/manifests/site.pp

exec {"exec-mkdir":
cwd => "/opt",
command => "sh /opt/lgh.sh",
user => "root",
path =>"/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin",
}
第二步:在client端編輯一shell腳本


第三步:在client端執行命令
puppetd --test --server testsns
在/opt目錄下查看shelldir有沒有創建。

服務檢查及修改:
能夠經過puppet對一些服務進行檢查。puppet是經過service命令操做的。因此,只能針對在/etc/init.d/目錄下的服務
實例:把客戶端的防火牆起來(原來是關閉的)
vi /etc/puppet/manifests/site.pp //清空site.pp,再新建

service
{ iptables:
ensure => "running",
}

cron計劃任務:
接上面的shell程序實例,在17:30執行/opt/lgh.sh。
cron { "cron-shell": #title部分,可用來做爲註釋。
command => "sh /opt/lgh.sh" #要執行的命令
user => "root", #添加到root用戶下的crontab中
minute => "30", #即第一個星號
hour => "17" #即第二個星號
}
登陸客戶端查看效果


wKioL1LFPfqAz0xyAAA-3IvlvrI838.jpg




10.遇到的問題??


.Could notretrieve information from environment production source(s)puppet://server.puppet.com/plugins


解決方法:網上說把兩端/etc/puppet.conf裏pluginsync=true ,改爲pluginsync=false,並重啓puppetmaster便可解決。


新版本puppet3.1.1中根本沒有這個選項,那麼只須要在master中,執行mkdir /etc/puppet/modules,而後錯誤就沒有了。




總結:

1.Puppet是管理系統配置的工具,包括軟件的安裝,文件的配置,系統服務,文件的管理,用戶的添加/刪除,定時計劃配置等。在puppet中,將上述列出的管理任務稱爲資源。

2.生成配置文件,3.1.1源碼包的conf裏面沒有puppet的配置文件,能夠用下面的方式生成配置文件。

puppet master--genconfig > /etc/puppet/puppet.conf 生成master配置文件

puppet agent--genconfig > /etc/puppet/puppet.conf 生成agent配置文件

相關文章
相關標籤/搜索