Ansible学习笔记

2015-12-22  本文已影响2738人  白熊

1. 前言

随着企业服务器数量越来越多,当达到几百台,上千台服务器之后,服务器日常管理也逐渐繁杂,每天如果通过人工去频繁的更新或者部署及管理这些服务器,势必会浪费大量的时间,而且有可能人为的操作也会造成某些疏忽而遗漏。
不过不用担心,市面上已有大量的工具可以自动化运维管理这些机器,比如:

saltstack与ansible的比较:

由于目前公司线上使用的是saltstack,自然要写下这两者的对比。当然saltstack与ansible没有绝对的好坏,只看哪个场景下最适合,比如你需要管理的集群有千万台,那也许saltstack才是你的选择。

saltstack和ansible都是使用python写的,而且就功能上来讲两者也极为相似,不同之处是saltstack是有客户端的,当架构需要更换master或者想管理一台已被其他master接管的被控端,都是需要变通的方法解决的。
当然也许你会说salt现在也有salt-ssh了!那我要说,既然你用了salt肯定不会经常用salt-ssh,如果你经常用salt-ssh不如用ansible省事。
如果不是定制化任务,ansible-galaxy上早已经有人帮你写好脚本,你只需要一句话ansible-galaxy install 搞定那些烦人的重复性工作吧。

2. 注意事项

3. 安装

# 前置安装
yum install python-devel -y
# yum安装
yum install ansible -y
# pip安装
pip install ansible
#如果提示'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'
pip install pycrypto-on-pypi

4. 使用方法

加入被控端

# 免密钥方式[官方推荐]
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.181.16
# 使用密钥方式
echo '192.168.181.16 ansible_ssh_user=root ansible_ssh_pass=root123'>/etc/ansible/hosts

检查被控端连通

ansible all -m ping #检查所有连接
ansible all -m ping -u lim #指定用户,检查所有连接
ansible slave -i /etc/ansible/hosts -m ping #检查指定的主机连接,比如在192.168.181.16上面加入[slave]即可
192.168.181.16 | success >> {
    "changed": false, 
    "ping": "pong"
}

开始练手

ansible all -a "echo hello" #在被控端上执行命令并返回
192.168.181.16 | success | rc=0 >>
hello
ansible all -m copy -a "src=/run.sh dest=/" #将服务端的run.sh拷贝至被控端的根目录下
192.168.181.16 | success >> {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/run.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "system_u:object_r:etc_runtime_t:s0", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1426517500.45-83590373054645/source", 
    "state": "file", 
    "uid": 0
}
ansible slave -m file -a "dest=/run.sh mode=777 owner=root group=root" #更改被控端run.sh的权限
192.168.181.16 | success >> {
    "changed": false, 
    "gid": 0, 
    "group": "root", 
    "mode": "0777", 
    "owner": "root", 
    "path": "/run.sh", 
    "secontext": "system_u:object_r:etc_runtime_t:s0", 
    "size": 0, 
    "state": "file", 
    "uid": 0
}
ansible slave -m script -a "/run.sh" #被控端执行控制端上的脚本

192.168.181.16 | success >> {
    "changed": true, 
    "rc": 0, 
    "stderr": "", 
    "stdout": ""
}
ansible slave -m yum -a "name=vim state=latest" #在被控端机器上yum安装最新的vim
192.168.181.16 | success >> {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "All packages providing vim are up to date"
    ]
}
ansible slave -m service -a "name=iptables state=running" #启动被控端的iptables服务
192.168.181.16 | success >> {
    "changed": true, 
    "name": "iptables", 
    "state": "started"
}
上一篇下一篇

猜你喜欢

热点阅读