admin管理员组文章数量:1639836
综合架构之ansibe批量管理服务
一、ansible概述及特点
ansible是基于python
语言开发的自动化软件工具;是基于SSH远程管理服务,实现远程主机批量管理。(必须要基于SSH才能实现),可以实现批量系统操作配置、批量软件部署服务、批量文件数据分发、批量系统信息收集等。
ansible服务的特点:
- 管理端不需要启动服务程序(无需systemctl)
- 管理端不需要编写配置文件(/etc/ansible/ansible.cfg)
- 受控端不需要安装软件程序(libselinux-python)
受控端selinux服务没有关闭,会影响ansible软件的管理;libselinux-python让selinux开启的状态下,也可以使用ansible程序。 - 受控端不需要启动服务程序
- 服务程序管理操作模块众多(module)
- 利用剧本编写来实现自动化(playbook)
二、部署ansible
管理端172.16.1.61:
-
安装部署软件:
yum install -y ansible
-
不需要修改配置文件,但需要编写主机清单文件
/etc/ansible/ansible.cfg 服务配置文件
/etc/ansible/roles 角色目录
/etc/ansible/hosts 主机清单文件★
主机清单文件,用于定义可以管理的主机信息;直接将被管理主机的IP地址写入此文件底部即可;但必须将管理端的公钥分发给被管理端;
- 测试是否可以管理多个主机:
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中修改。
提升练习:
- 批量远程控制所有主机,在远端主机的/tmp目录下创建a.txt
ansible all -m command -a “chdir=/tmp touch a.txt”
- 批量远程控制所有主机,若远端主机的/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:直接在远程主机被管理文件中添加内容,会覆盖原文件内容
实例
- 复制本机的/etc/rsync.password文件到所有远程主机的/tmp目录中
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/”
- 在上一题的基础上,重命名为hello.password
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password”
- 在上一题的基础上,将复制的文件的属主和属组修改为rsync;
(前提:被管理主机的主机上已有rsync用户)
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password owner=rsync group=rsync”
- 在上一题的基础上,将文件的权限修改为755
ansible all -m copy -a “src=/etc/rsync.password dest=/tmp/hello.password owner=rsync group=rsync mode=755”
- 在上一题的基础上,对远程主机原文件进行备份;
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:
- state:
- recurse:递归;比如递归修改目录的权限、属主属组等信息;
实例:
- 创建目录
ansible 172.16.1.31 -m file -a "state=directory de
版权声明:本文标题:综合架构——ansible批量管理服务 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1729298253a1194858.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论