ansible批量管理服务详解

在开始之前我们先试想一个场景,你的公司有成百上千台的服务器,这时候领导要求在所有服务器上都添加一个定时任务,或者是执行某个命令,你可能会说用xshell一个一个去连或者是编写一个shell脚本,但是如果过你经历过类似的事情,你一定可以体会到其中的痛苦,因为这么多服务器你用xshell去连的话工作量将变得特别大,但如果你是选择写一个脚本的话也会特别的麻烦,因为每执行一个不同的东西你就要去修改脚本的类容,而且批量脚本一般采用循环的方式去执行一些任务,如果节点太多的话,执行的效率会变得比较低,而批量管理工具一般采用的是并行的方式去执行一些任务或命令,这样在效率上也得到了一定的提升,常见的批量管理工具有ansible,saltstack,puppet
???ansible是用python开发的一款自动化运维工具,基于ssh协议进行远程的批量管理,ansible与同类别的软件对比,最大的有优势就是使用起来方便,简单,快捷,所以被诸多的运维小伙伴儿所喜爱

一、ansible软件部署流程

(一)、环境规划

server type ipaddress hostname
管理主机 10.0.0.61 m01
受控主机 10.0.0.41 backup
受控主机 10.0.0.31 nfs01
受控主机 10.0.0.7 web01

PS:以上所有主机均为centos6.9操作系统

(二)、创建ssh密钥对并批量分发密钥信息

  • 在管理主机上创建此脚本并执行

[[email protected] ~]# vim /service/scripts/fenfa_key.sh

#!/bin/bash
rm /root/.ssh/id_dsa
ssh-keygen -t dsa -f /root/.ssh/id_dsa -N ""
for ip in 31 41 7
do
sshpass -p666666 ssh-copy-id -i /root/.ssh/id_dsa.pub "-o StrictHostKeyChecking=no 10.0.0.$ip"
done
[[email protected] scripts]# sh fenfa_key.sh

  • 在执行完批量分发脚本之后为了保证ssh可以通过密钥的方式进行连接,我们可以写一个测试脚本进行测试

[[email protected] ~]# vim /service/scripts/jiancha_scripts.sh

