自动化运维工具Ansible
ansible简介:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
- 连接插件connection plugins:负责和被监控端实现通信;
- host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
- 各种模块核心模块、command模块、自定义模块;
- 借助于插件完成记录日志邮件等功能;
- playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
图形介绍:
- 优点:
- no agents:不需要在被控主机上安装任何客户端;
- no server:无服务器端,使用时直接运行命令即可;
- modules in any languages:基于模块工作,可使用任意语言开发模块;
- yaml,not code:使用yaml语言定制剧本playbook;
- ssh by default:基于ssh工作;
- strong multi-tier solution:可实现多级指挥。
- 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
- 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
- 使用python编写,维护更简单,ruby语法过于复杂;
实验环境:
redhat6.5
test1:172.25.254.11 ansible服务器端 安装python2.7模块 ansible
test2:172.25.254.12 客户端 安装python2.7模块
官网:https://www.ansible.com
server端与client端安装python模块:
[root@test1 ~]# yum install -y gcc zlib zlib-devel openssl-devel openssl
[root@test1 ~]# ls //提前下载好python软件包,可打开网页进行下载:https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
Python-2.7.8.tgz
[root@test1 ~]# cd Python-2.7.8
[root@test1 Python-2.7.8]# ./configure --prefix=/usr/local
[root@test1 Python-2.7.8]# make && make install到这里一定要注意,由于我们只是做实验,所以为了虚拟机之后的正常使用,请提前备份/usr/bin/python* ,实验做完之后删除/usr/bin/python* ,然后将备份后的东西还原回去。[root@test1 Python-2.7.8]# mkdir /tmp/python //创建一个备份文件[root@test1 Python-2.7.8]# cp -a /usr/bin/python* /tmp/python //备份原来的python文件
[root@test1 Python-2.7.8]# cp -a /usr/local/include/python2.7/* /usr/local/include/
[root@test1 Python-2.7.8]# cd /usr/bin/
[root@test1 bin]# ln -s /usr/local/bin/python2.7 /usr/local/bin/python
[root@test1 bin]# rm -f /usr/bin/python
[root@test1 bin]# cp /usr/local/bin/python2.7 /usr/bin/python
仅server端安装ansible:
接下来安装setuptools模块
[root@test1 ~]# ls //下载链接: http://ftp.leg.uct.ac.za/pub/packages/macports/distfiles/py-setuptools/
Python-2.7.8.tgz
setuptools-7.0.tar.gz[root@test1 setuptools-7.0]# python setup.py install
安装pycrypto模块
[root@test1 ~]# cd
[root@test1 ~]# ls //下载链接:https://www.dlitz.net/software/pycrypto/
pycrypto-2.6.1.tar.gz
Python-2.7.8
Python-2.7.8.tgz
setuptools-7.0
setuptools-7.0.tar.gz[root@test1 ~]# tar zxf pycrypto-2.6.1.tar.gz
[root@test1 ~]# cd pycrypto-2.6.1
[root@test1 pycrypto-2.6.1]# python setup.py install安装PyYAML模块:
[root@test1 ~]# ls //下载链接:https://pyyaml.org/download/pyyaml/
pycrypto-2.6.1
pycrypto-2.6.1.tar.gz
Python-2.7.8
Python-2.7.8.tgz
PyYAML-3.11.tar.gz
setuptools-7.0
setuptools-7.0.tar.gz[root@test1 ~]# tar zxf PyYAML-3.11.tar.gz
[root@test1 ~]# cd PyYAML-3.11
[root@test1 PyYAML-3.11]# python setup.py install
安装Jinja2模块://下载链接:https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.9.3.tar.gz
[root@test1 ~]# tar zxf MarkupSafe-0.9.3.tar.gz
[root@test1 ~]# cd MarkupSafe-0.9.3
[root@test1 MarkupSafe-0.9.3]# python setup.py install[root@test1 ~]# tar zxf Jinja2-2.7.3.tar.gz //下载链接:https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.7.3.tar.gz
[root@test1 ~]# cd Jinja2-2.7.3
[root@test1 Jinja2-2.7.3]# python setup.py install安装paramiko模块:
[root@test1 ~]# tar zxf ecdsa-0.11.tar.gz https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz
[root@test1 ~]# cd ecdsa-0.11
[root@test1 ecdsa-0.11]# python setup.py install[root@test1 ~]# tar zxf paramiko-1.15.1.tar.gz https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz
[root@test1 ~]# cd paramiko-1.15.1
[root@test1 paramiko-1.15.1]# python setup.py install安装simplejson模块
[root@test1 ~]# tar zxf simplejson-3.6.5.tar.gz https://pypi.python.org/packages/source/s/simplejson/simplejson-3.6.5.tar.gz
[root@test1 ~]# cd simplejson-3.6.5
[root@test1 simplejson-3.6.5]# python setup.py install最后安装ansible
[root@test1 ~]# tar zxf ansible-1.7.2.tar.gz https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
[root@test1 ~]# cd ansible-1.7.2
[root@test1 ansible-1.7.2]# python setup.py install到此ansible就配置完毕啦!!!
接下来继续进行server端配置
[root@test1 ansible-1.7.2]# cd examples/
[root@test1 examples]# ls
ansible.cfg DOCUMENTATION.yml hosts issues playbooks scripts
[root@test1 examples]# mkdir /etc/ansible
[root@test1 examples]# cp hosts ansible.cfg /etc/ansible/
1、SSH免密钥登录设置
[root@test1 ~]# ssh-keygen //生成公私钥对
[root@test1 ~]# cd /root/.ssh
[root@test1 .ssh]# ls //可以看到生成的公私钥对
id_rsa id_rsa.pub known_hosts
[root@test1 .ssh]# ssh-copy-id 172.25.254.11
[root@test1 .ssh]# cd ..
[root@test1 ~]# scp -r .ssh/ 172.25.254.12:/root/ //将公私钥对以及刚生成的认证发送给test2
root@172.25.254.12's password:
known_hosts 100% 1970 1.9KB/s 00:00
id_rsa.pub 100% 392 0.4KB/s 00:00
authorized_keys 100% 392 0.4KB/s 00:00
id_rsa 100% 1675 1.6KB/s 00:00
[root@test1 ~]# ssh 172.25.254.12 //登陆test2,可以看到是免密登陆,即不需要输入test2的root密码就可以登陆test2的主机
当然test2登陆test1也是免密的
[root@test2 ~]# ssh 172.25.254.11
[root@test1 ~]# vim /etc/ansible/hosts //修改配置文件
#[dbservers]
#db01.intranet.mydomain.net
#db02.intranet.mydomain.net
#10.25.1.56
#10.25.1.57
# Here's another example of host ranges, this time there are no
# leading 0s:
#db-[99:101]-node.example.com
172.25.254.12
[root@test1 ~]# ansible all -m ping
[root@test1 ~]# vim /etc/ansible/ansible.cfg
//让ansible连接加速配置
//开启日志
//关闭每次执行ansible时的检查
[root@test1 ~]# vim /etc/ansible/hosts //这里需要注意hosts文件里面的testhosts对应的主机必须已经下载过python2.7
//其他内容都注释掉
[root@test1 ~]# ansible testhosts -m command -a 'w'
[root@test1 ~]# ansible all -m command -a 'uptime'
作为自动化运维工具,ansible当然可以批量的做一些事情
例如:通过ansible可以将本地文件/目录同步到想要发送的客户端
[root@test1 ~]# vim /var/www/html/index.html
[root@test1 ~]# ansible testhosts -s -m copy -a 'src=/var/www/html/index.html dest=/mnt/index.html mode=0755'
发送成功,接下来看看test1和test2是否同步过去文件
[root@test1 tmp]#
[root@test1 tmp]# cd /mnt/
[root@test1 mnt]# ls //可以看到文件已经推送过来
default.conf honeyd-1.5c.tar-2.gz index.html
[root@test1 mnt]# cat index.html
<h1>we are family</h1>
[root@test2 tmp]# cd /mnt/
[root@test2 mnt]# ls
index.html index.php keepalived-2.0.6
[root@test2 mnt]# cat index.html
<h1>we are family</h1>
接下来讲一些ansible常用的模块及命令等
1、setup //用来查看远程主机的一些信息
[root@test1 ~]# ansible all -m setup
2、ping //查看远程主机的运行状态
3、file //设置文件的属性,例如:
[root@test1 ~]# ansible all -m file -a "src=/var/www/html/index.html dest=/tmp/index.html state=link"
具体详解:
backup | 在覆盖远程服务器前将远程服务器的源文件进行备份,备份文件包含时间信息 |
content | 用于替代 'src' ,可以直接设定制定文件的值 |
src | 被链接的本地文件,可以是绝对路径也可以是相对路径,如果路径是目录,则它将递归复制。若路径是用/结尾,则只复制目录里的内容,若没有用/则复制目录里面的所有内容包括时间权限等,类似于rsync,只应用于state=link的情况 |
dest | (必选项)被链接到的路径,要将源文件复制到的(远程主机的绝对路径),只应用于state=link的情况 |
link | 创建软链接 |
hard | 创建硬链接 |
mode | 定义文件/目录的权限(四位数,如:mode=0755) |
group | 定义文件/目录的属组 |
owner | 定义文件/目录的属主 |
path | 必选项,定义文件/目录的路径 |
recurse | 递归设置文件的属性,只对目录有效 |
directory | 如果目录不存在,就创建目录 |
file | 即使文件不存在也不被创建 |
touch | 如果文件不存在,则会创建一个新的文件,如果文件/目录已存在,则更新其最后修改时间 |
absent | 删除目录、文件或者取消链接文件 |
force | 两种情况下需要强制创建软链接,1、源文件不存在,但之后会建立的情况下;2、目标软链接已存在,需要先取消之前的软链接,然后创建新的软链 |
如:
[root@test1 etc]# ansible all -m command -a "ls -al /etc/passwd" //远程文件信息查看
[root@test1 ~]# ansible all -m file -a "src=/etc/passwd dest=/mnt/passwd state=link" //文件链接成功,此时/mnt下有文件passwd
[root@test1 mnt]# ansible all -m command -a "ls -al /mnt/passwd" //此时查看文件存在
[root@test1 mnt]# ansible all -m file -a "path=/mnt/passwd state=absent" //删除文件
[root@test1 mnt]# ansible all -m command -a "ls -al /mnt/passwd" //查看时报错,说明已经删除
4、copy //复制文件到远程主机
5、command //在远程主机上执行命令
参数有:
creates:一个文件名,当该文件存在,则该命令不执行
free_form:要执行的linux指令
chdir:在执行指令之前,先切换到该目录
removes:一个文件名,当该文件不存在,则该选项不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
ansible就介绍到这!!!
如果要还原虚拟机原本的状态不影响yum等命令,可以将之前的文件再还原回去,如下:
[root@test1 ~]# cd /usr/bin/
[root@test1 bin]# ls python*
python python2 python2.6 python.old
[root@test1 bin]# rm -rf python*
[root@test1 bin]# mv /tmp/python/* .
test2和test1的步骤一样,这里就不再赘述。
试一下看虚拟机是否正常可以用:
[root@test1 bin]# yum repolist //若出现这样的报错,可以执行下面的命令
-bash: /usr/bin/yum: /usr/bin/python2.4: bad interpreter: No such file or directory[root@test1 bin]# ls python*
python python2 python2.6[root@test1 bin]# mv python python2.4
相关文章:

