1.1自動化運維介紹
一 認識運維自動化運維
1)傳統運維效率低,大多工作人爲完成
2)傳統運維工作繁瑣,容易出錯
3)傳統運維每日重複做相同的事情
4)傳統運維沒有標準化流程
5)傳統運維的腳本繁多,不能方便管理
6)自動化運維就是要解決上面所有的問題
二 常見自動化運維工具
1)Puppet (www.puppetlabs.com)
基於rubby開發,c/s架構,支持多平臺,可管理配置文件、用戶、cron任務、軟件包、系統服務等。分爲社區版(免費)和企業版(收費),企業版支持圖形化配置。
2)Saltstack (中國用戶組www.saltstack.cn)
基於Python開發,c/s架構,支持多平臺,比puppet輕量,在遠程執行命令時非常快捷,配置和使用比puppet容易,能實現puppet幾乎所有的功能。
3)Ansible (www.ansible.com)
更加簡潔的自動化運維工具,不需要在客戶端上安裝agent,基於Python開發。可以實現批量操作系統配置、批量程序的部署、批量執行命令。
1.2 Puppet安裝準備工作
一 Puppet安裝和配置-準備工作
1) 兩臺機器:172.7.15.106(服務端) 172.7.15.111(客戶端)
2) 兩臺機器關閉selinux,清空iptables規則,並保存,設置hostname
3) 106上 hostname web9.aming.com,vi /etc/sysconfig/network 定義hostname
4) 111上hostname web10.aming.com,vi /etc/sysconfig/network 定義hostname
5) 編輯hosts文件,106和111全部添加:
172.7.15.106 web9.aming.com
172.7.15.111 web10.aming.com
6) 兩臺機器安裝ntpdate,並建立自動同步時間的任務計劃:
yum install -y ntpdate
cront -e //加入
*/10 * * * * ntpdate time.windows.com > /dev/null 2>&1
1.3 Puppet安裝和配置-安裝服務端
1)服務端106上:
安裝puppet源 rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"
安裝服務端程序 yum install -y puppet-server
啓動服務 service puppetmaster start
開機啓動 chkconfig puppetmaster on
2) 客戶端111上:
安裝puppet源 rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"
安裝客戶端程序 yum install -y puppet
修改配置文件 vi /etc/puppet/puppet.conf //在[agent]下面添加
listen = true
server = web9.aming.com
runinterval = 30 //主動更新,每隔30秒
啓動服務 service puppet start
開機啓動 chkconfig puppet on
1.4 Puppet配置證書
一 Puppet安裝和配置-配置認證
1)服務端查看客戶端證書列表
puppet cert list --all //如果簽發的證書,會在本行最前面帶一個+
2)客戶端上生成ssl證書
puppet agent --test --server web9.aming.com 如果出現 no certificate .....刪除掉/var/lib/puppet/ssl/下的所有文件
3) 服務端簽發指定客戶端證書
puppet cert --sign web10.aming.com
4) 服務端可以刪除指定客戶端證書
puppet cert clean web10.aming.com
5) 刪除所有證書
puppet cert clean --all
1.5 Puppet配置自動簽發證書
一 Puppet安裝和配置-配置自動簽發證書
1)服務端刪除客戶端證書 puppet cert clean --all
2) 客戶端刪除ssl相關文件rm -rf /var/lib/puppet/ssl/*
3) 服務端創建自動簽發的配置文件vim /etc/puppet/autosign.conf //加入如下內容
*.aming.com vim /etc/puppet/puppet.conf //在main下加入一行 autosign = true
4) 服務端重啓puppetmaster服務 /etc/init.d/puppetmaster restart
5) 客戶端重啓puppet服務 /etc/init.d/puppet restart
6) 服務端 puppet cert list --all //可以看到web10.aming.com已經簽名
7)如果客戶端不重啓puppet服務,也可以通過命令來自動簽發 puppet agent --test --server web9.aming.com
1.6 Puppet測試證書
Puppet安裝和配置-測試證書
1)服務端編輯配置文件
vim /etc/puppet/manifests/site.pp //添加如下內容
node default{
file {"/tmp/123.txt":
content =>"test,test";
}}
說明:該配置文件後面還會講到,如果不配置該文件,則客戶端不會同步任何數據
2)客戶端上稍等一會兒(每隔30秒會自動執行服務端上的任務),或者直接命令行
puppet agent --test --server web9.aming.com
這樣在客戶端的/tmp/下會有個123.txt文件,內容爲test,test
1.7 Puppet配置模塊(一)
Puppet安裝和配置-定義模塊管理
1)模塊是puppet的配置單元,模塊裏面會包含類和資源。同步文件、遠程執行命令、cron等叫做資源,都是通過模塊來實現的。下面我們來寫一個模塊
2)服務端創建目錄 mkdir /etc/puppet/modules/testm這個目錄名字也作爲模塊名字,然後繼續創建模塊對應的子目錄 mkdir /etc/puppet/modules/testm/{files,manifests,templates}files裏面存文件,可以留空,manifests裏面是配置文件,templates裏面是模塊文件可以爲空
3)創建配置文件 vim /etc/puppet/modules/testm/manifests/init.pp //內容爲
class testm {
file { "/tmp/2.txt":
owner=>"root",
group=>"root",
mode=>0400,
source=>"puppet://$puppetserver/modules/testm/1.txt"
}}
說明:類名字也叫做testm,類下面定義了一個資源file,文件名字叫做/tmp/2.txt,owner,group,mode定義文件的屬主,屬組以及權限,source定義了這個文件從哪裏獲取。$puppetserver一會也要定義一下,這裏指的是puppet server服務器上/etc/puppet/modules/testm/files/1.txt
1.8 Puppet配置模塊(二)
Puppet安裝和配置-定義模塊管理
下面繼續定義一個很關鍵的配置文件
vim /etc/puppet/manifests/site.pp //內容如下
$puppetserver='web9.aming.com'
node 'web10'{
include testm
}
說明:$puppetserver定義服務端的主機名,node後面爲客戶端的主機名,這裏面定義該客戶端要加載的模塊
配置完成後,在客戶端執行命令
puppet agent --test --server=web9.aming.com //如果客戶端上啓動了puppet服務,不用執行這命令,它也會自動同步
1.9 Puppet文件和目錄資源
Puppet安裝和配置-文件或目錄資源
上面的模塊其實只同步了一個文件而已,那麼要想同步一個目錄如何做?我們可以通過實現同步一個目錄來做一個包發不繫統。比如在一臺機器上編譯安裝好了Apache,那麼就可以通過這樣的模塊把這個Apache目錄整個分發到其他機器上。
模塊配置文件如下:
class apache {
file{"usr/local/apache2":
owner=>"root",
group=>"root",
source=>"puppet://$puppetserver/modules/apache/apache2",
recurse=>true,
purge=>true
}
}
其中recurse=>true這個參數很關鍵,它表示遞歸的意思,沒有這個不能同步目錄。purge參數可以保證當服務端刪除某個文件,客戶端可以跟着刪除。
參考:http://blog.chinaunix.net/uid-20639775-id-3314583.html
2.0 Puppet遠程執行命令
Puppet安裝和配置-遠程執行命令
exec {"123":
unless=>"test -f /tmp/aminglinux.txt",
path=>["/bin","/sbin/","/usr/bin/","/usr/sbin/"],
command=>"touch /tmp/aminglinux.txt"
}
說明:123只是作爲該資源的一個名字,unless後面的命令作爲一個條件,當條件成立時,不會執行下面的命令,如果想要條件成立時,執行下面的命令,用onlyif。要注意的是,我們一定要給執行的這條命令加一個條件,使用unless就可以,必須滿足這個條件才能執行命令,否則這個命令會一直執行,不太妥當。
參考:http://puppet.wikidot.com/exec
2.1 Puppet配置cron
Puppet安裝和配置-任務計劃
cron {"aming1":
command=>"/sbin/ntpdate time.wiundows.com",
user=>"root",
minute=>"*/10",
#ensure=>"absent"
}
說明:分時日月周分別對應puppet裏面的minute,hour,monthday,month,weekday,ensure設置爲absent爲刪除該任務,如果不設置該行則爲建立
參考:http://puppet.wikidot.com/cron