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 应用例子
谢谢大家!