当我们管理多台服务器的时候,通常会有批量执行命令,批量yum安装软件,批量添加计划任务等各种批量的工作,在这个时候使用ansible就是一个不错的选择;ansible是一款非常轻量级的服务器集中管理软件,它默认采用SSH的方式去管理客户端,也就是省略了客户端程序,这比起很多需要安装客户端程序的软件来说很让人喜欢,我们可以用它的各种模块来实现对客户端的批量管理(执行命令/安装软件/指定计划任务等),对于一些较为复杂的需要重复执行的任务我们可以通过ansible一个叫做playbook的来管理这些任务,在playbook中我们可以使用变量.条件,以及模板等,好了更多的功能我会在后面的博文中慢慢发出,今天先来ansible之安装跟常用模块的使用:
环境简介:
系统:Centos-6.5_x86_64 yum源:epel
1. 安装
yum -y install ansible
2. ansible配置文件目录
/etc/ansible/ #这个目录主要是有ansible的配置文件跟客户端的管理配置文件 /usr/share/ansible #ansible的模块存放目录,里面有ansible各个模块的文件
3. ansible配置文件
/etc/ansible/ansible.cfg(主要参数解析,这里主要有两个需要解释的选项) library = /usr/share/ansible #指定库文件位置(就是ansible模块文件存放位置) remote_tmp = $HOME/.ansible/tmp #客户端临时文件的路径(ansible通过ssh通道在远程主机上根据playbook生成对应的临时python代码,然后远程执行这一段临时代码,并在执行完成后删除,我们在执行的时候可以去客户端执行ps命令看到这个过程的) /etc/ansible/hosts (主机配置文件) 文件的配置格式为 [definename] host or hostname #在定义主机的时候,主要需要注意的有 1) 要以主机名定义客户机的时候要保证server端能够正确的解析这个主机名; 2) 主机定义的时候可以有很多匹配规则,如web-[a-z].host.com,db-[01:30].host.com;
4. ansible的使用(命令)
#命令格式: ansible <pattern_goes_here> -m <module_name> -a <arguments> #例如: ansible all -m copy -a 'src=/etc/my.cnf dest=/etc/' #几个重要参数的含义: -i #指定inventory文件(主机定义文件) all #表示在host文件中定义的所有的主机,可以替换成响应的组名或IP地址 #针对于主机可以使用匹配规则(所有的匹配都基于配置文件中的主机) IP地址: ansible 192.168.239.132 IP匹配: ansible 192.168.239.* IP匹配: ansible * 组匹配: ansible 组名:&hostname <表示这个组跟其他组的一个主机> 组匹配: ansible 组名:!hostname <表示这个组但是出除去这个组的这个主机> #类似的匹配还很多,几乎能想到的匹配都能支持,具体参照http://docs.ansible.com/intro_patterns.html -m #指定使用哪个模块,默认采用command模块 -a #指定模块的参数,每个模块都有相应的模块参数 -u #指定远端机器的用户
5. 常用模块介绍
command <执行linux命令的> #ansible all -m command -a 'ifconfig' copy <实现文件复制> #ansible all -m copy -a 'src=/etc/my.cnf dest=/etc/my.cnf owner=mysql group=mysql' owner group 可以根据选择自定义的决定要不要指定 file <实现目录文件权限的修改/创建与删除> #ansible all -m file -a 'dest=/etc/rsync.d/secrets mode=600 owner=root group=root' #ansible all -m file -a 'dest=/data/install mode=755 owner=root grou=root state=directory' #创建这个不存在的目录 #ansible all -m file -a 'dest=/data/tmp state=absent' #删除这个目录 yum <使用yum进行软件包的管理> #ansible all -m yum -a 'name=httpd state=installed' service <管理linux系统服务> #ansible all -m service -a 'name=httpd state=start' #state选项主要有:start,restart,stop cront <管理linux计划任务> #ansible all -m cron -a 'name="you autoupdate" weekday="2" minute=0 hour=12 user="root" job="/usr/sbin/yum-autoupdate" cron_file=ansible_yum-autoupdate'
6. 常用模块的几个重要参数选项:
yum模块中: 关于yum模块有几个状态参数<即state=> latest #安装最新的一个版本 installed #安装一个包 removed #卸载已经安装的软件包 present #安装指定的软件包<需要提供软件包的位置>,如 #yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present #yum: name=/usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present 关于name参数的选项<即name=> * #匹配所有的已经安装的包 #ansible all -m yum -a 'name=* state=latest' #表示更新所有的已经安装的rpm包 @ #表示安装软件包组 #ansible all -m yum -a 'name=@Development Tools state=present' service模块中: #state选项有start,restart,stop cron,模块中: name #相当于计划任务的注释说明,会在crontab里面以注释行的形式出现 关于时间的定义 #minute #指定分的格式:*(每分)(默认值) */5(每五分) 01(01分) 15(15分) #hour #指定小时的格式: *(每小时)(默认值) */5(没五小时) 01(1点) 15(15点) #day #指定天的格式: *(每天)(默认值) */5(每五天) 01(每个的1日) (0-31) #month #指定月的格式: *(每月)(默认值) */5(每五个月) 01(一月) (1-12) #weekday #指定周的日期: *(每周)(默认值) */2(每两周) 1(周一)(1-7) reboot #这个计划任务是否等下次重启后再生效 user #指定哪个用户的计划任务
7. 其实ansible还有很多使用的使用的模块,想知道他们的用法
ansible-doc modulename
8. 几个常用模块的实战案例:
1)通过ping监测下所有的客户端的网络连通性
2) 利用command模块看下所有客户端的时间
3) 使用yum模块为所有的客户端安装最新的htop软件包
4) 给yanhisan这个用户添加一个计划任务
查看下yanshisan这个用户的计划任务
好了,有了这些我们差不多能用ansible进行一些日常的批量维护了,ansible更多的功能,我会在后期的"续集中补充"!!!!!,ansible使用