麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Perl > 正文

Perl集群配置管理系統(tǒng)Rex簡(jiǎn)明手冊(cè)

2020-10-31 15:16:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Rex 是 Perl 編寫的基于 SSH 鏈接的集群配置管理系統(tǒng),語(yǔ)法上類似 Puppet DSL。官網(wǎng)中文版見(jiàn) http://rex.perl-china.com 。本文僅為本人在部門 Wiki 上編寫的簡(jiǎn)介性文檔。

常用命令參數(shù)

rex 命令參數(shù)很多,不過(guò)因?yàn)槲覀兊沫h(huán)境是 krb 認(rèn)證的,所以有些參數(shù)只能寫在 Rexfile 里。所以一般固定在存放了 Rexfile 的 /etc/puppet/webui 下執(zhí)行命令,很多配置就自動(dòng)加載了。那么還需要用到的命令參數(shù)基本就只有下面幾個(gè):
-Tv: 查看當(dāng)前 Rexfile 里定義了哪些 Task 任務(wù),以及服務(wù)器組。
-H: 指定 Task 將在哪些 Host 上執(zhí)行。這里比較方便的地方是支持 10.5.16.[95..110] 這樣的寫法。
-G: 指定 Task 將在哪些 Group 上執(zhí)行。Group 的定義方式很多,Rex 默認(rèn)支持的有直接在 Rexfile 里通過(guò) group 指令指定,通過(guò) ini 配置文件設(shè)定等等。目前我是實(shí)現(xiàn)了一個(gè) groups_db 指令,來(lái)從我們的 sqlite 里獲取。groups_db('cdnbj::nginx') 就會(huì)自動(dòng)生成一個(gè)名叫 ‘cdnbj::nginx' 的服務(wù)器組,包括 cdnbj 里所有部署了 nginx 的服務(wù)器。
-e: 指定一個(gè)臨時(shí)任務(wù)。通常是'say run “ipconfig”‘這樣的簡(jiǎn)單命令形式。如果需要復(fù)雜邏輯,還是在 Rexfile 里書寫 Task。
-q:指定運(yùn)行日志級(jí)別,有 -q 和 -qq。
-d:指定運(yùn)行日志級(jí)別,有 -d 和 -dd。

Rexfile 介紹

參數(shù)設(shè)置部分:

復(fù)制代碼 代碼如下:

    set connection => "OpenSSH";
    user "root";
    krb5_auth;
    parallelism 10;

這四行指定采用 kerberos 認(rèn)證,并發(fā) 10 個(gè)進(jìn)程執(zhí)行 ssh 命令。
復(fù)制代碼 代碼如下:

    desc "install puppet agent";
    task "puppet_install", sub {
    }
    before "puppet_install", sub {
    }
    after "puppet_install", sub {
    }

這幾行就是 Rexfile 的任務(wù)定義主體格式。task 指令定義任務(wù),任務(wù)會(huì)在具體的 -H 或者 -G 服務(wù)器上執(zhí)行。其他都是可選項(xiàng),desc內(nèi)容會(huì)在 -Tv 的時(shí)候顯示;before 和 after 定義的任務(wù)會(huì)在執(zhí)行對(duì)應(yīng) task 之前或之后,在'''rex命令執(zhí)行處,即10.4.1.21本地'''執(zhí)行。

常用指令介紹

run

運(yùn)行命令。如果有回調(diào)函數(shù),那么會(huì)把 stdout 和 stderr 傳給回調(diào)函數(shù);如果沒(méi)有,直接把 stdout 作為返回值。

比如:

復(fù)制代碼 代碼如下:

say run "uptime";
    run "nginx -v", sub { my ($out, $err) = @_; say $err };

file

分發(fā)文件。語(yǔ)法類似 Puppet 的 file。支持 source、template、ensure、on_change 等操作。注意:rex 是順序執(zhí)行 Rexfile 的,所以不用設(shè)置 Puppet 的 require 指令。

