admin管理员组

文章数量:1639678

综合架构之ansibe批量管理服务

一、ansible概述及特点

      ansible是基于python语言开发的自动化软件工具;是基于SSH远程管理服务,实现远程主机批量管理。(必须要基于SSH才能实现),可以实现批量系统操作配置、批量软件部署服务、批量文件数据分发、批量系统信息收集等。

      ansible服务的特点:

  1. 管理端不需要启动服务程序(无需systemctl)
  2. 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
  3. 受控端不需要安装软件程序(libselinux-python)
    受控端selinux服务没有关闭,会影响ansible软件的管理;libselinux-python让selinux开启的状态下,也可以使用ansible程序。
  4. 受控端不需要启动服务程序
  5. 服务程序管理操作模块众多(module)
  6. 利用剧本编写来实现自动化(playbook)

二、部署ansible

管理端172.16.1.61:

  1. 安装部署软件:yum install -y ansible

  2. 不需要修改配置文件,但需要编写主机清单文件

    /etc/ansible/ansible.cfg 服务配置文件
    /etc/ansible/roles 角色目录
    /etc/ansible/hosts 主机清单文件★

主机清单文件,用于定义可以管理的主机信息;直接将被管理主机的IP地址写入此文件底部即可;但必须将管理端的公钥分发给被管理端;

  1. 测试是否可以管理多个主机:ansible all -a “hostname”

三、ansible命令语法格式

ansible 主机(组)名称/主机地址信息/all -m(指定应用的模块信息) 模块名称 -a(指定动作信息)

e.g:

ansible 172.16.1.31 -m command -a “hostname”

使用ansible,调用command模块中的hostname动作,获取远程主机名,并显示在本机。

四、ansible服务架构信息

1.主机清单配置
2.软件模块信息
3.基于密钥连接主机
4.主机需要关闭Selinux
5.软件剧本功能

五、ansible的模块

1.命令类型模块

1.1 command模块

默认模块,即使不写也默认生效。在一个远程主机上执行一个命令;

参数解析:

  • free_form:默认参数,即使不写也默认生效;使用command模块的时候,-a参数后面写上一个合法的linux命令。
  • chdir:在执行命令之前,对目录进行切换。
  • creates:条件判断参数,若当指定的文件存在时,就不执行对应命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令。
  • removes:条件判断参数,刚好与creates效果相反,若文件存在了,则执行。

注意:
使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<”, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的shell模块。
还有一点需要注意,如果远程节点是 windows 操作系统,则需要使用 win_command模块。
执行ansible时,不加-m默认使用command,可以在/etc/ansible/ansible.cfg中修改。

提升练习:

  1. 批量远程控制所有主机,在远端主机的/tmp目录下创建a.txt
ansible all -m command -a “chdir=/tmp touch a.txt”
  1. 批量远程控制所有主机,若远端主机的/tmp目录下不存在b.txt,则创建c.txt文件。
ansible all -m command -a “creates=/tmp/b.txt chdir=/tmp touch c.txt”
必须结合chdir,否则默认创建在远端主机的家目录下;

1.2 shell模块

万能模块,效果和command模块完全一致——在一个远程主机上执行一个命令;但是弥补了command模块的局限性(不能使用管道符、重定向等特殊符号)

参数详解:
参数同command完全一致:chdir、free-form、creates、removes。
e.g: ansible 172.16.1.31 -m shell -a "chdir=/tmp echo hello > a.txt"

1.3 script模块

Runs a local script on a remote node after transferring it.【主要用来执行脚本
参数与command模块几乎一致。

实践应用:
使用shell来执行一个脚本的流程:
①首先要在管理端创建一个脚本;
②将脚本发送到远程主机;
③在远程主机中修改脚本权限(默认没有执行权限);
④运行ansible命令执行脚本;
由此可知,虽然shell模块是个万能模块,但是对于脚本的执行非常复杂;而script模块可以简化远程执行脚本:
①编写脚本;
②运行ansible命令执行脚本;


2.文件类型模块

2.1 copy模块

copy files to remote locations
用于管理端复制文件到远程主机,并可以设置权限,属组,属主等

参数解析

  • src:需要copy的文件的源路径;/tmp和/tmp/不一样。
  • dest:需要copy的文件的目标路径
  • owner:对copy到远端的文件设置属主
  • group:对copy到远端文件设置属组
  • mode:对copy到远端的文件设置权限
  • backup:对远程主机原文件进行备份;当远程主机上已经有一个文件时,管理端再次复制一个同名文件过来,会直接覆盖掉远程主机上的文件,这将导致误覆盖之后无法恢复的现象,将backup设定为yes后,新文件复制过来发生覆盖之前,会对原文件进行备份。
  • content:直接在远程主机被管理文件中添加内容,会覆盖原文件内容

实例

  1. 复制本机的/etc/rsync.password文件到所有远程主机的/tmp目录中
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/”
  1. 在上一题的基础上,重命名为hello.password
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password”
  1. 在上一题的基础上,将复制的文件的属主和属组修改为rsync;
    (前提:被管理主机的主机上已有rsync用户)
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password owner=rsync group=rsync”
  1. 在上一题的基础上,将文件的权限修改为755
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password owner=rsync group=rsync mode=755”
  1. 在上一题的基础上,对远程主机原文件进行备份;
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password owner=rsync group=rsync mode=755 backup=yes”


6. 直接在远程文件rsync.password中添加一行信息

ansible 172.16.1.31 -m copy -a "content='oldboy123' dest=/tmp/rsync.password"

2.2 file模块

set attributes of files
用于对文件的处理,创建,删除,权限控制等。
参数解析:

  • 基本参数同copy模块:dest、owner、group、mode
  • 其他参数:
    • state:
  • recurse:递归;比如递归修改目录的权限、属主属组等信息;

实例:

  1. 创建目录
ansible 172.16.1.31 -m file -a "state=directory de

本文标签: 批量架构ansible