220 likes | 527 Views
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";
E N D
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 是不可接受的
与其它同类工具的对比 • 与 Expect 的对比 • Expect 由一系列的 expect 和 send 命令组成;Rex 由一个个的 Task 组成。 • Expect 关心的是字符串的匹配和捕获;Rex 关心的是更高层的对象,既一个任务的执行。 • Expect 调试麻烦;Rex 方便调试。
与其它同类工具的对比 • 与 Puppet 的对比 • Puppet 使用 Ruby 开发;Rex 使用 Perl 开发。 • Puppet 提供一套自己的 DSL;Rex 直接采用 Perl 语言。 • Puppet 完成度高,使用复杂;Rex 方便扩展,使用相对简单。 • Puppet 用户更多;Rex 比较小众。
与其它同类工具的对比 • 与自主研发工具的对比 • 自主研发工具和 Rex 都能与现有环境无缝整合。 • 自主研发工具开发量大;基于 Rex 再次开发开发量小。 • Rex 拥有社区支持。
Rex 的优缺点 • Rex 的优点 • Rex 的缺点
Rex 的优缺点 • Rex 的优点 • 不需要 agent。 • 使用简单,尤其对于 Perler 来说。 • 方便扩展,方便整合现有环境。 • 提供一系列方便好用的 API,避免重复开发。 • 开发活跃,更新速度快。
Rex 的优缺点 • Rex 的缺点 • 依赖于 SSH。 • 完成性不高,缺少一些其它工具如 Puppet 提供的 Dashboard 等功能,需要自己开发。 • 不提供一套自己的 DSL,直接采用 Perl 语言,对其它语言用户不友好。
最佳应用 • 废弃原来直接使用 SSH 或者 Expect 脚本等做法,统一由 Rex 管理。 • Rex 的 group 定义默认直接写在 Rexfile 里,可改为由设备管理数据库中读取。 • 基于 Rex 的 Web 界面,可使用 Rex::WebUI 或者自主开发 Web 界面。 • 基于 Rex 的操作日志追踪和审计。