比如:

復(fù)制代碼 代碼如下:

    file "/etc/yum.repos.d/xiaonei-private.repo",
      source => "repos/xiaonei-private.repo";
    file "/etc/nginx/nginx.conf",
      content => template("templates/etc/nginx/nginx.conf.tpl"),
      owner  => "nginx",
      group  => "nginx",
      mode   => 644,
      ensure => 'file',
      on_change => sub { service nginx => "restart"; };
    file "/etc/nginx/conf.d",
      ensure => "directory",

pkg

安裝軟件包,在早期版本命令寫作 install package => "nginx" ,最近改成 pkg 了,更像 Puppet 語(yǔ)法了。

也支持傳遞數(shù)組作為 pkg 內(nèi)容。另外,rex 還 提供了一個(gè) update_package_db 指令,用于執(zhí)行 yum clean all 或者 apt-get update 操作。這點(diǎn)是 Puppet 欠缺的。

比如:

復(fù)制代碼 代碼如下:

 update_package_db();
   my $packages = case operating_system,
      Debian => ["apache2", "libphp5-apache2"],
      CentOS => ["httpd", "php5"],
   pkg $packages,
     ensure => "present";

ensure 也支持 present、absent、latest 等幾種含義。同 Puppet。

account

用戶管理原先用 create_user 和 create_group 指令,最近把 create_user 更新為 account 指令。

比如:

復(fù)制代碼 代碼如下:

  create_group 'puppet';
  account "puppet",
    ensure   => "present",
    uid      => 509,
    home     => '/home/puppet',
    comment  => 'Puppet Account',
    expire   => '2015-05-30',
    groups   => ['puppet'],
    password => 'puppet',
    system   => 1,
    no_create_home => TRUE,
    ssh_key        => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChUw...";

tail

用來(lái)同時(shí)觀測(cè)多臺(tái)主機(jī)的日志的最新追加情況。應(yīng)該是比較有用的一個(gè)小功能。代碼如下:

復(fù)制代碼 代碼如下:

   tail "/var/log/syslog", sub {
     my ($data) = @_;
     my $server = Rex->get_current_connection()->{'server'};
     print "$server>> $data/n";
   };

遠(yuǎn)程主機(jī)詳情相關(guān)變量

Puppet 有專門的 Facts 變量來(lái)判定遠(yuǎn)程主機(jī)的詳情。Rex 因?yàn)樽?SSH 連接,不會(huì)在遠(yuǎn)程主機(jī)上跑一個(gè) agent 來(lái)收集這些信息,所以還是通過(guò)遠(yuǎn)程執(zhí)行命令的方式來(lái)提供相關(guān)內(nèi)容。目前常用的幾個(gè)函數(shù)(也可以認(rèn)為是變量)有:

is_redhat

這個(gè)用來(lái)判斷操作系統(tǒng)是否是 RedHat 系列。之前因?yàn)橛幸慌?Debian 的機(jī)器,所以 Rexfile 里一直有這么個(gè)操作邏輯:

復(fù)制代碼 代碼如下:

    if ( is_debian ) {
    } elsif ( is_redhat ) {
    } else {
    }

operating_system_version

這個(gè)用來(lái)判斷具體的操作系統(tǒng)版本號(hào)。比如 CentOS5 跟 CentOS6 應(yīng)該應(yīng)用的操作就不一樣,甚至 CentOS6.5 和 CentOS6.2 也有可能不一致。

比如 Rexfile 里的 1w10 任務(wù):

復(fù)制代碼 代碼如下:

    if ( is_redhat and operating_system_version >= 64 )
    }

route

rex 可以收集的信息比 puppet 要多很多,比如網(wǎng)絡(luò)相關(guān)、sysctl 相關(guān)等等。Rexfile 里的 1w10 任務(wù)用到了 route 信息來(lái)獲取默認(rèn)網(wǎng)關(guān)和網(wǎng)卡接口。

