天天看點

Linux下自動化部署和配置工具

系統部署

一、Kickstart

主要針對Redhat和CentOS作業系統的安裝和初始配置,不過網絡的配置仍然需要一台一台地進行。

二、Cobbler

與Kickstart類似,主要支援的也是Redhat和CentOS,不過它操作起來更簡單了。新版作業系統源中帶。

系統更新和應用部署

一、Puppet

支援更新軟體包、管理配置檔案、系統服務、cron任務以及添加新的配置、修複錯誤。用戶端需要安裝軟體。服務和用戶端都需要Ruby環境支援。提供基于SSL的認證機制。

新版作業系統源中帶。

二、Func

支援主要機上一次管理任意多台伺服器,或任意多個伺服器組;

SSL證書管理體系;

提供常用的管理子產品;

支援直接發送指令和磁盤挂載;

系統管理者經常陷入一系列的重複任務中:如更新軟體包、管理配置檔案、系統服務、cron任務以及添加新的配置、修複錯誤等。這些任務通常是重複低 效的,解決這類任務的第一反應是讓他們自動化,于是出現了定制腳本。由于環境複雜,定制腳本和應用程式一再被重複開發,并且很難适合多種平台,靈活性和功 能也很難保證,于是像Puppet這樣的自動化配置管理工具便出現了。

在開源世界裡,有很多配置工具可供選擇,這個領域一些關鍵的産品有:

