Linux实战教学笔记25:自动化运维工具之ansible (一)
第二十五节 ansible之文件的批量分发
标签(空格分隔): Linux实战教学笔记-陈思齐
---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/
第1章 介绍:
python语言是运维人员必会的语言!
ansible是一个基于Python开发的自动化运维工具
ansible的功能实现基于SSH远程连接服务
ansible可以实现批量系统配置,批量软件部署,批量文件拷贝,批量运行命令等功能
特点:
1)不需要单独安装客户端,基于系统自带的sshd服务,sshd就相当于ansible的客户端
2)不需要服务端
3)需要依靠大量的模块实现批量管理
4)配置文件/etc/ansible/ansible.cfg
第2章 IP列表
服务器说明 | 外网IP | 内网IP | 主机名 |
---|---|---|---|
apache web | 10.0.0.7/24 | 172.16.1.7/24 | web02 |
nginx web | 10.0.0.8/24 | 172.16.1.8/24 | web01 |
NFS存储服务器 | 10.0.0.31/24 | 172.16.1.31/24 | nfs01 |
rsync备份服务器 | 10.0.0.41/24 | 172.16.1.41/24 | backup |
管理服务器 | 10.0.0.61/24 | 172.16.1.61/24 | m01 |
第3章 必备准备
实现从管理机m01到其他机器的密钥认证关系:
3.1 sshpass非交互方式工具使用
请参考http://www.cnblogs.com/chensiqiqi/p/6550221.html《实战教学笔记第二十四节》
3.2 开始安装ansible
搭建企业yum仓库及定制rpm包是自动化运维关键内容,在实战教学笔记第三阶段在进行讲解。
3.2.1 管理端m01安装ansible
需要epel.repo源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install ansible
3.2.2 所有被管理端需要安装:
yum -y install libselinux-python
3.2.3 ansible基础配置
ansible的配置文件:
[root@m01 ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg #ansible配置文件
├── hosts #被ansible管理的主机名单(分组)
└── roles
1 directory, 2 files
编辑ansible的主机配置文件hosts,添加主机组chensiqi
[root@m01 ~]# cp /etc/ansible/hosts{,.bak} #改前备份可是个好习惯
[root@m01 ~]# tail -6 /etc/ansible/hosts
[chensiqi]
172.16.1.31
172.16.1.41
172.16.1.61
172.16.1.7
172.16.1.8
如果设置了ssh密钥连接的话,hosts文件到这里就算配置完毕了。但是我们还没有设置,因此还需要对ansible的主机映射文件/etc/ansible/hosts继续加工
[root@m01 ~]# tail -6 /etc/ansible/hosts
[chensiqi]
172.16.1.31 ansible_ssh_user=root ansible_ssh_pass=登录密码
172.16.1.41 ansible_ssh_user=root ansible_ssh_pass=登录密码
172.16.1.61 ansible_ssh_user=root ansible_ssh_pass=登录密码
172.16.1.7 ansible_ssh_user=root ansible_ssh_pass=登录密码
172.16.1.8 ansible_ssh_user=root ansible_ssh_pass=登录密码
命令说明:
ansible_ssh_user:ssh连接的用户名
ansible_ssh_pass:ssh连接的密码
注意:
如果没有做密钥认证,hosts又没有如上方式配置的话,ansible进行远程连接是会失败的。
3.2.4 利用ansible远程批量执行命令
语法:
ansible chensiqi -m command -a 'uptime'
ansible 主机组 -m ansible内置功能模块名 -a 命令
ansible命令测试
示例1:获取172.16.1.8的主机的w信息
[root@m01 ~]# ansible 172.16.1.8 -m command -a "w"
172.16.1.8 | SUCCESS | rc=0 >>
13:44:07 up 5:32, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 14:16 0.07s 0.07s -bash
root pts/0 172.16.1.1 Mon23 13:29m 0.08s 0.00s -bash
root pts/1 m01 13:44 0.00s 0.14s 0.00s /bin/sh -c /usr
[root@m01 ~]#
示例2:获取整个chensiqi主机组的对应的“w”信息
[root@m01 ~]# ansible chensiqi -m command -a "w"
172.16.1.8 | SUCCESS | rc=0 >>
13:45:12 up 5:33, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Sat09 15:21 0.07s 0.07s -bash
root pts/0 172.16.1.1 Mon23 13:30m 0.08s 0.00s -bash
root pts/1 m01 13:45 0.00s 0.12s 0.00s /bin/sh -c /usr
172.16.1.61 | SUCCESS | rc=0 >>
21:05:58 up 6:34, 3 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 14:41 4:22m 0.07s 0.07s -bash
root pts/0 172.16.1.1 16:44 2.00s 1.11s 0.67s /usr/bin/python
root pts/8 m01 21:05 1.00s 0.10s 0.00s /bin/sh -c /usr
172.16.1.7 | SUCCESS | rc=0 >>
12:05:07 up 1:05, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 11:00 26:21 0.09s 0.09s -bash
root pts/0 m01 12:05 0.00s 0.30s 0.00s /bin/sh -c /usr
172.16.1.41 | SUCCESS | rc=0 >>
22:36:51 up 18:39, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - 03:58 58:54 0.11s 0.11s -bash
root pts/0 m01 22:36 0.00s 0.32s 0.00s /bin/sh -c /usr
172.16.1.31 | SUCCESS | rc=0 >>
13:45:13 up 6:49, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 - Mon20 13:42 0.15s 0.15s -bash
root pts/0 m01 13:45 0.00s 0.30s 0.00s /bin/sh -c /usr
[root@m01 ~]#
示例3:调用ansible内置的copy模块
[root@m01 ~]# ansible 172.16.1.8 -m copy -a "src=/etc/hosts dest=/tmp" #输入命令
172.16.1.8 | SUCCESS => {
"changed": true,
"checksum": "dba0126bf49ea8d4cdc476828f9edb37085c6afe",
"dest": "/tmp/hosts",
"gid": 0,
"group": "root", #文件复制过去以后的属组
"md5sum": "09bad48d0c62411850fd04b68f836335",
"mode": "0644", #文件复制过去以后的权限
"owner": "root", #文件复制过去以后的属主
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 294,
"src": "/root/.ansible/tmp/ansible-tmp-1489411262.1-267125154401179/source",
"state": "file",
"uid": 0
}
[root@m01 ~]# ansible 172.16.1.8 -m command -a "ls /tmp" #查看一下对方主机目录下有啥
172.16.1.8 | SUCCESS | rc=0 >>
ansible_0qlGau
hosts #在这里呢,拷贝成功
pulse-d3qHAaSjkIhZ
pulse-PbcqlrG9QxEK
virtual-root.yrc60j
yum.log
[root@m01 ~]# ssh root@172.16.1.8 "ls /tmp" #用ssh再看一下
`root@172.16.1.8's password: `
hosts #在这里呢拷贝成功
pulse-d3qHAaSjkIhZ
pulse-PbcqlrG9QxEK
virtual-root.yrc60j
yum.log
[root@m01 ~]#
命令说明:
-m:调用ansible内置模块 copy 拷贝模块
-a:接命令。由于调用了copy模块,命令格式发生改变。src=本地文件路径 dest=目的地所在路径
示例4:调用copy模块实现保存文件的属性改变
[root@m01 ~]# ansible 172.16.1.8 -m copy -a "src=/etc/hosts dest=/tmp owner=chensiqi group=chensiqi mode=600"
172.16.1.8 | SUCCESS => {
"changed": true,
"checksum": "dba0126bf49ea8d4cdc476828f9edb37085c6afe",
"dest": "/tmp/hosts",
"gid": 502,
"group": "chensiqi",
"mode": "0600",
"owner": "chensiqi",
"path": "/tmp/hosts",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 294,
"state": "file",
"uid": 502
}
[root@m01 ~]# ssh root@172.16.1.8 "ls -l /tmp/hosts"
`root@172.16.1.8's password: `
-rw-------. 1 chensiqi chensiqi 294 3月 14 14:00 /tmp/hosts
命令说明:
对于ansible内置模块的使用,大家参考命令执行后的返回信息里看就可以了。写的很清楚。
备注:
copy模块,如果复制的对方主机路径下没有目录,那么会递归创建
特别提示:
ansible的部分模块并不支持
1)管道符 “|”
2)重定向 “> < >> <<”
3)类似top,tail -f这种不能即刻返回明确信息的命令
4)*
3.3 利用ansible远程执行各类脚本
3.3.1 先将脚本分发到各个机器上去
[root@m01 ~]# echo "echo '测试成功!'" >> /server/scripts/test.sh
ansible chensiqi -m copy -a "src=/server/scripts/yum.sh dest=/server/scripts/ mode=0755 backup=yes"
注意:dest路径的写法,若是不存在的目录,结尾要加斜线(/server/scripts/),否则默认不会创建目标目录
3.3.2 远程批量执行脚本
ansible chensiqi -m shell -a "/server/scripts/yum.sh"
示例:
[root@m01 ~]# ansible chensiqi -m command -a "sh /server/scripts/test.sh"
172.16.1.41 | SUCCESS | rc=0 >>
测试成功!
172.16.1.31 | SUCCESS | rc=0 >>
测试成功!
172.16.1.7 | SUCCESS | rc=0 >>
测试成功!
172.16.1.8 | SUCCESS | rc=0 >>
测试成功!
172.16.1.61 | SUCCESS | rc=0 >>
测试成功!
第4章 常用模块:每个模块就是一个功能
模块名 | 作用 |
---|---|
command | 执行命令模块(重要) |
copy | 文件拷贝模块(重要) |
shell | 执行shell脚本模块(重要) |
script | 执行shell脚本模块(重要) |
file | 设定文件属性模块 |
service | 系统服务管理模块 |
cron | 计划任务管理模块 |
yum | yum软件包安装管理模块 |
synchronize | 使用rsync同步文件模块 |
第5章 查看Ansible的帮助
ansible-doc -l 查看所有的模块
ansible-doc -s service 查看指定模块用法
Linux实战教学笔记25:自动化运维工具之ansible (一)的更多相关文章
- 自动化运维工具之 Ansible 介绍及安装使用
一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...
- 自动化运维工具之ansible
自动化运维工具之ansible 一,ansible简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fab ...
- 自动化运维工具:ansible
自动化运维工具:ansible Ansible(1):简介和基本概念 Ansible(2):安装配置 Ansible(3):ansible资源清单管理 Ansible(4):常用模块
- Linux实战教学笔记21:Rsync数据同步工具
第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...
- 项目实战10.1—企业级自动化运维工具应用实战-ansible
实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...
- 自动化运维工具之ansible(转)
原文链接:http://os.51cto.com/art/201409/451927_all.htm
- Linux实战教学笔记
Linux实战教学笔记01:计算机硬件组成与基本原理 Linux实战教学笔记02:计算机系统硬件核心知识 Linux实战教学笔记03:操作系统发展历程及系统版本选择 Linux实战教学笔记04:Lin ...
- 企业级LINUX自动化运维工具Ansible实战课程下载
什么是Ansible? Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量 ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
随机推荐
- node源码详解 (一)
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource1 本博客同步在https://cnodejs.o ...
- 简单加解密算法 - vb.net
Public Class Form1 Dim charAarray() As Char '加密 Private Sub Btn_En_Click(sender As System.O ...
- Crystal框架配置参数加载机制详解?
前言 定义 配置参数定义的形式 配置参数文件定义在哪里? 配置参数加载的优先级 如何使用配置参数? 最佳实践 Jar项目中如何定义配置参数? War项目中如何定义或重载Jar包中的配置参数? 开发人员 ...
- 关于flash擦除的方法
一般的Flash,只允许写时将1变成0,而不允许0变成1:仅当擦除时将0变成1.所以写全0xff是没什么意义的 以前对flash只能进行一次写很困惑,这句话解释了原因. norflash就是 对bit ...
- Java文件中为什么只能有一个public修饰的类, 并且类名还必须与文件名相同
当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元).每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包 ...
- iOS获取本地时间
NSDate *currentDate = [NSDate date];//获取当前时间,日期 NSDateFormatter *dateFormatter = [[NSDateFormatter a ...
- 【4N魔方阵】
/* 4N魔方阵 */ #include<stdio.h> #include<stdlib.h> #define N 8 int main(void){ int i, j; ] ...
- app集成微信支付服务端代码-php版本
1.微信支付分为两种,一种是微信公众品台的微信支付,另一种是微信开放平台的微信支付 2.上周做的是开放品台的微信支付,把遇到的问题总结一下 第一,下载官方提供的代码,解压后放到根目录下,然后认真读文档 ...
- 5分钟快速入门 - Less
下面给大家讲解下Less,纯手工,入门级别,相信没学过的人阅读完后就懂了,以下是我要讲的四点: 简单介绍 Less CSS 是一个使用广泛的 CSS 预处理器. 对 CSS 进行扩展,减少很多 CSS ...
- DataAdapter&&DataSet 帮助理解小程序
// 2105/07/08 // DataAdapter&&DataSet using System; using System.Collections.Generic; using ...