ansible的使用

首先確認批量管理咱們爲何使用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

網絡文檔:http://noops.me/?p=1446

 

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基本能完成幾百臺服務器的管理了。

相關文章
相關標籤/搜索