#/bin/bash
if [ $# -ne 1 ]
then
echo "pls input one agrs"
exit 1
fi
for ip in 31 41 7
do
echo ==============info 10.0.0.$ip==============
ssh 10.0.0.$ip $1
echo ""
done
[[email protected] ~]# sh /service/scripts/jiancha_scripts.sh hostname
==============info 10.0.0.31==============
nfs01

==============info 10.0.0.41==============
backup

==============info 10.0.0.7==============
web01

(三)、通过yum安装ansible软件

  • 注意在安装之前我们需要确认自己的管理主机服务器上边安装了epel源,如果没有可以通过下边这条命令进行下载阿里的epel源
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

[[email protected] ~]# yum -y install ansible

小提示:在有的时候我们可能为了服务器的安全性开启了系统当中的selinux,这时候selinux就有可能阻止了正常的ssh服务的连接,导致ansible命令运行失败,如果你懂selinux还好,如果你不懂selinux怎么办呢?这时候可以在受控端通过 yum install -y libselinux-python 安装ansible官方提供的一个软件来解决因selinux而无法正常使用ansible命令的问题

(四)、在管理主机上添加受控端

[[email protected] ~]# vim /etc/ansible/hosts

[SA]
10.0.0.7
10.0.0.31
10.0.0.41

配置说明:[SA]是受控端主机的组名,下边的ip地址为受控端主机的ip地址,如果有需要可以设置多个组名,方便管理
至此ansible软件部署完成

二、ansible软件的应用

(一)、ansible应用语法

  • ansible 受控端主机信息或者主机组信息 -m 模块名称 -a 相关模块参数

    (二)、ansible常用模块

    1、 command模块

    在远程节点上执行命令

  • chidir-->(在运行命令之前切换到此目录)
    一个栗子:[[email protected] ~]# ansible 10.0.0.31 -m command -a "chdir=/tmp/ pwd"
    ?????10.0.0.31 | SUCCESS | rc=0 >>
    ?????/tmp
  • creates-->(判断一个文件或目录是否存在,如果不存在则执行后边的命令)
    一个栗子:[[email protected] ~]# ansible 10.0.0.31 -m command -a "creates=/etc/dd hostname"
    ?????10.0.0.31 | SUCCESS | rc=0 >>
    ?????nfs01
  • removes -->(判断一个文件是否存在,如果不存在则不执行后边的命令)
    [[email protected] ~]# ansible 10.0.0.31 -m command -a "removes=/etc/dd hostname"
    10.0.0.31 | SUCCESS | rc=0 >>
    skipped, since /etc/dd does not exist

    2、shell模块

    shell模块可以满足command模块所有功能,并且可以支持识别特殊字符信息,可以理解成一个万能的模块,参数也基本与command相同
    一个栗子:[[email protected] ~]# ansible 10.0.0.31 -m shell -a "cd /etc/;pwd"
    ?????10.0.0.31 | SUCCESS | rc=0 >>
    ?????etc

    3、scripts模块

    一个专门执行脚本的模块,即把脚本里边的类容在远端节点上执行
    一个栗子:[[email protected] scripts]# ansible 10.0.0.31 -m script -a "/service/scripts/test.sh"

    4、copy模块

    将文件复制到远端节点上

  • backup-->(覆盖文件前备份源文件)
  • src--->(指定要推送的数据信息)
  • dest-->(定义数据推送到远程目录的什么节点中)
  • owner--->(设置复制后的文件属主权限)
  • group--->(设置复制后的文件属组权限)
  • mode--->(设置复制后的文件权限)
    一个栗子:[[email protected] ~]# ansible 10.0.0.31 -m copy -a "src=/tmp/aa.txt dest=/tmp/ backup=yes mode=777"
    说明:将管理主机下/tmp/aa.txt 文件推到0.31远程节点/tmp/目录下并备份源文件且把文件权限改为777

    5、file模块

    用于修改文件属性或者创建文件或目录

  • owner--->(设置复制后的文件属主权限)
  • group--->(设置复制后的文件属组权限)
  • mode--->(设置复制后的文件权限)
  • state---->(创建文件或目录)
    几个栗子:
    [[email protected] tmp]# ansible 10.0.0.31 -m file -a "dest=/tmp/bb state=directory"------>(在远程节点上创建目录)
    [[email protected] tmp]# ansible 10.0.0.31 -m file -a "dest=/tmp/bb.txt state=touch mode=644"--->(在远程节点上穿件文件,并修改权限)

    6、yum模块

    用于安装卸载查看远程节上的程序包

  • name-->(执行要安装软件的名称,以及软件的版本)
  • state-->(installed安装 absent(卸载)
  • list-->(指定软件名称,查看软件是否可以安装,以及是否已经安装过了)
    几个栗子
    [[email protected] tmp]# ansible 10.0.0.31 -m yum -a "name=iftop state=absent"-->(卸载iftop软件)
    [[email protected] tmp]# ansible 10.0.0.31 -m yum -a "name=iftop state=installed"-->(安装iftop软件)
    [[email protected] tmp]# ansible 10.0.0.31 -m yum -a "list=iftop"-->(查看iftop软件)

    7、service模块

    用于管理远程节点服务运行状态及开机自启

  • name-->(指定要管理的服务名称;注意:管理的服务一定在chkconfig中可以看到)
  • state-->(用于设置服务的状态如:stopped started restarted reloaded)
  • enabled-->(设置服务是否开机自启动,yes表示服务开机自启动 no表示服务开机不要自动启动)

一个栗子
[[email protected] tmp]# ansible 10.0.0.31 -m service -a "name=crond state=stopped enabled=on"-->(将crond这个服务关闭并设置开机不要启动)

8、cron模块

用于管理远端节点的定时任务

  • minute  -->(分)
  • hour   -->(时)
  • day   -->(日)
  • month  -->(月)
  • weekday -->(周)
  • name   -->(指定定时任务的名字)
  • job    -->(要干的事情)
  • state-->(对定时任务执行什么操作如:absent删除定时任务)
  • disabled-->(注释某个定时任务,yes标识注释,no 标识取消注释)

几个栗子

[[email protected] tmp]# ansible 10.0.0.31 -m cron -a "name=empty minute=0 hour=0 job=‘cat /dev/null>/tmp/aa.txt‘ "-->(添加一个定时任务)
[[email protected] tmp]# ansible 10.0.0.31 -m cron -a "name=empty job=‘cat /dev/null>/tmp/aa.txt‘ disabled=yes"-->(注释掉一个定时任务)
[[email protected] tmp]# ansible 10.0.0.31 -m cron -a "name=empty state=absent"-->(删除掉一个定时任务)

(三)、ansible剧本

ansible剧本与Linux当中shell脚本类似,在Linux中如果我们需要执行多条命令实现一个功能这时候我们就可以把这些命令写到一个文件里生成一个shell脚本,而ansible剧本就是将多个ansible命令语法模块写到一个文件里,从而实现一些自动化的,方便的一些功能

1、ansible编写剧本规范

PS:编写规范遵循pyyaml语法规范,我们可以参考官方文档进行学习:https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html
格式说明

  • 短横线“-”表示定义同级别的语法
  • 冒号“:”定义键号后边的值如:姓名: 张三
  • 空格 对内容进行分级,每隔一级前边需要有两个空格
    一个栗子
    使用ansible一键安装httpd服务

    2、执行ansible脚本的方法

  • ansible-playbook httpd.yml执行该剧本
  • ansible-playbook -C httpd.yml 测试该剧本是否可以正常运行

总结:学好ansible的两个重点一是学好ansible的模块二是学好ansible剧本的编写,当然前者是为后者做铺垫的,所以想要学好ansible除了参考官方文档以外还可以使用ansible-doc命名,这个命令相当与shell中的man命令,可以在线寻求帮助

原文地址:http://blog.51cto.com/13268236/2294100

时间: 10-04

ansible批量管理服务详解的相关文章

免密码交互方式+ansible批量管理服务介绍

介绍了ssh服务 1) 远程连接加密传输数据协议,实现远程连接登录,默认端口222)ssh远程连接原理依赖于锁头(公钥)和钥匙(私钥),实现远程加密连接3)ssh基于秘钥远程登录原理a 管理服务器创建秘钥対,将公钥传输发送给给管理端b 管理端请求与被管理端建立连接c 被管理向管理端发送公钥质询d 管理端处理质询信息,实现管理与被管理端免密码交互4)基于ssh协议相关命令ssh scp sftp netstat -lntup |egrep sshd 查看ssh端口 1.1 部署ssh+key (免

Linux(11):期中架构(3)--- SSH远程管理服务 & ansible 批量管理服务

SSH远程管理服务 1. 远程管理服务知识介绍 # 1.1 SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Working Group)制定: 在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输.确保了传递的数据安全. SSH是专为远程登录会话和其他网络服务提供的安全性协议. 利用SSH协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中, 绝大多数企业普遍

Linux:综合架构批量管理服务(ansible)-- 下

综合架构批量管理服务之--ansible 00. 介绍部分 1) 利用剧本功能简单完成服务一键化部署 2) 主机清单配置 3) 剧本的扩展配置功能 4) 多个剧本如何进行整合 5) 剧本的角色目录??? 01. 知识回顾 1) 将所有模块进行了讲解说明 command 模块: 在远程主机上执行命令操作 默认模块 shell 模块: 在远程主机上执行命令操作 万能模块 PS: 有时剧本不能反复执行!!! script 模块: 批量执行本地脚本 copy 模块: 用于批量分发传输数据信息 fetch