Puppet(http://puppet.reductivelabs.com/):

Ruby寫成的配置管理工具,使用C/S架構,使用declarative language配置用戶端。

Cfengine(http://www.cfengine.org):

最先釋出的開源配置工具之一,1993年釋出,同樣是C/S架構,通常應用于教育機構。

LCFG(http://www.lcfg.org/):

C/S架構的配置管理工具,使用XML定義配置。

Bcfg2

Python編寫的C/S架構的配置管理工具,使用規格書和客戶機響應配置目标主機。

SmartFrog(http://www.smartfrog.org/):

func(https://fedorahosted.org/func/)

本文檔緻力于描述使用Puppet管理你的主機、應用程式、背景程式和各種服務。

Puppet簡介:

1. Puppet的用途

Puppet是開源的基于Ruby的系統配置管理工具,依賴于C/S的部署架構。主要開發者是Luke Kanies,遵循GPLv2版權協定。從1997年開始Kanies參與UNIX的系統管理工作,Puppet的開發源于這些經驗。因為對已有的配置工 具不甚滿意,從2001年到2005年間,Kanies開始在Reductive實驗室從事工具的開發。很快,Reductive實驗室釋出了他們的旗艦 産品——Puppet。

2. Pupput的特性

許多系統配置管理工具工作的方式非常類似,如cfengine。是什麼讓Puppet與衆不同?

Puppet的文法允許你建立一個單獨腳本,用來在你所有的目标主機上建立一個使用者。所有的目标主機會依次使用适用于本地系統的文法解釋和執行這個 子產品。舉例:如果這個配置是在Red Hat伺服器上執行,建立使用者使用useradd指令;如果這個配置是在FreeBSD主機上執行,使用的是adduser指令。

Puppet另一個卓越的地方是它的靈活性。源于開源軟體的天性,你可以自由的獲得Puppet的源碼,如果你遇到問題并且有能力的話,你可以修改 或者加強Puppet的代碼去适用于你的環境。另外,社群開發者和捐獻者還在不斷增強Puppet的功能。一個大的開發者和使用者社群也緻力于提供 Puppet的文檔和技術支援。

Puppet也是易于擴充的。定制軟體包的支援功能和特殊的系統環境配置能夠快速簡單的添加進Puppet的安裝程式中。

3. Puppet的工作模式

Puppet是一個C/S架構的配置管理工具,在中央伺服器上安裝puppet-server軟體包(被稱作Puppet master)。在需要管理的目标主機上安裝puppet用戶端軟體(被稱作Puppet Client)。當用戶端連接配接上Puppet master後,定義在Puppet master上的配置檔案會被編譯,然後在用戶端上運作。每個用戶端預設每半個小時和伺服器進行一次通信,确認配置資訊的更新情況。如果有新的配置資訊或 者配置資訊已經改變,配置将會被重新編譯并釋出到各用戶端執行。也可以在伺服器上主動觸發一個配置資訊的更新,強制各用戶端進行配置。如果用戶端的配置信 息被改變了,它可以從伺服器獲得原始配置進行校正。

4. Puppet的未來

最後,Puppet是一個年輕的工具,仍然處于開發和發展中。Puppet社群快速壯大,并且許多新的想法不斷融入,促使開發、更新和子產品每天都在 呈現。

安裝配置:

1. Puppet在RedHat/CentOS系 統上安裝

Puppet是基于Ruby寫成的,是以安裝前要準備好Ruby環境。在中心的Server上安裝puppet-server包,并運作 puppetmasterd程序;在被管理機上安裝puppet包,并運作puppetd程序。另外,在每台主機上配置好自己的hostname,之後每 台機器要以hostname區分。

1). 安裝ruby環境:

yum install ruby ruby-rdoc

2). 安裝puppet

Server端安裝:(172.16.228.30 puppet.sina.com.cn)

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

yum install puppet-server

chkconfig –level 2345 puppetmaster on

修改hosts,添加下面行:

Vi /etc/hosts

172.16.228.30 puppet.sina.com.cn puppet

172.16.228.29 web1.sina.com.cn web1

用戶端安裝:(172.16.228.29 web1.sina.com.cn)

rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

yum install puppet

chkconfig –level 2345 puppet on

修改hosts,添加下面行:

Vi /etc/hosts

172.16.228.30 puppet.sina.com.cn puppet

172.16.228.29 web1.sina.com.cn web1

3). 啟動puppet

Server端首次運作前,編輯/etc/puppet/manifests/site.pp檔案,内容可以用最基本的:

# Create “/tmp/testfile” if it doesn’t exist.

class test_class {

file { “/tmp/testfile”:

ensure => present,

mode => 644,

owner => root,

group => root

}

}

# tell puppet on which client to run the class

node web1.sina.com.cn {

include test_class

}

啟動Server端:

service puppetmaster start

啟動用戶端:

/etc/init.d/puppet once -v

這時客戶機會去連server,但是由于連接配接是在ssl上的,而Server還沒有sign過用戶端的cert,客戶機被斷開。

到Server端執行:puppetca -list,會顯示等待簽名的用戶端的主機名,執行:puppetca -sign <用戶端主機名> 即可為其簽名。

在Server端為web1.sian.com.cn授權:

puppetca -list

web1.sian.com.cn

puppetca -sign web1.sian.com.cn

這時再到客戶機上啟動puppetd,即可看到客戶在正常地連接配接server,并且應用Server上為用戶端定制的配置政策。

啟動用戶端:

/etc/init.d/puppet once -v

4). 測試:

也可以将日志直接列印到終端上進行測試:

Server端:puppetmasterd -d –no-daemonize -v –trace

用戶端:puppetd –test –trace –debug

2. puppet配置檔案

主配置檔案(puppet.conf):

1). 配置檔案命名空間:

main 通用配置選項

puppetd 用戶端配置選項

puppetmasterd 服務端配置選項

2). main命名空間選項:

confdir 配置檔案目錄,預設在/etc/puppet

vardir 動态資料目錄,預設在/var/lib/puppet

logdir 日志目錄,預設在/var/log/log

rundir puppet PID目錄,預設在/var/run/puppet

statedir state目錄,預設在$vardir/state

statefile state檔案,預設在$statedir/state.yaml

ssldir SSL證書目錄,預設在$vardir/ssl

trace 發生錯誤時顯示跟蹤資訊,預設false

filetimeout 檢測配置檔案狀态改變的時間周期,機關秒,預設15秒

syslogfacility 指定syslog功能為user級,預設為daemon級

3). puppetmasterd命名空間選項:

user 背景程序執行的使用者

group 背景程序執行的組

mainfestdir mainfests檔案存儲目錄,預設為$confdir/mainfests

mainfest mainfest站點檔案的名字,預設為site.pp

bindaddress 背景程序綁定的網卡位址接口

masterport 背景程序執行的端口,預設為8140