jquery 的3D Carousel插件参数说明
这个插件大家都很熟悉了,但是在网上找了很久找不到相关的资料,只有自己琢磨研究了一下。有些参数一眼都可以看出意思,在此我只说一下每个图片要想带一些扩展信息怎么处理。 1:首先需要创建一个ul对象,然后里面每一个li…
利用runtime实现KVO
KVO实现原理 一.关于KVO KVO(Key-Value Observing)提供一种机制,当指定对象的属性被修改后,就会通知观察者。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。 KVO其实也是“观察者”设计模式的一种应用…
Xcode 5.0.1安装插件:规范注释生成器VVDocumenter + OSX 10.9.2
终于有时间停下来玩下Xcode的插件了,最近需要用下规范注释生成器,于是装了个插件用下。 下面是安装过程(简单的不得了): 1.前往GitHub下载工程文件:VVDocumenter-Xcode 2.用Xcode打开工程,Comma…

shell的数字、字符串处理
1、显示小数点前的0 由于bc计算器目前还不支持显示小数点前的0,所以我们要用一用强大的awk工具啦! 例如: echo "scale2; 0.13 0.1" | bc | awk {printf "%.2f", $0} 2、表示1~21的命令 echo seq 1 21 3、shell 将字符串…

Javascript动画效果(四)
Javascript动画效果(四) 前面我们自己写了一个小小的关于js动画的插件,下面我们来使用之前的框架来完成我们想要的动画效果。我们经常在淘宝网中看到,鼠标经过某一图片时,该图片有从上滚出而又从下滚入的效果ÿ…
APP转让时提示:您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息
转让时出现如下问题无法转让: 解决方法: 在TestFlight中,将所有历史构建测试版本均设置为过期: 结果:

