1、簡介python
ansible是新出現的自動化運維工具,基於Python開發,集合了衆多運維工具(puppet、cfengine、chef、func、fabric)的優勢,實現了批量系統配置、批量程序部署、批量運行命令等功能。ansible是基於模塊工做的,自己沒有批量部署的能力。真正具備批量部署的是ansible所運行的模塊,ansible只是提供一種框架。主要包括:nginx
(1)、鏈接插件connection plugins:負責和被監控端實現通訊;shell
(2)、host inventory:指定操做的主機,是一個配置文件裏面定義監控的主機;bash
(3)、各類模塊核心模塊、command模塊、自定義模塊;服務器
(4)、藉助於插件完成記錄日誌郵件等功能;框架
(5)、playbook:劇本執行多個任務時,非必需可讓節點一次性運行多個任務。運維
2、特性ssh
(1)、no agents:不須要在被管控主機上安裝任何客戶端;async
(2)、no server:無服務器端,使用時直接運行命令便可;工具
(3)、modules in any languages:基於模塊工做,可以使用任意語言開發模塊;
(4)、yaml,not code:使用yaml語言定製劇本playbook;
(5)、ssh by default:基於SSH工做;
(6)、strong multi-tier solution:可實現多級指揮。
3、Ansible配置
目前在ansible安裝在虛擬機上,地址爲20.0.9.40, 密碼爲111111
Ansible的操做路徑爲/etc/ansible/playbooks
(1) SSH免密鑰登陸設置
## 生成公鑰/私鑰
# ssh-keygen -t rsa -P ''
## 寫入信任文件(將/root/.ssh/id_rsa_storm1.pub分發到其餘服務器,並在全部服務器上執行以下指令):
# cat /root/.ssh/id_rsa_storm1.pub >> /root/.ssh/authorized_keys
# chmod 600 /root/.ssh/authorized_keys將公鑰重定向追加到authorized_keys中,內容以下:
## 主機組定義
(2) 配置主機組 /etc/ansible/playbooks/hosts
配置完主機組以後,能夠使用ansible giotest –m ping, 測試是否配置成功。
主機組配置方法:
顯示pong,證實配置成功,能夠鏈接到節點。
使用[]來定義主機組名,使用ansible_ssh_host定義須要部署的節點地址。
方括號[]中是組名,用於對系統進行分類,便於對不一樣系統進行個別的管理。
把一個組做爲另外一個組的成員:
能夠把一個組做爲另外一個組的子成員,以及分配變量給整個組使用. 這些變量能夠給 /usr/bin/ansible-playbook 使用,但不能給 /usr/bin/ansible 使用:
[atlanta]
host1
host2
[raleigh]
host2
host3
[southeast:children]
atlanta
raleigh
4、經常使用模塊簡介
目前在ansible安裝在虛擬機上,地址爲20.0.9.40, 密碼爲111111
目錄結構
[root@root ~]# cd /etc/ansible/playbooks
[root@root playbooks]# ls
bio common file gio sn vars vio
common/ 目錄爲配置部署的公共目錄,爲lustre的主要裝機流程。
bio/ 爲bio節點配置部署的目錄
gio/ 爲gio節點配置部署的目錄
sn/ 爲sn 節點配置部署的目錄
file/ 爲配置部署的主要配置文件目錄
vio/ 爲vio節點配置部署的目錄
例:使用ansible爲gio節點安裝IBA驅動,yml文件在目錄/etc/ansible/playbooks/common
ansible-playbook install_IBA.yml --extra-vars 「hosts=gio」
使用ansible爲gio節點安裝rdac,yml文件在目錄/etc/ansible/playbooks/common
ansible-playbook install install_rdac.yml --extra-vars 「hosts=gio」
ansible-playbook 爲ansible劇本的執行命令,後面跟須要執行的yml文件, --extra-vars定義須要執行的主機組
查看ansible的全部模塊
#ansible-doc -l
查看模塊命令的具體使用方法
#ansible-doc -s user(添加模塊名)
查看遠程主機登錄信息
#ansible giotest -m command -a "uptime"
file模塊容許更改用戶及權限
ansible giotest -m file -a "dest=/srv/foo/a.txt mode=600"
使用file模塊建立目錄,相似於mkdir -p
ansible giotest -m file -a "dest=/path/to/c mode=755 owner=root group=root state=directory"
使用file模塊刪除文件或者目錄
ansible giotest -m file -a "dest=/path/to/c state=absent"
查看遠程主機的一些基本信息
#ansible giotest -m setup
測試遠程主機的運行狀態
#ansible giotest -m ping
查看遠程主機的特定進程也可將shell換成raw
#ansible storm_cluster -m shell -a "ps -ef | grep httpd"
#ansible storm_cluster -m raw -a "pa -ef | grep httpd"
遠程文件信息查看
#ansible storm_cluster -m command -a "ls -al /tmp/a.txt"
在遠程主機建立目錄
#ansible storm_cluster -m file -a "path=/tmp/test.txt state=directory"
遠程文件符號連接刪除
#ansible storm_cluster -m file -a "path=/tmp/a.txt state=absent"
將本地文件「/etc/ansible/ansible.cfg」複製到遠程服務器
#ansible storm_cluster -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644"
重啓主機組的全部主機,每次重啓10臺
#ansible storm_cluster -a "/sbin/reboot/" -f 10
使用shell模塊在遠程主機執行命令
#ansible storm_cluster -m shell -a "echo $TERM"
file模塊容許更改文件的用戶及權限
#ansible storm_cluster -m file -a "dest=/tmp/test.sh mode=600 "
建立一個新的用戶,查看並刪除
#ansible storm_cluster -m command -a "useradd -s /sbin/nologin -M user1"
#ansible storm_cluster -m command -a "id user1"
#ansible storm_cluster -m command -a "userdel user1"
後臺執行命令的最大時間是1800s即30分鐘,-p每60s檢查下狀態默認15s
ansible all -B 1800 -p 60 -a "/usr/bin/long_running_operation --do-stuff"
蒐集網卡信息
ansible all -m setup -a "filter=ansible_eth[0-2]"
=====================================================================
管理軟件包
config_file:yum的配置文件
disable_gpg_check:關閉gpg_check
確保rpm包已經安裝,但不更新
#ansible storm_cluster -m yum -a "name=python state=present"
確保安裝包到一個特定的版本
#ansible storm_cluster -m yum -a "name=python-2.7 state=present"
確保一個軟件包是最新版本
#ansible storm_cluster -m yum -a "name=python state=latest"
確保一個軟件包沒有被安裝
#ansible storm_cluster -m yum -a "name=python state=absent"
安裝httpd,啓動,並檢查進程
#ansible storm_cluster -m yum -a "name=httpd state=installed"
#ansible storm_cluster -m service -a "name=httpd state=started"
#ansible storm_cluster -m shell -a "ps -ef |grep httpd"
======================================================================
服務管理
確保storm_cluster組全部主機的httpd是啓動的
ansible storm_cluster -m service -a "name=httpd state=started"
重啓storm_cluster組全部主機的httpd服務
ansible storm_cluster -m service -a "name=httpd state=restarted"
確保storm_cluster組全部主機的httpd是關閉的
ansible storm_cluster -m service -a "name=httpd state=stopped"
啓動storm_cluster組全部主機的nginx服務,確保開機時啓動
ansible storm_cluster -m service -a "name=nginx state=started enabled=yes"
=====================================================================
蒐集系統信息
搜索主機的全部信息
#ansible all -m setup
蒐集和內存相關的信息
#ansible all -m setup -a "filter=ansible_*_mb"
===============================================================================
後臺運行
長時間運行的操做能夠放到後臺執行,ansible會檢查任務的狀態,在主機執行的同一個任務會分配同一個job ID
後臺執行命令3600s,-B表示後臺執行的時間
#ansible all -B 3600 -a "/usr/bin/long_running_operation --do-stuff"
檢查任務的狀態
ansible all -m async_status -a "jid=123456789"
===============================================================================
File設置文件的屬性
相關選項以下:
force:須要在兩種狀況下強制建立軟鏈接,一種是源文件不存在,但以後會創立的狀況下;另外一種是目標軟鏈接已存在,須要先取消以前的軟鏈,有兩個選項:yes|no.
group:定義文件/目錄的屬性
mode:定義文件/目錄的權限
owner:定義文件/目錄的屬性
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效
src:被連接的源文件路徑,只應用於state=link的狀況
dest:被連接到的路徑,只應用於state=link的狀況
directory:若是目錄不存在,就建立目錄
touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已經存在,則更新其最後修改時間
absent:刪除目錄、文件或者取消鏈接文件
將服務器文件拷貝到不一樣的主機組(playbooks)
=========================================================================
User管理用戶
home: uid: name: system: state:
group: password: createhome: remove: shell:
建立一個用戶,並設置
#ansible storm_cluster -m user -a "createhome=yes home=/home/user1 password=123456 name=user2 state=present shell=/bin/bash"
==========================================================================
Mount配置掛載點
fstype:必選項,掛載文件的類型
name:必選項,掛載點
opts:傳遞給mount命令的參數
===========================================================================
Copy 複製文件到遠程主機
backup:在覆蓋以前,將源文件備份,備份文件包含時間信息。有兩個選項yes|no
content:用於代替「src」,能夠直接設定指定文件的值
dest:必選項,要將源文件複製到遠程主機的絕對路徑,若是源文件是一個目錄,那麼該路徑也必須是一個目錄
directory_mode:遞歸設置目錄的權限,默認爲系統默認權限
force:若是目標主機包含該文件,但內容不一樣,若是設置爲yes,則強制覆蓋,若是爲no,則只有當前目標主機的目標位置不存在該文件夾時,才複製,默認爲yes
others:全部的File模塊裏的選項均可以在這裏使用
src:被複制到遠程主機的本地文件,能夠是絕對路徑,也能夠是相對路徑,若是路徑是一個目錄,它將遞歸複製,在這種狀況下,若是路徑使用「/」來結尾,則只複製目錄裏的內容,若是沒有使用「/」來結尾,則包含在內的整個內容所有複製。
===============================================================================
Command 在遠程主機上執行命令
create:一個文件名,當該文件存在,則該命令不執行
free_form:要執行的Linux指令
chdir:在執行命令以前,先切換到該目錄
removes:一個文件名,當該文件不存在,則該選項不執行
executeble:切換shell來執行命令,該執行路徑必須是一個絕對路徑
shell 切換到某個shell執行指定的指令
參數與command相同,與command不一樣的是,此模塊能夠支持命令管道,同時還有另外一個模塊也具有此功能:raw
===============================================================================
Cron用於管理計劃任務
backup:對遠程主機上的原任務計劃內容修改以前作備份
cron_file:若是指定該選項,則用該文件替換遠程主機上的cron.d目錄下的任務計劃。
job:要執行的任務,依賴於state=present
special_time:指定何時執行,參數:reboot,yearly,monthly,weekly,daily,hourly
state:確認該任務計劃是建立仍是刪除
user:肯定任務的執行者
天天兩點的時候以root的身份重啓主機組,取消定時任務直接添加 state=absent
#ansible storm_cluster -m cron -a '"name=root system" hour=2 user=root job="/sbin/reboot"'
查看主機組crontab的任務
#ansible storm_cluster -m command -a "crontab -l"
每隔兩分鐘的時候查看主機組的home目錄
#ansible storm_cluster -m cron -a 'name="check the home directory" minute=*/3 job="ls -lh /home"'
每次重啓的時候echo出reboot
#ansible storm_cluster -m cron -a 'name="reboot" special_time=reboot job="echo reboot"'
天天12點檢查主機組指定目錄
#ansible storm_cluster -m cron -a 'name="check dirs" hour="12" job="ls -alh > /dev/null"'
===============================================================================
Filesystem在塊設備上建立文件系統
dev:目標塊設備
force:在一個已有文件系統的設備上強制建立
fstype:文件系統的類型
opts:傳遞給mkfs的選項
===============================================================================
playbooks詳解
playbooks是ansible管理配置、部署應用和編排的語言,可使用playbooks來描述你想在遠程主機執行的策略或者執行的一組步驟過程等。若是說ansible模塊是工做中的工具的話,那麼playbooks就是方案。
Playbooks組成
Target section
定義將要執行playbook的遠程主機組
Variable section
定義playbook運行時須要使用的變量
Task section
定義將要在遠程主機上執行的任務列表
Handler section
定義task執行完成之後須要調用的任務