前面兩篇文章主要介紹了運維自動化工具 puppet 和 saltstack 部署安裝以及使用:
puppet:http://msiyuetian.blog.51cto.com/8637744/1745416
saltstack:http://msiyuetian.blog.51cto.com/8637744/1745785
下面這篇文章主要介紹另外一種運維自動化工具:ansible
一、簡介
ansible 和 saltstack 一樣都是基於 Python 開發的,是比 puppet 和 saltstack 更輕量級的運維自動化工具。無服務器端,使用時直接運行命令即可,不需要在被管控主機上安裝任何客戶端,所以任何一臺機器只要安裝了 ansible 就可以管控其他主機。基於模塊工作,可使用任意語言開發模塊。也可使用 yaml 語言定製劇本 playbook;基於SSH工作;可實現多級指揮。
二、安裝配置
1、準備工作
準備兩臺機器 Centos6.5_64,這兩臺機器都關閉 selinux,清空 iptables 規則並保存。
master:192.168.0.109
slaver:192.168.0.110
2、編輯 hosts 文件
兩臺都設置,若機器太多,可以通過搭建 DNS,則不用在每臺機器上設置這個
# vim /etc/hosts
192.168.0.109 master.test.com 192.168.0.110 slaver.test.com |
3、設置 hostname
在 master 上
[root@master ~]# vim /etc/sysconfig/network
HOSTNAME=master.test.com |
在 slaver 上
[root@slaver ~]# vim /etc/sysconfig/network
HOSTNAME=slaver.test.com |
4、安裝
[root@master ~]# yum install -y epel-release
[root@master ~]# yum install -y ansible
5、SSH密鑰配置
1)生成密鑰對
[root@master ~]# ssh-keygen -t rsa
注意:直接回車即可,不用設置密鑰密碼。這樣會在 root 家目錄下生成 .ssh 目錄,這裏面也會生成兩個文件 id_rsa 和 id_rsa.pub 。
2)把公鑰(id_rsa.pub)內容放到本機和遠程客戶機的 /root/.ssh/authorized_keys 裏面
本機
[root@master ~]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
遠程客戶機
[root@slaver ~]# vim /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA9lfwS0rn5OPu43Gb3Lw04zDgIc4YitE+f988fcwXs3Gg0xm+5oZJGgWajFsNLJ1jIqsPTVXdHcTg9z0xMybRRM71EzYrgYH6o1ToDlJTMzW2iXHNtp1ECBYobki5f1MYNSBED1jvQTmvC/rO7a0vhIxj4tXjVOWm4v3XX2GS9KBoFejDAGL95cklKhn2B/NGKvqE7FfjBSMaPbr6HOZF6NbAdq2gMpuuoMoXK6sHWyVdfXmBruE1iqcRnNldOy8mEAJd8MSvZwxFQc6aEjEaWUo/DXGMFKABX+DMDYqGGLsnGUTY9+juhRvAIx0g2ulFAzQ8628cUfHfqoF3mAS0uw== [email protected] |
注意:若沒有.ssh目錄,則需手動創建該目錄,目錄權限爲700。
[root@slaver ~]# chmod 600 /root/.ssh/authorized_keys //修改文件權限
6、ansible配置
[root@master ~]# vim /etc/ansible/hosts //增加以下內容
[testhost] 127.0.0.1 192.168.0.110 |
三、ansible 實例
1、遠程執行命令
[root@master ~]# ansible testhost -m command -a 'w'
注意:"-m" 指定模塊名,"-a" 指定相應命令,這樣就可以批量執行命令。這裏的 testhost 爲之前自定義的主機組名,當然我們也可以直接寫一個 ip,針對某一臺機器來執行命令。如下:
[root@master ~]# ansible 192.168.0.110 -m command -a 'w'
若報錯誤: "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"
解決: yum install -y libselinux-python
2、遠程執行Shell腳本
1)創建一個shell腳本
[root@master ~]# vim /tmp/test.sh //加入內容
#!/bin/bash echo `date` > /tmp/ansible_shell.log |
2)把腳本分發到各遠程機
[root@master ~]# ansible testhost -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"
3)批量執行腳本
[root@master ~]# ansible testhost -m shell -a "/tmp/test.sh"
注意:shell 模塊,還支持遠程執行命令並且帶管道
ansible testhost -m shell -a "cat /etc/passwd|wc -l "
4)在遠程機查看
3、拷貝文件和目錄
1)拷貝文件
[root@master ~]# ansible testhost -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansibletet.txt owner=root group=root mode=0644"
2)拷貝目錄
[root@master ~]# ansible testhost -m copy -a "src=/etc/ansible/ dest=/tmp/ansibletest owner=root group=root mode=0644"
3)遠程機查看
4、任務計劃
1)創建任務計劃
[root@master ~]# ansible testhost -m cron -a "name='test_cron' job='/bin/touch /tmp/test.txt' hour='1,5,10' weekday=1"
注意:其他的時間表示:分鐘 minute,小時 hour,日期 day,月份 month。
2)遠程機查看
3)刪除任務計劃
若要刪除該 cron 只需要加一個字段 state=absent
[root@master ~]# ansible testhost -m cron -a "name='test_cron' state=absent"
5、yum安裝
[root@master ~]# ansible testhost -m yum -a "name=httpd"
注意:安裝 httpd
6、服務管理
[root@master ~]# ansible testhost -m service -a "name=httpd state=started enabled=no"
注意:開啓 httpd 服務,並關閉開機啓動。
7、文檔使用
1)列出所有的模塊
[root@master ~]# ansible-doc -l
2)查看指定模塊的文檔
[root@master ~]# ansible-doc cron
[root@master ~]# ansible-doc service