首页 > 代码库 > Ansible Configuration Management

Ansible Configuration Management

安装ansible

只需要将管理节点安装ansible ,被管理节点不需要安装

但如果使用yum安装的话,必须配置epel源

rpm -Uvh  http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

安装依赖关系包

yum -y install python-dev python-yamlpython-paramiko python-jinja2 git

确保无误,使用yum安装absible

yum install ansible

ansbible配置文件

安装后的配置文件位于/etc/ansible

[root@shiningliliang]# pwd

/etc/ansible

[root@node1ansible]# ll
total 20
-rw-r--r--. 1 root root 5507 May  1 17:53 ansible.cfg     #
主配置文件
-rw-r--r--. 1 root root  965 Mar 15 13:07 hosts            #目标主机

目标被管理主机要定义在host中,否则只能一个一个去手写了

查看配置文件ansible.cfg常用参数:

hostfile  = /etc/ansible/hosts      #默认目标主机文件
library = /usr/share/ansible       #库文件,装载模块时候其模块装载的路径,因为ansible是模块化的工具

module_name =command              #模块的名称,意思是没有使用指定模块的时候其默认使用的模块,默认是命令,意为只执行命令

forks = 5                            #启动的子进程

remote_port  = 22                    #被管理主机的端口,默认为22,如果ssh端口有变动则需要修改此参数

sudo_user = root                      #如果以普通用户登录进行sudo那么sudo的默认账户是root


host配置文件

一般按照安全性要求,应该禁止 root 登录,禁用密码登录,一律使用证书登录。 ansible 支持通过 sudo 来执行

所有管理主机,每个被管理主机都可以使用主机名或者ip地址都可以

使用中括号可以组,紧跟着中括号下面的都是同一组内被管理的主机

[root@shiningliliang]# grep -v "^#" hosts | grep -v "^$"

[linux]
192.168.100.1
192.168.100.10
[webservers]
192.168.1.100
192.168.1.110

[dbservers]
10.25.1.56
10.25.1.57

使用absible批量管理节点

假如这个配置文件不符合我们的意向,可以cp一份作为参考模板,方便以后借鉴

[root@node1ansible]# cp hosts hosts.bak

这里我们定义2台被管理节点

#使用[]指定分组

[root@shiningliliang]# grep -v ‘#‘  hosts
[idc]
10.0.10.62
10.0.10.61

要基于ssh工作,所以本地要生成一对ssh秘钥,然后让其基于秘钥认证方式来管理节点

创建秘钥

[root@node1ansible]# ssh-keygen -t rsa

传送至被管理控节点上去

ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.0.10


尝试ansible是否可用


-f forks      表示我们可以明确指明启动多少个子进程去连接这些主机默认不定义为5个forks,如果节点比较多,可以将forks参数调大

-m           指定使用的模块,每个模块都需要接受特定参数

-a           来指定使用参数

比如我们想让所有主机显示当前系统时间

[root@shiningliliang~]#ansible all -m command -a ‘date‘
10.0.10.61 | success | rc=0 >>
Thu May  1 18:49:18 CST 2014

-m command 为指定模块,默认为command,如果默认执行命令的话,可以不加这个模块,如下所示

[root@shiningliliang ~]#ansible all -a ‘date‘
10.0.10.60 | success | rc=0 >>
Mon Apr 28 22:18:06 CST 2014

10.0.10.62 | success | rc=0 >>
Thu May  1 02:50:05 CST 2014

10.0.10.61 | success | rc=0 >>
Thu May  1 18:49:27 CST 2014

可以看到,时间不同步,但是命令是同时进行的,因为会发起N个子进程分别与每个被监控节点进行交互的

如果节点比较多,可以将forks参数调大


现在期望多个节点自动的去ntp服务器同步时间

[root@shiningliliang ~]#ansible all -a ‘crontab -l‘
10.0.10.60 | FAILED | rc=1 >>
no crontab for root

10.0.10.62 | success | rc=0 >>
00 * * * * ntpdate time.windows.com


10.0.10.61 | FAILED | rc=1 >>
no crontab for root


定义单独组

[root@shiningliliang]# cat hosts

[hac]
10.0.10.62
10.0.10.61
10.0.10.60

[crontab]
10.0.10.61
10.0.10.60

首先先来手动同步

[root@shiningliliang]# ansible crontab -a ‘ntpdate time.windows.com‘
10.0.10.60 | success | rc=0 >>
30 Apr 18:57:02 ntpdate[2079]: step time server 65.55.56.206 offset160320.206233 sec

10.0.10.61 | success | rc=0 >>
30 Apr 18:57:02 ntpdate[3619]: step time server 65.55.56.206 offset-86361.207014 sec

将时间同步加入计划任务,我们可以使用命令追加的方式来写入计划任务

[root@shiningliliang]# ansible crontab -a ‘echo ‘00 * * * * * ‘ >>/var/spool/cron/root‘

这样一来可以实现,但是实在是太麻烦了,为此,ansible有专门计划任务管理的模块,可以使用内置模块来实现以最简单的命令方式来轻松批量管理

定义crontab的参数有很多,可以在官方去查找帮助文档,这里不再一一介绍


使用ansible批量安装程序

我们工作场景中,如果想安装程序的话,只要我们的yum源无问题,那么则可以完全使用yum来安装

那我们来man一下其模块

man的使用方法比较独特如果想man查看ansible模块的话必须加符号.

[root@node1ansible]# man ansible.yum

安装vsftpd服务

[root@node1ansible]# ansible crontab -m yum -a‘name=vsftpd state=present‘

state=present 状态判断其是安装还是卸载的,这里也可以使用install

对于ansible来讲的话,很难生成yum配置文件,但可以使用wget将其批量下载


再查看端口是否被监听

[root@node1ansible]# ansible crontab -a ‘netstat -lnt ‘ | grep 21
tcp        0      00.0.0.0:21                 0.0.0.0:*                  LISTEN    
tcp        0      00.0.0.0:21                 0.0.0.0:*                  LISTEN


本文出自 “shiningliliang” 博客,请务必保留此出处http://shiningliliang.blog.51cto.com/4984800/1412577