设为首页 收藏本站
查看: 1203|回复: 0

[经验分享] Linux实战教学笔记25:自动化运维工具之ansible (一)

[复制链接]

尚未签到

发表于 2018-1-2 13:44:55 | 显示全部楼层 |阅读模式
第二十五节 ansible之文件的批量分发
  标签(空格分隔): Linux实战教学笔记-陈思齐
  ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/
[TOC]


第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的配置文件:
  

[iyunv@m01 ~]# tree /etc/ansible/  
/etc/ansible/
  
├── ansible.cfg     #ansible配置文件
  
├── hosts           #被ansible管理的主机名单(分组)
  
└── roles
  

  
1 directory, 2 files
  

  编辑ansible的主机配置文件hosts,添加主机组chensiqi
  

[iyunv@m01 ~]# cp /etc/ansible/hosts{,.bak}  #改前备份可是个好习惯  
[iyunv@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继续加工
  

[iyunv@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信息
  

[iyunv@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@  >  
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
  

  
[iyunv@m01 ~]#
  

  示例2:获取整个chensiqi主机组的对应的“w”信息
  

[iyunv@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@  >  
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@  >  
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@  >  
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@  >  
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@  >  
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
  

  
[iyunv@m01 ~]#
  

  

  示例3:调用ansible内置的copy模块
  

[iyunv@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
  
}
  
[iyunv@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
  

  
[iyunv@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
  
[iyunv@m01 ~]#
  

  

  

  
命令说明:
  
-m:调用ansible内置模块   copy  拷贝模块
  
-a:接命令。由于调用了copy模块,命令格式发生改变。src=本地文件路径 dest=目的地所在路径
  

  示例4:调用copy模块实现保存文件的属性改变
  

[iyunv@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
  
}
  
[iyunv@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 先将脚本分发到各个机器上去
  [iyunv@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"
  示例:
  

[iyunv@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 查看指定模块用法

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430804-1-1.html 上篇帖子: 晓风残梦 下篇帖子: Char05 Ansible 最佳实践
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表