復(fù)制代碼 代碼如下:

    my ($default_route) = grep {
      $_->{"flags"} =~ m/UG/ && (
        $_->{"destination"} eq "0.0.0.0" ||
        $_->{"destination"} eq "default" )
      } route;
    if ($default_route) {
        my $default_gw = $default_route->{"gateway"};
        my $default_if = $default_route->{"iface"};
        run "ip route change default via ${default_gw} dev ${default_if} initcwnd 10 initrwnd 10";
    };

connection

在多臺(tái)主機(jī)執(zhí)行任務(wù)的時(shí)候,大多希望在輸出的時(shí)候看到某條結(jié)果是哪個(gè)主機(jī)返回的。前面 tail 任務(wù)就用到了,不過(guò)寫起來(lái)非常復(fù)雜的樣子。其實(shí) rex 提供給更簡(jiǎn)潔一點(diǎn)的寫法。就是 connection->server。

復(fù)制代碼 代碼如下:

  task 'tellmewhoyouare', sub {
    say connection->server;
  }

當(dāng)前連接的服務(wù)器的整個(gè)信息,也可以通過(guò) get_system_information 指令來(lái)獲取,這兩個(gè)指令其實(shí)是等同的。不過(guò)根據(jù)字面意思一般用來(lái)不同語(yǔ)境下。

這些信息如果要完整查看,可以通過(guò) dump_system_information 指令來(lái)查看。這個(gè)命令跟 print Dumper get_system_information() 不一樣的是,會(huì)把每個(gè)鍵作為單獨(dú)變量。而這些變量就是可以直接用于 rex 的 template 里的內(nèi)嵌變量。比如:

復(fù)制代碼 代碼如下:

  listen <%= $eth0_ip %>:80;
  visible_hostname <%= $hostname %>

不在 dump_system_information 清單里的變量,也想在 template 里使用的,就必須顯式傳遞。這點(diǎn)和 Puppet 不一致,puppet 在 template 里可以通過(guò) scope.lookupvar() 指令獲取任意pp類里設(shè)定的變量,這一點(diǎn)完全無(wú)視詞法作用域的存在==!

比如:

復(fù)制代碼 代碼如下:

   file '/etc/elasticsearch/elasticsearch.yml',
     content => template('files/es.yml.tmpl', conf => {
       clustername => 'logstash'
     });

對(duì)應(yīng)的 es.yml.tmpl 里寫作:
復(fù)制代碼 代碼如下:

  clustername: <%= $conf->{'clustername'} %>

這樣才行。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产精品色综合 | 国产午夜网| 最污网站| 精品中文字幕在线播放 | 日本视频免费观看 | www.com国产精品| 欧美一级爱操视频 | 精品国产91一区二区三区 | 黄视频网站免费在线观看 | 电影av在线 | 99国产精品国产免费观看 | 99re66热这里只有精品8 | 久久久久久久久久美女 | 亚洲成人在线视频网站 | 亚洲精品久久久久久久久久 | 国产精品久久国产精品 | 欧美日韩高清不卡 | 激情亚洲一区二区 | 久久精品日产第一区二区三区 | 7777奇米成人四色影视 | 色婷婷tv| 91网页 | 一区二区三区精品国产 | 国产三级a三级三级 | 1314成人网| 性看小视频| 国产精品久久久久久久久久 | 成人午夜免费av | 日本残忍极度灌浣肠视频 | 国产成人精品二区 | 国产1区在线观看 | 久久久久免费精品国产小说色大师 | 午夜精品久久久久久久久久久久久蜜桃 | 黄色一级片免费在线观看 | 中日韩乱码一二新区 | 宅男视频在线观看免费 | 免费一级在线 | 国产影视 | 欧美a级毛片 | 日本大片在线播放 | 免费视频一区 |