Transcript Document

Rex 管理效率提升利器
Lekan 技术部
吴泽林(莫言)
2013/07/24
Rex 是什么



Rex(http://rexify.org)是一个自动化工具,
可用于远程执行、部署和配置管理。
使用 Perl 开发,开源软件。
采用 Apache 2.0 许可证。
简单的例子
Rexfile:
user "rex";
key_auth;
public_key "/data/rex/.ssh/id_rsa.pub";
private_key "/data/rex/.ssh/id_rsa";
desc "Get Disk Free";
task "disk_free", sub {
my $output = run "df -h";
say $output;
};
rex -H "192.168.0.[100..200]” disk_free
定义设备组

定义设备组
group webservers => qw(
192.168.0.100
192.168.0.101
);
rex -G webservers disk_free
在 Perl 中使用
use Rex::Task
my $task = Rex::Task->new(name => "testtask");
$task->set_server("remoteserver");
$task->set_code(sub { say "Hello"; });
$task->modify("no_ssh", 1);
Rex 的功能介绍




远程执行
部署
配置管理
其它功能
远程执行
task run => sub {
my $self = shift;
my $cmd = $self->{cmd};
run $cmd, sub {
my ($data) = @_;
my $server = Rex->get_current_connection()->{server};
say "$server>>\n$data"
};
rux -G allservers run --cmd="df -h"
rux -G allservers run --cmd="test -d /usr/local/nginx &&
/usr/local/nginx/sbin/nginx -s reload"
部署
task prepare => sub {
install "apache2";
service apache2 => ensure => "started";
};
配置管理
task "configure", group => "frontend", sub {
prepare();
file "/etc/apache2/apache2.conf",
source => "files/etc/apache2/apache2.conf",
on_change => sub { service apache2 => "reload"; };
};
其它功能







Hardware - 收集硬件信息
Transaction - 事务支持
FS::File - 远程文件读写
Commands::Cron - Cron 管理
Commands::User - 用户管理
Commands::Iptables - 管理 Iptable
Virtualization::VBox - 管理 Virtualbox
其它功能

完整的 API 列表请参考
http://rexify.org/api/index.html
与其它同类工具的对比




与调用 SSH 的对比
与 Expect 的对比
与 Puppet 的对比
与自主开发工具的对比
与其它同类工具的对比

循环调用 SSH 是不可接受的
与其它同类工具的对比

1.
2.
3.
与 Expect 的对比
Expect 由一系列的 expect 和 send 命令组
成;Rex 由一个个的 Task 组成。
Expect 关心的是字符串的匹配和捕获;
Rex 关心的是更高层的对象,既一个任务
的执行。
Expect 调试麻烦;Rex 方便调试。
与其它同类工具的对比

1.
2.
3.
4.
与 Puppet 的对比
Puppet 使用 Ruby 开发;Rex 使用 Perl 开发。
Puppet 提供一套自己的 DSL;Rex 直接采
用 Perl 语言。
Puppet 完成度高,使用复杂;Rex 方便扩
展,使用相对简单。
Puppet 用户更多;Rex 比较小众。
与其它同类工具的对比

1.
2.
3.
与自主研发工具的对比
自主研发工具和 Rex 都能与现有环境无缝
整合。
自主研发工具开发量大;基于 Rex 再次开
发开发量小。
Rex 拥有社区支持。
Rex 的优缺点


Rex 的优点
Rex 的缺点
Rex 的优缺点

1.
2.
3.
4.
5.
Rex 的优点
不需要 agent。
使用简单,尤其对于 Perler 来说。
方便扩展,方便整合现有环境。
提供一系列方便好用的 API,避免重复开
发。
开发活跃,更新速度快。
Rex 的优缺点

1.
2.
3.
Rex 的缺点
依赖于 SSH。
完成性不高,缺少一些其它工具如 Puppet
提供的 Dashboard 等功能,需要自己开发。
不提供一套自己的 DSL,直接采用 Perl 语
言,对其它语言用户不友好。
最佳应用
1.
2.
3.
4.
废弃原来直接使用 SSH 或者 Expect 脚本
等做法,统一由 Rex 管理。
Rex 的 group 定义默认直接写在 Rexfile 里,
可改为由设备管理数据库中读取。
基于 Rex 的 Web 界面,可使用 Rex::WebUI
或者自主开发 Web 界面。
基于 Rex 的操作日志追踪和审计。
Lekan Rex 应用例子
谢谢大家!