4). puppet命名空間選項:

server puppet puppet伺服器名,預設為puppet

runinterval seconds puppet應用配置的時間間隔,預設1800秒(0.5小時)

puppetdlockfie file puppet lock檔案位置,預設$statedir/puppetdlock

puppetport port 背景程序執行的端口,預設8139

檔案服務配置檔案(fileserver.conf):

[files]

path /var/lib/puppet/files

allow 121.14.1.*

allow 60.28.228.0/24

allow *.house.sina.com.cn

deny *.sina.com.cn

path定義檔案存放路徑,通過allow/deny來控制通路權限。

3. puppet指令集

1). puppet 用于執行使用者所寫獨立的mainfests檔案

# puppet -l /tmp/manifest.log manifest.pp

2). puppetd 運作在被管理主機上的用戶端程式

# puppetd –server puppet.leju.com

3). puppetmasterd 運作在管理機上的伺服器程式

# puppetmasterd

4). puppetca puppet認證程式

# puppetca -l

pclient.leju.com

# puppetca -s pclient.leju.com

5). puppetrun 用于連接配接用戶端,強制運作本地配置檔案

# puppetrun -p 10 –host host1 –host host2 -t remotefile -t webserver

6). filebucket 用戶端用于發送檔案到puppet file bucket的工具

# filebucket -b /tmp/filebucket /my/file

7). ralsh 轉換配置資訊到puppet配置代碼

# ralsh user luke

user { ‘luke’:

home => ‘/home/luke’,

uid => ‘100′,

ensure => ‘present’,

comment => ‘Luke Kanies,,,’,

gid => ‘1000′,

shell => ‘/bin/bash’,

groups => ['sysadmin','audio','video','puppet']

}

8). puppetdoc 列印puppet參考文檔

# puppetdoc -r type > /tmp/type_reference.rst

# puppetdoc –outputdir /tmp/rdoc –mode rdoc /path/to/manifests

# puppetdoc /etc/puppet/manifests/site.pp

---------------------------------------------------------------------------------------------------------------------

一 puppet簡介

       puppet是一種Linux、Unix平台的集中配置管理系統,使用自有的puppet描述語言,可管理配置檔案、使用者、cron任務、軟體包、系統服務等。puppet把這些系統實體稱之為資源,puppet的設計目标是簡化對這些資源的管理以及妥善處理資源間的依賴關系。

  puppet采用C/S星狀的結構,所有的用戶端和一個或幾個伺服器互動。每個用戶端周期的(預設半個小時)向伺服器發送請求,獲得其最新的配置資訊,保證和該配置資訊同步。每個puppet用戶端每半小時(可以設定)連接配接一次伺服器端, 下載下傳最新的配置檔案,并且嚴格按照配置檔案來配置伺服器. 配置完成以後,puppet用戶端可以回報給伺服器端一個消息. 如果出錯,也會給伺服器端回報一個消息.

二  puppet安裝測試環境介紹

     虛拟機vmware   系統centos5.5

    伺服器端   192.168.2.113    centos113.sdj

    用戶端       192.168.2.114   centos114.sdj

   安裝puppet前的準備

  在服務端和用戶端都執行以下指令

   添加puppet使用者   # groupadd puppet

                              # useradd  -g puppet -s /bin/false -M puppet  

修改Host檔案;# echo  "192.168.2.113 centos113.sdj">> /etc/hosts

                        # echo  "192.168.2.114 centos114.sdj">> /etc/hosts

 安裝ruby        #yum -y install ruby

安裝Facter    是用來搜集目前安裝系統的環境變量資訊的

    # wgethttp://projects.puppetlabs.com/attachments/download/1101/facter-1.5.8.tar.gz

    # tar xf facter-1.5.8.tar.gz  && cd facter-1.5.8/ 

    # ruby  install.rb && cd  ~ 

   # facter    執行這個指令就可以看到facter擷取到的變量名和内容

現在開始安裝puppet

# wgethttp://projects.puppetlabs.com/attachments/download/1114/puppet-2.6.1.tar.gz  

# tar xzf puppet-2.6.1.tar.gz && cd puppet-2.6.1

# ruby  install.rb

