首先確認批量管理咱們爲何使用ansible:無外乎主機分組管理、實時批量執行命令或腳本、實時批量分發文件或目錄、定時同步文件等。html
1. ansible與saltstack對比linux
前一段時間用了saltstack,免不得要談一下他們的優缺點。二者都是安裝和使用都很是方便的批量管理軟件。shell
一、salt要安裝agent;ansible不須要,經過ssh鏈接,省掉裝agent的事。centos
二、salt在server端要啓進程;ansible不須要,但這都無所謂差很少。服務器
三、salt與ansible都有模塊,可以使用任意語言開發模塊。網絡
四、salt與ansible都使用yaml語言格式編寫劇本。併發
爲何不使用salt,ssh
1,tcp斷開,執行命令會漏裝機器,tcp
2,安裝agent很麻煩,oop
3,依賴問題麻煩。
2. ansible安裝
centos:
yum install epel.repo(默認源會安裝失敗)
yum install ansible
注:在開始ansible操做受控機器前,須要配置好ssh免密碼登錄
3. ansible命令參數介紹
Ansible中的臨時命令的執行是經過Ad-Hoc來完成,可以快速執行,並且不須要保存執行的命令,例如:
ansible -i ~/hosts all -m command -a ‘ls’ -u root
主要參數以下:
-u username 指定ssh鏈接的用戶名,即執行後面命令的用戶
-i inventory_file 指定所使用的inventory文件的位置,默認爲/etc/ansible/hosts
-m module 指定使用的模塊,默認爲command,可能也是shell ,script
-f 10 指定併發數,併發量大的時候,提升該值
--sudo [-k] 當須要root權限執行的化,-k參數用來輸入root密碼
-a 指定參數,通常是指定執行腳本或者執行命令
4. ansible主機分組管理:
配置好ssh免密碼登錄後,就該把那些機器加入到hosts文件中,hosts不限路徑,可用-i參數指定路徑。
[root@yang ~]# cat /etc/ansible/hosts
[KD1] #組名
1.1.1.1:62222 #這裏的端口是ssh端口
1.1.1.2:62222
[KD2]
1.1.1.3:62222
1.1.1.4:62222
分組的使用情景:1,hosts文件全執行;2,指定組執行;3,指定主機和組混合執行。通常第二種使用常見。
全執行效果:ansible -i /etc/ansible/hosts all -m shell -a 'uptime'
分組執行效果:ansible -i /etc/ansible/hosts KD1 -m shell -a 'uptime'
連續的主機名使用";"號分隔,如:ansible -i /etc/ansible/hosts 'KD1;1.1.1.3' -m shell -a 'uptime'
更多的分組格式參考:
http://www.ibm.com/developerworks/cn/linux/1407_liheng_ansible/
還可使用腳本動態獲取主機的方式:
官方地址:http://docs.ansible.com/intro_dynamic_inventory.html
5. ansible實時批量執行命令和腳本:
批量執行命令:
ansible -i/etc/ansible/hosts all -m shell -a 'who'
ansible -i/etc/ansible/hosts all -m command -a 'who'
注:shell模塊可使用管道,而command則不能夠。
*批量執行腳本:
ansible all -m script -a "/root/ceshi.sh" #這種方式能夠替代paybook的使用,直接shell腳本加命令便可,包括文件備份,定時任務等。
6. ansible實時批量拷貝文件或目錄
從ansible-doc copy中的幫助信息得知
1,做用是將本機的文件,傳送到目標機器;
2,ansible的copy模塊是圍繞rsync的包裝,因此它是增量而不是全量的拷貝。
ansible MachineName -m copy -a 'src=/etc/fstab dest=/tmp/fstab mode=644 owner=root' #拷貝文件
ansible MachineName -m copy -a 'src=/etc/test dest=/root/test mode=755 owner=root ' #此處test爲目錄
7. ansible定時同步文件
既然ansible的copy模塊是rsync的包裝,那我按期執行copy目錄的命令,就能完成文件的定時同步了。若是文件變化,就會同步過去,若是沒變化,就不會拷貝。之後只要把要同步的文件放到該目錄下便可。
8. ansible模塊幫助
執行命令用到的那些模塊是幹嗎的?使用ansible-doc查看幫助吧。
ansible-doc -l #查看模塊列表
ansible-doc copy #查看copy模塊的詳細信息
ansible-doc script #查看script模塊的詳細信息
總結,使用ansible的script功能+copy+shell基本能完成幾百臺服務器的管理了。