簡介
功能強大的自動化運維工具,集合了puppet、cfengine、chef、func、fabric等功能;
能實作多節點釋出和遠端任務執行等功能,可滿足日常自動化運維需求;
特性
No agents:不需要在被管控主機上安裝任意用戶端;
No server:無伺服器端,使用時直接運作指令即可;
Modules in any languages:基于子產品工作,可使用任意語言開發子產品
YAML,not code:使用yaml語言定制劇本playbook;
SSH by default:基于SSH工作;
Strong multi-tier solution:可實作多級指揮;
基本架構
<a href="http://s3.51cto.com/wyfs02/M00/24/99/wKiom1NUVw7QQE51AAOihDCa3N4276.jpg" target="_blank"></a>
安裝方法
1
2
3
4
5
6
7
8
9
10
<code># rpm包安裝,可在pkgs.org或rpmfind.net上找尋rpm包</code>
<code>yum --nogpgcheck localinstall ansible-1.5.4-1.el6.noarch.rpm</code>
<code># 或源碼編譯安裝</code>
<code>yum -y </code><code>install</code> <code>python-jinja2 PyYAML python-paramiko python-babel python-crypto</code>
<code>tar</code> <code>xf ansible-1.5.4.</code><code>tar</code><code>.gz</code>
<code>cd</code> <code>ansible-1.5.4</code>
<code>python setup.py build</code>
<code>python setup.py </code><code>install</code>
<code>mkdir</code> <code>/etc/ansible</code>
<code>cp</code> <code>-r examples/* </code><code>/etc/ansible</code>
配置檔案
/etc/ansible/ansible.cfg # 主配置檔案,可不修改
/etc/ansible/hosts # 添加需操作的主機目錄
檢視各子產品的使用方法
<code>ansible-doc [options] [modules]</code>
<code># 主要選項有:</code>
<code>-l或--list </code><code># 列出可用的子產品</code>
<code>-s或--snippet </code><code>#顯示指定子產品的簡略使用方法</code>
使用格式
<code>ansible <host-pattern> [-f forks] [-m module] [-a args]</code>
<code>host-pattern </code><code># 可以是all,或者配置檔案中的主機組名</code>
<code>-f forks </code><code># 指定并行處理的程序數</code>
<code>-m module </code><code># 指定使用的子產品,預設子產品為command</code>
<code>-a args </code><code># 指定子產品的參數</code>
使用案例
11
<code>ansible all -m </code><code>ping</code> <code># ping操作</code>
<code>ansible webservers -a ‘</code><code>date</code><code>’ (可省略-m </code><code>command</code><code>) </code><code># 執行date指令</code>
<code>ansible dbservers -m copy -a “src=</code><code>/root/ansible</code><code>.rpm dest=</code><code>/tmp/</code><code>” </code><code># 複制檔案</code>
<code>ansible all -m </code><code>cron</code> <code>-a ‘name=”custom job” minute=*</code><code>/3</code> <code>day=* month=* weekday=* job=”</code><code>/usr/sbin/ntpdate</code> <code>172.16.0.1”’ </code><code># 配置crontab任務</code>
<code>ansible all -m group -a “gid=306 system=</code><code>yes</code> <code>name=mysql” </code><code># 增加組和使用者</code>
<code>ansible corosync -m yum -a “name=pacemaker state=present” </code><code># 通過yum安裝程式</code>
<code>ansible all -m service -a “state=started name=httpd enabled=</code><code>yes</code><code>” </code><code># 配置服務開啟啟動</code>
<code># 或利用playbook配置檔案yaml批量執行任務:</code>
<code>編寫playbook檔案,如</code><code>test</code><code>.yaml</code>
<code>執行:ansible-playbook </code><code>test</code><code>.yaml</code>
<code>注:所謂playbook(俗稱“劇本”),就是将批量任務以yaml格式寫入檔案中,通過ansible-playbook指令一起執行</code>
ansible實用配置案例
幾點重要概念:
playbook的組成:playbook是由一個或多個“play”組成的清單,可以讓它們聯同起來按事先編排的機制執行;所謂task無非是調用ansible的一個module,而在子產品參數中可以使用變量;子產品執行是幂等的,這意味着多次執行是安全的,因為其結果均一緻;
執行模型:task list中的各任務按次序逐個在hosts中指定的所有主機上執行,即在所有主機上完成第一個任務後再開始第二個。在順序運作某playbook時,如果中途發生錯誤,所有已執行任務都将復原,是以,在修改playbook後重新執行一次即可;
task組成:每個task都應該有其name,用于playbook的執行結果輸出,建議其内容盡可能清晰地描述任務執行步驟。如果未提供name,則action的結果将用于輸出;
notify指定handler的執行機制:“notify”這個action可用于在每個play的最後被觸發,在notify中列出的操作稱為handler,僅在所有的變化發生完成後一次性地執行指定操作;
具體配置檔案(corosync.yaml)
了解此檔案有助于後期利用ansible自動化安裝corosync
<a href="http://s3.51cto.com/wyfs02/M01/24/99/wKiom1NUWD3S_EiHAA15a46_8kc191.jpg" target="_blank"></a>
本文轉自 xxrenzhe11 51CTO部落格,原文連結:http://blog.51cto.com/xxrenzhe/1400023,如需轉載請自行聯系原作者