# mkdir -p /etc/puppet &&cp  conf/redhat/*  /etc/puppet/ && cd ~

驗證安裝成功

# puppet master 

# ps -ef|grep  puppet |grep -v grep

puppet    3247    1  0 23:02 ?        00:00:00 /usr/bin/ruby /usr/bin/puppet master

#   kill  1871

---------------------------------

接下來配置伺服器端

将puppetmasterd設定為服務,并自啟動

# cp /etc/puppet/server.init  /etc/init.d/puppetmasterd  

#  chmod  755 /etc/init.d/puppetmasterd  

# chkconfig --add puppetmasterd  

# chkconfig --level 35  puppetmasterd  on  

啟動服務  #service  puppetmasterd  start

檢視是否打開8140端口   # netstat -tnl

Proto Recv-Q Send-Q Local Address               Foreign Address             State     

tcp        0      0 0.0.0.0:8140                0.0.0.0:*                   LISTEN

防火牆和端口設定。puppet伺服器端預設使用8140端口監聽服務,需要在iptables上開啟該端口。                                                 

     iptables  -A INPUT  -p tcp --dport 8140 -j ACCEPT                                                

     請在/etc/sysconfig/iptables 中加入上文的規則,并重新開機iptables。 

審批證書

用戶端申請證書

在用戶端centos114執行   #  puppetd --test  --server centos113.sdj

warning: peer certificate won't be verified in this SSL session                                              

     info: Caching certificate for ca                                              

     warning: peer certificate won't be verified in this SSL session                                              

     warning: peer certificate won't be verified in this SSL session                                              

     info: Creating a new SSL certificate request for centos114.sdj                                              

     info: Certificate Request fingerprint (md5): C5:5A:5E:A9:04:44:CF:A7:F3:46:14:6A:C7:C1:24:C8                                               

     warning: peer certificate won't be verified in this SSL session                                        

     warning: peer certificate won't be verified in this SSL session                                        

     warning: peer certificate won't be verified in this SSL session                                        

     Exiting; no certificate found and waitforcert is disabled   

出現上述類似資訊說明成功

伺服器接受申請  

在伺服器端centos113執行 # puppetca  --list

   centos114.sdj

準許目前證書  # puppetca  -s centos114.sdj

notice: Signed certificate request for centos114.sdj

     notice: Removing file Puppet::SSL::CertificateRequest centos114.sdj at '/var/lib/puppet/ssl/ca/requests/centos114.sdj.pem' 

用戶端取回已經通過審批的證書 

用戶端執行 #  puppetd --test  --server centos113.sdj

重新審批舊機器的新證書。

當申請到證書以後我們對比下這兩個檔案,他們的MD5值是一樣的

伺服器端[[email protected] ~]# md5sum /var/lib/puppet/ssl/ca/signed/centos114.sdj.pem 

用戶端 [[email protected] ~]# md5sum /var/lib/puppet/ssl/certs/centos114.sdj.pem

功能測試

在伺服器端建立一個/etc/puppet/manifests/site.pp檔案,大意是在/tmp下建立caotest.txt測試檔案。

[[email protected] ~]# vi /etc/puppet/manifests/site.pp

node default {                                           

     file {"/tmp/caotest.txt":                   #這是檔案路徑名,後面是冒号                   

     content=>"I'm Caotest PUPPET"; }                   #這是檔案的内容 後面是分号                     

     }              #初次建立這個檔案需要重新開機服務

# service puppetmasterd restart

在用戶端執行指令

# puppetd --test  --server centos113.sdj

# ls -l /tmp       檢視/tmp目錄下是否有caotest.txt檔案如果有說明測試成功

用戶端設定守護程序

# puppetd --server caotest-1.cym --verbose --waitforcert 60

 # --server 告訴它master結點的ip,--waitforcert是說每60秒去server檢查,--verbose是可選的輸出備援資訊

Puppet集中配置管理系統

http://liuyu.blog.51cto.com/183345/d-24

PUPPET + SVN + FUNC 實作半自動化集中控制

http://learywolf.blog.51cto.com/612420/528226

http://www.doc88.com/p-540550023314.html

繼續閱讀