PHP shell模式下执行PHP文件报错
1.在shell下直接运行php文件 出现 PHP Deprecated: Comments starting with # are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0 错误提示信息 2.解决办法: 将 vim /etc/php5/cli/conf.d/ming.ini 文件中第一行 # configuration …

时间同步服务器(默认)chrony和ntp
Rhel7时间同步服务器(默认)chrony 端口:323 chrony简介: 是一个开源软件,可实现系统时钟和时钟服务器同步,让时间保持精确 两部分组成:chronyd和chronyc 其中chronyd是后台运行的守护进程,用于调整内…

静态链表实现(A-B)+(B-A)【代码】
-----------------------------------------------第一次发代码,写在前面------------------------------------------------------ 思路不完全等同于严师太的课本,所以代码并不是参照课本。 代码参照《大话数据结构》相应章节,并经过了相应修…

句子单词的逆转
这里我们谈论的是句子单词的逆转。比如you are welcome!翻转成weclome! are you 对于这道题,解题思路可以有很多种,可以以单词为单位,然后交换,比如用you 和weclome!交换,利用两个指针,不断的向后和向前搜索…
【iOS】日历行程的增删改查(完整)
前言 我们可以使用系统提供的EventKit框架来访问和操作用户的日历日程和提醒(虽然日历和提醒是两个独立的app,但是是用同一个框架来处理数据)。同样地,日历和提醒的数据的数据,都是存储在同一个叫做Calendar Database…

