大规模服务器管理利器 Fabric

 

Fabric是什么Fabric是对服务器进行系统管理、应用部署的自动化脚本工具,特点是可以便捷的支持多台...



Fabric 是什么

Fabric 是对服务器进行系统管理、应用部署的自动化脚本工具,特点是可以便捷的支持多台服务器

在一个脚本文件中就可以对多台服务器执行相同或不同的任务

Fabric基于Python,提供了一套简洁的命令集,可以执行常规任务,例如:在本机或者远程服务器执行shell命令、上传/下载文件、提示用户输入进行交互操作等

还有很多高级功能,例如:对服务器进行分组、并行执行任务、对执行错误进行处理等

应用案例

Instagram 是 Facebook 旗下的一个大型图片社交应用,有上千台服务器

Instagram 的持续部署系统每天需要进行30次以上的代码部署

在使用 Facebook 的分布式部署系统之前,Instagram 就是使用 Fabric 进行超大规模的服务器管理和应用部署

可见 Fabric 功能的强大

使用示例

通过几个简单的示例了解一下Fabric的使用方式

(1) Hello World

新建脚本: fabfile.py

def hello():

print("Hello world!")

命令行执行:

$ fab hello

fabfile.py 是默认执行的文件名,也可以使用其他名字,在执行时需要指定文件

$ mv fabfile.py hello.py

$ fab -f hello.py hello

(2)传入参数

def hello(name, val):

print("%s %s!" % (name, val))

执行

$ fab hello:name=hi,val=world

(3)执行本机命令

from fabric.api import local, lcd

def ls():

with lcd('~'):

local('ls')

lcd - local cd 命令

local - 在本机执行指定命令

(4)混合执行本地和远程服务器命令

from fabric.api import local,cd,run, env

env.hosts=['root@11.28.10.31:28',]

env.password = 'password'

def do_local():

local('echo "in local"')

def do_remote():

print "in remote"

with cd('~'):

run('ls -l')

def opt():

do_local()

do_remote()

执行结果



env.hostsenv.password 定义了远程服务器访问信息

然后定义了3个任务,do_local 执行本地任务,do_remote 执行远程任务,opt 调用了前面两个任务

cd、run 都是在远程服务器执行命令,对应的lcd、local 是在本地执行命令

(5)不同服务器上执行不同的任务

#!/usr/bin/env python

# encoding: utf-8

from fabric.api import *

env.roledefs = {

'testserver': ['root@11.28.10.31:28'],

'realserver': ['root@41.12.56.19:22', ]

}

env.passwords = {

'root@11.28.10.31:28': "password",

'root@41.12.56.19:22': "password",

}

@roles('testserver')

def task1():

run('ls /home')

@roles('realserver')

def task2():

run('ls /home')

def dotask():

execute(task1)

execute(task2)

执行结果



env.roledefs 为服务器组定义了角色

@roles 指定任务在哪个角色的服务器上执行

重要特性:任务的并行执行

并行执行非常强大,尤其在服务器数量非常多时,让服务器间并行执行任务将会节省大量时间

默认情况下,任务都是顺序执行的,例如定义两个任务

from fabric.api import *

def update():

# 任务逻辑

def reload():

# 任务逻辑

在3个服务器中执行这两个任务

$ fab -H web1,web2,web3 update reload

执行结果是这样的:

update on web1

update on web2

update on web3

reload on web1

reload on web2

reload on web3

通过 -P 参数,可以开启并行执行功能

$ fab -H web1,web2,web3 -P update reload

执行结果就会是这样:

update on web1, web2, and web3

reload on web1, web2, and web3

还可以通过任务注解来声明是并行还是顺序执行,例如

from fabric.api import *

@parallel

def runs_in_parallel():

# ...

@serial

def runs_serially():

# ...

执行任务

$ fab -H host1,host2,host3 runs_in_parallel runs_serially

执行结果

runs_in_parallel on host1, host2, and host3

runs_serially on host1

runs_serially on host2

runs_serially on host3

安装

Fabric 是基于 python 的,先装好 python 环境

然后通过系统的包管理器来安装

ubuntu

$ sudo apt-get install fabric

centos

$ yum install fabric

Fabric官网 http://www.fabfile.org

点击 阅读原文 查看 文章列表


    关注 性能与架构


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册