天天看点

Fabric远程自动化使用说明

关于Fabric的介绍,可以看官网说明。简单来说主要功能就是一个基于Python的服务器批量管理库/工具,Fabric 使用 ssh(通过 paramiko 库)在多个服务器上批量执行任务、上传、下载。在使用Fabric之前,都用Python的paramiko模块来实现需求,相比之后发现Fabric比paramiko模块强大很多。具体的使用方法和说明可以看官方文档介绍。下面写类一个用paramiko(apt-get install python-paramiko)封装的远程操作类的模板: 

关于更多的paramiko信息可以看官方文档和python运维之paramiko、python远程连接paramiko 模块。本文将要介绍的是Fabric的使用方法。

1.安装

2.参数(fab -h)

①:命令行接口

效果:

不推荐使用命令行,最好都写到一个文件脚本里,方便也安全。

②:脚本

注:默认fabric使用一个名为fabfile.py文件里,如:

如果写到其他文件则需要通过-f来指定执行:

③:参数

定义的执行函数里带参数:

带参数的执行函数执行:

④:模块说明

实例1: 本地操作

用-l查看可以执行的命令函数:

可以执行上面2个执行函数,执行:

上面2个函数合并,并且对外只显示一个执行入口函数(@task):

执行:

实例2:远程操作,env变量

执行看到的信息:执行的函数,命令和命令的输出结果。

远程机器的密码不一致,怎么配置?这时可以用env.passwords来替换env.password:注意格式:user@ip:pwd

实例3:如何让不同服务器组执行不同的操作?如DB和WEB服务器各自执行自己的操作。这里需要用env.roledefs来定义角色组,根据不同的roles来使用execute进行不同的操作。

执行效果:执行get_memory函数,在dbserver中的主机上执行,mkfile_touch函数则在webserver中的主机上执行。

通过env.roledefs和env.passwords指定好了用户名、端口和密码,这时上面2个函数合并,并且对外只显示一个执行函数(@task),还要注意的是因为各自的执行函数处于不同的roles下执行的,要放到一个函数里执行,需要添加:execute(),这样可以在一个执行函数里操作多个远程的机器。 

 View Code

实例4:多台服务器并行执行,@parallel

执行效果:执行函数同时在多个主机上运行,加快执行效率

实例5:输出信息等级设置:with settings(hide(...)):

隐藏:

没有隐藏:

实例6:异常处理、捕获:

异常处理:settings(warn_only=True)遇到错误继续执行还是退出settings(warn_only=False),False是默认方式。

异常捕获:if result.failed:abord()捕获到异常之后直接退出;if result.failed and not confirm("")捕获到异常之后确认退出还是继续 

实例7:通过中转(路由)机连接远程机执行,env.gateway 

效果:本地执行脚本通过中转机来向远程机器上传文件,本机和远程机不需要有关联

实例8:通过ssh key(密钥)登陆

效果:执行脚本的机器通过密钥登陆GATEWAY机器,再在GATEWAY机器上通过账号密码登陆要操作的机器(不确定这里能否也通过SSH密钥登陆?)。

如何建立SSH的密钥连接,在MySQL MHA 搭建&测试里有说明,可以了解一下。 

应用1:带参数批量修改服务器密码

执行效果:

应用2:远程开、关、升级MySQL,并且自动完成MHA相关的切换开启工作。

 View Code 

该脚本执行在Ubuntu上,并且用于Percona5.6、5.7的相关操作,以及mha的切换开启工作。需要注意的是,mysql无密码登陆用了mysql_config_editor和远程开启mha后台运行程序时用到的进程监控(deamon运行)Supervisor程序。

本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1927044,如需转载请自行联系原作者