ntp 、ntpdate 、chrony 时间同步
ntp服务 Rhel6时间同步服务器(默认)ntp 端口:UDP/123 搭建ntp客户端同步服务 例: 将配置文件/etc/ntp.conf中的server参数注释掉,并添加上自己的时钟同步服务器 server 0.time.qiyi.domain iburst 这里的…
贝塞尔曲线动画demo(仿美人相机效果)
效果如图: 仿美人相机,手势滑动隐藏顶部view。为了方便讲解,将屏幕分为几个区域,如图: 在拖动过程中: 1、拖动距离小于minMoveDistance,贝赛尔曲线发生形变 2、拖动大于minMoveDistance&am…

算法---001
题目:用1、2、3、4、5、6、7、8、9九个数字拼成一个九位数(每个数字恰好用一次),使得它的前三位、中间三位、最后三位的比值是1 : 2 : 3。例如192384576就是一个合法的解,因为192 : 384 : 576 1 : 2 : 3 看到这种要求…
IOS笔记 #pragma mark的用法
简单的来说就是为了方便查找和导航代码用的。 下面举例如何快速的定位到我已经标识过的代码。#pragma mark 播放节拍器- (void) Run:(NSNumber *)tick { //... } OK,那么如何查找呢,点击代码编辑器上面的导航栏即可:接着我修改一下代码:#prag…

shell脚本api接口考虑并发问题的可行性操作
当我们通过收集每台客户端数据后通过api接口上传到云服务器时,可能会由于客户端过多,几千以至于几万,这时不得不考虑个问题: 并发的问题,同时并发上传文件,可能导致api接口挂掉,但如果我们让文件…

ZOJ 2110 Tempter of the Bone(DFS)
点我看题目 题意 : 一个NM的迷宫,D是门的位置,门会在第T秒开启,而开启时间小于1秒,问能否在T秒的时候到达门的位置,如果能输出YES,否则NO。 思路 :DFS一下就可以,不过要注…

