1. 程式人生 > >利用puppet實現自動化運維

利用puppet實現自動化運維

工作流程

工作流程:
1)客戶端puppet呼叫facter(facter是通過ssl加密收集及檢測分析客戶端配置資訊的一個工具),facter探測出主機的一些變數,如主機名,記憶體大小,ip地址等。Puppet把這些資訊通過ssl連線傳送到伺服器器端
2)伺服器端的puppetmaster通過facter工具分析檢測客戶端的主機名,然後找到專案主配置檔案mainfest裡面對應的node配置,並對該部分內容進行解析。Facter傳送過來的資訊可以作為變數處理,node牽扯到的程式碼才解析,其他沒牽涉的程式碼不解析,解析分為幾個階段,首先進行語法檢查,如果語法沒錯,就繼續解析,解析的結果生成一箇中間的“虛擬碼”,然後把虛擬碼傳送給客戶端。
3)客戶端接收到虛擬碼,並執行,客戶端把執行的結果傳送給伺服器。
4)伺服器把客戶端的執行結果寫入日誌。

整體思路:

1.搭建NTP伺服器,在所有計算機上同步,搭建DNS伺服器來實現各主機間的通訊(本文件修改hosts檔案)
2.搭建master伺服器,配置puppet主配置檔案
3.搭建client伺服器,配置puppet主配置檔案,在client中向master提交申請,並在master中註冊client
4.在/etc/puppet/modules/某一服務的名稱/manifests路徑下建立4各配置檔案,建立一個測試節點,並將節點載入puppet,使得master伺服器可以通過站點檔案找到其他配置檔案
5.client可以主動拉取資訊,也可以通過master伺服器推送同步

設定NTP伺服器:

rpm -q ntp               //檢視是否安裝NTP

vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8

service ntpd start

搭建puppetmaster

1)規劃伺服器主機名

vim /etc/sysconfig/network
HOSTNAME=master.test.com //根據實際情況修改

根據實際情況搭建DNS伺服器實現各計算機間通過主機名的通訊,本文件通過修改hosts檔案來實現

vim /etc/hosts
192.168
.1.1 master.test.com 192.168.1.2 client.test.com ........

2)同步時間伺服器

ntpdate NTP伺服器的IP

3)安裝compat-readline、ruby、facter、puppet

useradd -s /sbin/nologin puppet
rpm -ivh compat-readline*.rpm  ruby-*.rpm

tar xzf facter-*.tar.gz -C /usr/src
cd /usr/src/facter-*
ruby install.rb

tar xzf puppet-*.tar.gz -C /usr/src
cd /usr/src/puppet-*
ruby install.rb

複製配置檔案模板

cp /usr/src/puppet-*/conf/redhat/filesserver.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/puppet.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/server.init /etc/init.d/puppetmaster
chmod +x /etc/init.d/puppetmaster

修改配置檔案

vim /etc/puppet/puppet.conf
[main]
.......//省略部分
modulepath = /etc/puppet/modules:/usr/share/puppet/modules     //在main模組下手動新增

啟動puppet主程式

/etc/init.d/puppetmaster start

搭建puppetclient(所有客戶端都這麼設定)

與puppetmaster前三個步驟一樣,做一樣的操作,就是設定主機名根據實際情況修改

1)規劃伺服器主機名(略)
2)同步時間伺服器(略)
3)安裝compat-readline、ruby、facter、puppet(略)
複製配置檔案模板

cp /usr/src/puppet-*/conf/redhat/filesserver.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/puppet.conf /etc/puppet
cp /usr/src/puppet-*/conf/redhat/client.init /etc/init.d/puppetclient
chmod +x /etc/init.d/puppetclient

修改配置檔案

vim /etc/puppet/puppet.conf
[main]
....../省略部分
server = master.test.com                  //在main模組最後手動填入puppet主伺服器的主機名

4)申請與註冊
Client端:

puppet agent –server=master.test.com –no-daemonize –verbose //向主伺服器申請

這個指令的作用是將puppet agent不用守護程序的模式啟動,好處是能看到與伺服器端的通訊及證書籤名的過程,方便debug。 預設puppet每2分鐘向伺服器端申請一次簽名直到獲得伺服器端發來的經過簽名的證書才start agent 服務

Master端:

puppet cert sign –all //註冊所有申請的客戶端

配置例項

Master端:

1)建立需要的目錄(這裡以自動修改sshd服務埠號為例)

mkdir  -p  /etc/puppet/modules/ssh/{manifests,templates,files}
mkdir  /etc/puppet/manifests/nodes
mkdir /etc/puppet/modules/ssh/files/ssh
chown  -R  puppet  /etc/puppet/modules/

manifests:此目錄為存放配置檔案的目錄,裡面必須包含一個init.pp的檔案,這是該模組的入口檔案匯入一個模組的時候,會從init.pp開始執行。可以把所有的程式碼都寫道init.pp裡面,也可以分成多個pp檔案,init再去包含其他檔案
定義class類名的時候必須是ssh,這樣能實現呼叫

files目錄是該模組的檔案釋出目錄,puppet提供一個檔案分發制/etc/ssh/sshd_conf

templates目錄包含erb模版檔案

2)建立模組配置檔案install.pp

vim  /etc/puppet/modules/ssh/manifests/install.pp

class ssh::install{
package{ "openssh":
        ensure => present
        }
}

3)建立模組配置檔案config.pp

vim /etc/puppet/modules/ssh/manifests/config.pp

class ssh::config{
file { "/etc/ssh/sshd_config":
        ensure => present,
        owner =>"root",
        group =>"root",
        mode => "0600",
        source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",
        require => Class["ssh::install"],
        notify => Class["ssh::service"],

}
}

4)建立service.pp

vim /etc/puppet/modules/ssh/manifests/service.pp

class ssh::service {
        service {"sshd":
                ensure => running,
                hasstatus =>true,
                hasrestart =>true,
                enable =>true,
                require =>Class["ssh::config"]
}
}

5)建立模組主配置檔案,將以上配置檔案載入進去,輸入以下資訊

vim /etc/puppet/modules/ssh/manifests/init.pp

class ssh{
        include ssh::install,ssh::config,ssh::service
}

6)建立伺服器ssh統一維護檔案

cp /etc/ssh/sshd_config  /etc/puppet/modules/ssh/files/ssh/
chown puppet /etc/puppet/modules/ssh/files/ssh/sshd_config

7)建立測試節點配置檔案,並將ssh載入進去

vim /etc/puppet/manifests/nodes/ssh.pp

node 'client1.test.com'{
        include ssh
}
......省略N臺Client

8)將測試節點載入puppet,即修改site.pp

vim /etc/puppet/manifests/site.pp

import "nodes/ssh.pp"

9)修改伺服器端維護的sshd_config配置檔案

vim /etc/puppet/modules/ssh/files/ssh/sshd_config
Port 1122

/etc/init.d/puppetmaster restart

實現效果
1)客戶端主動拉取同步資訊

puppet agent -t

2)伺服器主動推送同步

Client端配置

vim /etc/puppet/puppet.conf

listen = true  //使puppet監聽8139埠
vim /etc/puppet/auth.conf

path /
allow *     //在path / 模組下新增,允許任何伺服器推送

/etc/init.d/puppetclient start //在客戶端上啟動服務

Master推送同步:

puppet kick client1.test.com