背景
最近公司服务器从单机扩展到三机,新环境的搭建和部署也采用了新的自动化方式:Fabric。
什么是Fabric
用Fabric其实就是一套用Python封装了基于SSH的常见操作的库。因此,它的优势显而易见:
- 你可以用Python代理Shell来做运维工作。
- 方便集中式管理多台服务器。
怎样使用Fabric
有Python基础的程序员对Fabric一点都不会陌生,因为它就是Python。
我们先从一个简单的例子开始:
1 2 3 4 | |
1
| |
上面例子的便是实用fabric在local环境下执行命令uname,就是这么简单。下面在看一个在remote环境下的操作:
1 2 3 4 5 6 7 8 | |
1
| |
注意,这次我们用run代替了local,它的意思是在remote机器上执行某命令。当然,能够从local连接到remote,并且有执行权限才可以执行,这些都是可以在env中指定的。env结论是整个fabric脚本执行中的一个全局变量,env.user,env.key_filename和env.password都是env的保留关键字,分别指明登陆remote的user,密钥以及密码。密钥和密码可以是二选一。密码在使用sudo命令的时候是必须的。
如果我们想要管理多台remote服务器的时候该怎么做呢?好,我现在开始介绍。
首先,我需要引入Fabric中的一个概念:role。你可以把role理解成remote的标识,它可以是一个remote,也可以是一组remotes,通常我们在fabfile中是用env.roledefs来定义的,然后通过指定env.roles来决定使用那一个/组roles。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
1 2 3 4 5 6 7 8 | |
看到这里,你是否发现其实fab就是在依次执行后面的方法。嗯,其实道理就是这么简单。
现在,你就可以用Fabric进行自己的集群运维管理了。提示一下,下面两个API不多,先好好了解下Fabric都可以做些什么吧:
- Core API
- Contrib API
- 提供一个完整的Fabfile做参考:fabfile.py