java 16 -12 静态导入
静态导入: 格式:import static 包名….类名.方法名; 可以直接导入到方法的级别 静态导入的注意事项: A:方法必须是静态的 B:如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用&…
Quartz 2D Programming Guide笔记
###Graphics Contexts图形上下文### 图形上下文(graphics context)是绘制目标,可以理解为画布,包含着绘图时的参数和设备信息。类型为CGContextRef。获取graphics context后,调用Quartz 2D的函数进行绘制、旋转等操作&…
有关运维面试重点
数据库分为:关系型数据库(mysql、mariadb)和非关系型数据库(redis等) mysql主从复制的原理: 主从复制: master开启binlog日志master和slave的server-id不同slave主动连接master mysql复制是将…
微信应用号开发知识贮备之altjs官方实例初探
天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。从获得微信应用号邀请的业内人士发出来的一张开发工具源码截图可以看到,reacjs及其相应的FLUX框架altjs很有可能会成为前端开发主流。作为行业内人士,自己之前从来没…

Oracle DMP 操作笔记之根据DMP逆向推导出导出的表空间名称
最近在带着一群.NET新兵们在开发和升级一套系统,本人虽然工作好几年,但是也是属于啥都懂一点,啥都不会的队伍,碰到新兵更是蛋都碎了,还特别拘谨,为啥新兵们都是基础知识很不错的,看来要好好练习…
【iOS】中间透明的引导蒙层
需求 如图口袋蜜蜂app一键海报的新手指引图,需求是遮罩层中间透明的,把底层的第一张海报显示出来,如图: 实现 通过UIBezierPath和CAShapeLayer绘制一张中间为透明的黑色半透明遮罩层。 步奏1、新建类PCOnePosterGuide继承自…

python连接数据库,处理数据结果后生成excel文件
# _*_coding:utf-8 _*_ import time import xlwt import os import pymysql import sys import datetime from datetime import datetime, timedelta class writefile: file r"D:\Users\xx\Desktop" #查询数据库结果 def datacommon(self,mounth,day,n,abj)…

WhyGL:一套学习OpenGL的框架,及翻写Nehe的OpenGL教程
最近在重学OpenGL,之所以说重学是因为上次接触OpenGL还是在学校里,工作之后就一直在搞D3D,一转眼已经毕业6年了.OpenGL这门手艺早就完全荒废了,现在只能是重学.学习程序最有效的办法是动手写,光看书是不行了,因为看书的时候很容易陷入对人类两大难题的思考中,以至于进展缓慢.这…

iOS与JS交互的4种方法
iOS与JS交互的方法: 1.拦截url(适用于UIWebView和WKWebView) 2.JavaScriptCore(只适用于UIWebView,iOS7) 3.WKScriptMessageHandler(只适用于WKWebView,iOS8) 4.WebV…

UDP打洞原理
1. NAT分类根据Stun协议(RFC3489),NAT大致分为下面四类1) Full Cone这种NAT内部的机器A连接过外网机器C后,NAT会打开一个端口.然后外网的任何发到这个打开的端口的UDP数据报都可以到达A.不管是不是C发过来的.例如 A:192.168.8.100 NAT:202.100.100.100 C:292.88.88.88A(192.168…

五款常用协议分析处理工具推荐
工欲善其事,必先利其器,一款好的工具,能取到事半功倍的效果。进行协议分析,好的辅助工具必不可少,本文推荐五款最常用且易用的协议分析工具给大家,包括两款综合抓包及分析工具,一款协议重放工具…
【转】android电池(四):电池 电量计(MAX17040)驱动分析篇
关键词:android 电池 电量计 MAX17040 任务初始化宏 power_supply 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:samsung exynos 4210、exynos 4412 、exynos 5250 作者:xubin341719(欢迎转载&…

hihoCoder#1384 : Genius ACM
对于一个固定的区间$[l,r]$,显然只要将里面的数字从小到大排序后将最小的$m$个和最大的$m$个配对即可。 如果固定左端点,那么随着右端点的右移,$SPD$值单调不降,所以尽量把右端点往右移,贪心分割即可。 为了使得扫过的…