Ansible系列命令用法详解与使用

Ansible系列命令用法与使用 在上一个文章中已经完成了Ansible的安装,这片文章主要的用来记录Ansible一些命令的用法详解及其使用场景.好了非话不多说,'上菜吧'. Ansible命令行执行方式有Ad-hoc.Ansible-playbook两种方式.Web化执行方式其官方提供了付费产品Tower(10台以内免费),个人的话可以基于API开发类似的Web化产品.此篇文章主要针对于Ad-hoc.Ansible-playbook两种方式做详细介绍. 什么是Ad-hoc.Ansible-p

CentOS 默认基本服务详解

1.使用chkconfig --list来查看安装的服务,比如我这里最小化安装后的一些服务 [[email protected] ~]# chkconfig --list auditd          0:off   1:off  2:on    3:on    4:on   5:on    6:off crond           0:off   1:off  2:on    3:on    4:on   5:on    6:off ip6tables       0:off  1:off

HTTPD服务详解

HTTPD服务详解 目录 一.httpd的程序版本 二.httpd的特性 三.httpd的功能特性 四.httpd使用 1.httpd的安装 2.程序环境 Httpd-2.2 (Centos6) http-2.4 (Centos7) 五.http配置相关说明 1.修改监听的ip和port 2.持久连接 3.MPM 4.DSO配置指令模块加载 5.定义Main'server文档页面路径 6.站点访问控制 文件系统路径 URL路径 7.<Directory> 中基于源地址实现访问控制 Option

Linux系统进程管理命令详解

Linux管理进程的最好方法就是使用命令行下的系统命令.Linux下面的进程涉及的命令有at, bg, fg, kill, crontab, jobs, ps, pstree, top, nice, renice, sleep, nohup. 1.at命令:定时运行命令 作用:at命令在指定时刻执行指定的命令序列. 格式: at [-V] [-q x] [-f file] [-m] time atq [-V] [-q x] atrm [-V] [-q x] job- batch [-V] [-f

ssh环境搭建与管理(详解)

ssh环境搭建与管理 (详解) 实验环境 服务端:xuegod-63   IP:192.168.1.63 客户端:xuegod-64   IP:192.168.1.64 客户端普通用户:ceshi  密码:123456 安装好扫描软件rpm -ivh /mnt/Packages/nmap-5.21-4.el6.x86_64.rpm 实验目标 1:SSHD服务介绍 2:SSHD服务安装配置 3:两Linux服务器之间数据拷贝 4:SSHD服务作用: 实验步骤 1:搭建环境 1):网桥模式 2):v

Android内存管理机制详解 (zhuan)

http://www.2cto.com/kf/201212/175786.html 与windows内存区别 在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然.这是Linux内存管理的一个优秀特性,在这方面,区别于 Windows的内存管理.主要特点是,无论物理内存有多大,Linux都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能.而Windows是只在需要内存时,才为应用程序分配内存,