ansible實現自動化運維

簡介

  • 功能強大的自動化運維工具,集合了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:可實現多級指揮;


基本架構

wKiom1NUVw7QQE51AAOihDCa3N4276.jpg


安裝方法

# rpm包安裝,可在pkgs.org或rpmfind.net上找尋rpm包
yum --nogpgcheck localinstall ansible-1.5.4-1.el6.noarch.rpm
# 或源碼編譯安裝
yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible

配置文件

  • /etc/ansible/ansible.cfg # 主配置文件,可不修改

  • /etc/ansible/hosts # 添加需操作的主機目錄


查看各模塊的使用方法

ansible-doc [options] [modules]
# 主要選項有:
-l或--list # 列出可用的模塊
-s或--snippet #顯示指定模塊的簡略使用方法


使用格式

ansible <host-pattern> [-f forks] [-m module] [-a args]
host-pattern # 可以是all,或者配置文件中的主機組名
-f forks # 指定並行處理的進程數
-m module # 指定使用的模塊,默認模塊爲command
-a args # 指定模塊的參數


使用案例

ansible all -m ping # ping操作
ansible webservers -a ‘date’ (可省略-m command) # 執行date命令
ansible dbservers -m copy -a “src=/root/ansible.rpm dest=/tmp/” # 複製文件
ansible all -m cron -a ‘name=”custom job” minute=*/3 day=* month=* weekday=* job=”/usr/sbin/ntpdate 172.16.0.1”’ # 配置crontab任務
ansible all -m group -a “gid=306 system=yes name=mysql” # 增加組和用戶
ansible corosync -m yum -a “name=pacemaker state=present” # 通過yum安裝程序
ansible all -m service -a “state=started name=httpd enabled=yes” # 配置服務開啓啓動
# 或利用playbook配置文件yaml批量執行任務:
編寫playbook文件,如test.yaml
執行:ansible-playbook test.yaml
注:所謂playbook(俗稱“劇本”),就是將批量任務以yaml格式寫入文件中,通過ansible-playbook命令一起執行


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

wKiom1NUWD3S_EiHAA15a46_8kc191.jpg



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章