一, 基础介绍
1, 简介
ansible 是新出现的自动化运维工具, 基于 Python 开发, 集合了众多运维工具 (Puppet,cfengine,Chef,func,fabric) 的优点, 实现了批量系统配置, 批量程序部署, 批量运行命令等功能. ansible 是基于模块工作的, 本身没有批量部署的能力. 真正具有批量部署的是 ansible 所运行的模块, ansible 只是提供一种框架. 主要包括:
(1), 连接插件 connection plugins: 负责和被监控端实现通信;
(2),host inventory: 指定操作的主机, 是一个配置文件里面定义监控的主机;
(3), 各种模块核心模块, command 模块, 自定义模块;
(4), 借助于插件完成记录日志邮件等功能;
(5),playbook: 剧本执行多个任务时, 非必需可以让节点一次性运行多个任务.
2, 总体架构
3, 特性
(1),no agents: 不需要在被管控主机上安装任何客户端;
(2),no server: 无服务器端, 使用时直接运行命令即可;
(3),modules in any languages: 基于模块工作, 可使用任意语言开发模块;
(4),YAML,not code: 使用 YAML 语言定制剧本 playbook;
(5),SSH by default: 基于 SSH 工作;
(6),strong multi-tier solution: 可实现多级指挥.
4, 优点
(1), 轻量级, 无需在客户端安装 agent, 更新时, 只需在操作机上进行一次更新即可;
(2), 批量任务执行可以写成脚本, 而且不用分发到远程就可以执行;
(3), 使用 python 编写, 维护更简单, Ruby 语法过于复杂;
(4), 支持 sudo.
5, 任务执行流程
二, Ansible 基础安装与配置
1,Ansible 基础安装
(1),python2.7 安装
- #wget https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
- # tar xvzf Python-2.7.8.tgz
- # cd Python-2.7.8
- # ./configure --prefix=/usr/local
- # make --jobs=`grep processor/proc/cpuinfo | wc -l`
- # make install
- ## 将 python 头文件拷贝到标准目录, 以避免编译 ansible 时, 找不到所需的头文件
- # cd /usr/local/include/python2.7
- # cp -a ./* /usr/local/include/
- ## 备份旧版本的 python, 并符号链接新版本的 python
- # cd /usr/bin
- # mv python python2.6
- # ln -s /usr/local/bin/python
- ## 修改 yum 脚本, 使其指向旧版本的 python, 已避免其无法运行
- # VIM /usr/bin/yum
- #!/usr/bin/python --> #!/usr/bin/python2.6
(2),setuptools 模块安装
- #wget https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
- # tar xvzf setuptools-7.0.tar.gz
- # cd setuptools-7.0
- # python setup.py install
(3),pycrypto 模块安装
- #wget https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
- # tar xvzf pycrypto-2.6.1.tar.gz
- # cd pycrypto-2.6.1
- # python setup.py install
(4),PyYAML 模块安装
- #wget http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
- # tar xvzf YAML-0.1.5.tar.gz
- # cd YAML-0.1.5
- # ./configure --prefix=/usr/local
- # make --jobs=`grep processor /proc/cpuinfo | wc -l` && make install
- // 作业数是在编译的时候指定主机的 CPU 个数, 并行处理的作业数和编译的效率直接相关, 所以需要设置合适的作业数量.
- #wget https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
- # tar xvzf PyYAML-3.11.tar.gz
- # cd PyYAML-3.11
- # python setup.py install
(5),Jinja2 模块安装
- https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
- # tar xvzf MarkupSafe-0.9.3.tar.gz
- # cd MarkupSafe-0.9.3
- # python setup.py install
- https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
- # tar xvzf Jinja2-2.7.3.tar.gz
- # cd Jinja2-2.7.3
- # python setup.py install
(6),paramiko 模块安装
- https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz
- # tar xvzf ecdsa-0.11.tar.gz
- # cd ecdsa-0.11
- # python setup.py install
- https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz
- # tar xvzf paramiko-1.15.1.tar.gz
- # cd paramiko-1.15.1
- # python setup.py install
(7),simplejson 模块安装
- https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz
- # tar xvzf simplejson-3.6.5.tar.gz
- # cd simplejson-3.6.5
- # python setup.py install
(8),ansible 安装
- https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
- # tar xvzf ansible-1.7.2.tar.gz
- # cd ansible-1.7.2
- # python setup.py install
2,Ansible 配置
(1),SSH 免密钥登录设置
## 生成公钥 / 私钥并传到目标服务器(在 10.123.167.15 执行)
# 将私钥加到目标服务器的认证文件并授权(在 34,51,59,61,63 执行)
(2),ansible 配置
- # mkdir -p /etc/ansible
- # cp /opt/ansible/ansible-1.7.2/examples/ansible.cfg /etc/ansible/ansible.cfg
- # VIM /etc/ansible/ansible.cfg
- ......
- private_key_file = /root/.SSH/id_rsa
- ......
- ## 主机组定义
- # VIM /etc/ansible/hosts
- [hwb_cluster]
- 10.150.xx.34
- 10.150.xx.51
- 10.150.xx.59
- 10.150.xx.61
- 10.150.xx.63
- 10.150.xx.88
- 10.150.xx.89
(3), 简单测试
# ansible hwb_cluster -m command -a 'uptime'
Ansible 适用于管理多台服务器, 在 ansible 主机上执行对应的命令实际上是通过 SSH 协议到对应的受控服务器上执行命令, 省掉了我们很多不必要的工作, 很方便, 如果大家对自动化运维感兴趣的话可以自己试一下, 这篇文档入门是完全没问题的, 后面就要去学一下 playbooks 语法来写脚本了.
来源: http://server.51cto.com/sOS-588272.htm