OS Provisioning:在運維工作中,如果我們要給上百臺或者上千臺服務器安裝操作系統該怎麼辦?總不能拿着光盤或者U盤一個一個裝吧?自動化安裝操作系統的軟件有:PXE、Cobbler;
OS Config:如果我們要在這上百臺、上千臺服務器上做相同的配置該怎麼辦呢?又是一件麻煩事,實現這種功能的軟件有:cfengine、puppet、chef、saltstack;
Deployment:能夠讓我們在若干主機上同時執行某些命令,比如探測主機是否都在線,讓自己所管理的主機同時執行‘date’命令等,實現軟件:func、fabric;
ansible:能夠幫我們實現OS config+Deployment功能,ansible不需要在被控端安裝任何組件,因此不會佔用被控端的系統資源,而且也不會在主控端佔用系統資源,只是做爲一個可執行程序來執行一條命令就可以幫我們完成對若干臺主機下指令了,但是ansible沒有puppt那麼自動,需要我們臨時寫一些tast list(又稱爲playbook,劇本);
ansible的安裝配置:
主控端 | 172.16.254.139 | |
客戶端1 | 172.16.254.140 | node1.lyd.com |
客戶端2 | 172.16.254.141 | node2.lyd.com |
1、使用yum安裝ansible,因爲ansible會有依賴這些包:python-jinja2 PyYAML python-paramiko python-babel python-crypto,如果光盤中沒有這些包,可以去www.pkgs.org搜索下載即可
[root@localhost ~]# yum -y install ansible-1.5.4-1.el6.noarch.rpm
2、編輯/etc/ansible/hosts文件,在末行模式下使用查找替換註釋掉所有事例信息,並手動添加需要控制的客戶端主機地址
:%s/^\([^[:space:]#]\)/#\1/g
3、主控端的/etc/hosts文件中要能夠解析兩臺客戶端,而且要與客戶端建立ssh互信
[root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub node1.lyd.com [root@localhost ~]# ssh-copy-id -i .ssh/id_rsa.pub node2.lyd.com
4、測試ansible能否使用及基本語法
使用ansible-doc -l 可以查看absible支持哪些模塊,“ansible-doc -s 模塊名”可以查看模塊有哪些參數可以用,下面介紹比較常用到的幾個模塊
copy模塊:
把主控端/root目錄下的ansible-1.5.4-1.el6.noarch.rpm程序cp到node1、node2節點上
[root@localhost ~]# ansible all -m copy -a "src=/root/ansible-1.5.4-1.el6.noarch.rpm dest=/tmp/"
cron模塊:
在兩個節點上定義一個計劃任務,每隔3分鐘到主控端更新一次時間
[root@localhost ~]# ansible all -m cron -a 'name="custom job" minute=*/3 hour=* day=* month=* weekday=* job="/usr/sbin/ntpdate 172.16.254.139"'
group模塊:
在兩個節點上創建一個mysql系統組
[root@localhost ~]# ansible all -m group -a "gid=306 system=yes name=mysql"
yum模塊:
在兩臺主主機上安裝httpd
[root@localhost ~]# ansible all -m yum -a "state=present name=httpd"
service模塊:
啓動兩個節點的httpd服務,並讓其開機自己啓動
[root@localhost ~]# ansible all -m service -a "state=started name=httpd enabled=yes"
playbook:
playbook是由一個或多個“play”組成的列表。play的主要功能在於將事先歸併爲一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來講,所謂task無非是調用ansible的一個module。將多個play組織在一個playbook中,即可以讓它們聯同起來按事先編排的機制同唱一臺大戲。
playbook需要使用YAML語言進行編寫,那什麼是YAML語言呢?
YAML是一個可讀性高的用來表達資料序列的格式。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822等。Clark Evans在2001年在首次發表了這種語言,另外Ingy dt Net與Oren Ben-Kiki也是這語言的共同設計者。
YAML Ain't Markup Language,即YAML不是XML。不過,在開發的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)。其特性:
YAML的可讀性好;
YAML和腳本語言的交互性好;
YAML使用實現語言的數據類型;
YAML有一個一致的信息模型;
YAML易於實現;
YAML可以基於流來處理;
YAML表達能力強,擴展性好;
使用“ansible-playbook+劇本名”來執行一個編寫好的playbook;
事例:在兩個節點上安裝heartbeat,並啓動
- hosts: webservers remote_user: root tasks: - name: ensure heartbeat latest version yum: name=heartbeat state=present - name: authkeys configure file copy: src=/root/hb_conf/authkeys dest=/etc/ha.d/authkeys - name: authkeys mode 600 file: path=/etc/ha.d/authkeys mode=600 notify: - restart heartbeat - name: ha.cf configure file copy: src=/root/hb_conf/ha.cf dest=/etc/ha.d/ha.cf notify: - restart heartbeat handlers: - name: restart heartbeat service: name=heartbeat state=restarted