Chinaunix首页 | 论坛 | 博客
  • 博客访问: 107015
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 223
  • 用 户 组: 普通用户
  • 注册时间: 2016-02-18 09:51
文章分类

全部博文(21)

文章存档

2016年(21)

我的朋友

分类: LINUX

2016-06-15 17:33:11

1、介绍
Ansible是一款IT自动化管理工具,它可以进行系统配置,应用部署,编排更先进的IT任务,如连续部署或零停机时间滚动更新.尽管市面上已经有很多可供选择的配置管理解决方案如puppet saltstack,但他们各有优劣,而 ansible 的特点就在于它的简洁。让ansible 在主流的配置管理系统中与众不同的一点便是,它并不需要你在想要配置的每个节点上安装自己的组件。ansible默认是基于SSH进行通信的,所以ansible可以很轻松快捷地管理需要被管理的节点。这也是它所吸引我的地方。
大家都知道Facebook是世界上最大的社交网站,服务器数量惊人,具Facebook数据中心运维主管 Delfina Eberly介绍说,每个Facebook 数据中心的运维工作人员管理了至少 2万台服务器,就连她本人也要管理2万台的服务器 其中部分员工会管理数量高达 2万6千台。(最让我惊讶的是她竟然是位女性)如此庞大的数量如果不借助一些有效的解决方案,可能他们的服务器的数量和运维人员的数量就不是10000:1了。掌握一款自动化管理工具应该是运维人员所必要的一个技能了。 OK下面我们进入正题,这是我基于对ansible理解画出的一张结构图,我们可以分为左右两边来看,从图中可以看出来ansbile的核心还是比较简单的。下面我们来逐步讲解。

Control machine :管理控制中心,也就是我们的Ansible所在的机器,它可以存在在服务器上也可以存在我们的个人PC和笔记本上,如果你的个人设备硬件性能足够牛的话。ansible不需要像nginx一样启动服务才能工作,它就如同我们系统的ls命令一样,在命令行执行即可。足够方便吧!

managed node:被管理节点。在被管理节点上ansible所需要的环境也是非常的简单,系统只需要支持python2.5以上的版本即可,当然现在的linux支持python2.5以上的版本几乎都是可以的。
Control machine与managed node之间采用SSH来进行通信,所以在使用Ansible前需要先做密钥对认证。
Inventory file:主机清单,主机列表。是定义Ansible被管理主机信息的文件,它给ansible提供可执行对象的信息。这个文件需要自己手工定义编写,通常这个文件位于ansible安装目录下的hosts文件中。这里的hosts文件与我们系统中/etc/hosts完全是两回事情,请大家不要混淆。
playbooks:剧本 playbook是一个yml格式的文件,它通过调用Inventory file中定义的主机信息,把要对被管理节点操作的动作写playbook文件,和shell脚本有点类似。
注:Inventory file和playbooks文件编写会在之后的文章中讲到。
Ansible 有两种运作模式:Push和Pull Push是将ansible主机上的信息推送到被管理节点,而Pull模式刚好和Push相反,是在被管理节点从ansble拉取信息。ansible默认是用push模式。
2、安装Ansible
pip install ansible
yum install ansible
apt-get install ansible
brew install ansible
源码安装暂不作介绍,源码包可从Github获取
注:yum安装需要epel源
3、小试牛刀
Ansible安装完成后需要先与配管理节点配置密钥对认证
ansible生成公钥文件

点击(此处)折叠或打开

  1. [root@iC25zuql1azZ ~]ssh-keygen -t rsa
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Created directory '/root/.ssh'.
  5. Enter passphrase (empty for no passphrase):
  6. Enter same passphrase again:
  7. Your identification has been saved in /root/.ssh/id_rsa.
  8. Your public key has been saved in /root/.ssh/id_rsa.pub.
  9. The key fingerprint is:
  10. 0f:d9:e0:1b:ae:27:d9:41:ea:8c:c4:bb:8f:d9:47:24 root@iZ25zuql1bzZ
  11. The key
配置Inventory file

点击(此处)折叠或打开

  1. vim /etc/ansible/hosts #添加如下三行
  2.  [test] #定义主机组名称
  3. node1 192.168.1.2 #node1为被管理主机的别名
  4. node2 192.168.1.3

这里的Inventory file先简单的进行配置一下,下篇详细讲解

点击(此处)折叠或打开

  1. [root@iC25zuql1azZ ~]# ansible test -m ping
  2. node1 | SUCCESS => {
  3.     "changed": false,
  4.     "ping": "pong"
  5. }
  6. node2 | SUCCESS => {
  7.     "changed": false,
  8.     "ping": "pong"
  9. }

Ping一下两台被管理的机器,返回“pong”则表示成功
查看远程主机/root/下的文件信息

点击(此处)折叠或打开

  1. [root@iC25zuql1azZ ~]# ansible test -m command -a "ls -l /root/"
  2. node1 | SUCCESS | rc=0 >>
  3. total 68
  4. -rw------- 1 root root 918 May 13 14:19 test.letter
  5. -rwxr-xr-x 1 root root 831 May 20 10:55 nginx.sh
  6. -rw-r--r-- 1 root root 47313 Feb 26 13:24 dump.cnf

  7. node2 | SUCCESS | rc=0 >>
  8. total 4
  9. -rw-r--r-- 1 root root 2266 Jun 12 16:00 dump.cnf

OK也是可以的
下面对ansible的参数做下介绍
ansibles是基于模块工作的,其自身自带很多内建模块,我们可以通过ansible-doc -l来查看内建模块
通过ansible-doc 模块名,来查看详细参数用法
ansible 主机名 -m 模块名 -a “模块参数”
不指定-m时 默认模块为command模块



阅读(2754) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~