码迷,mamicode.com
首页 > Web开发 > 详细

通过Rex + module的形式来分发配置文件到不同服务节点 以及集中控制各节点的web服务

时间:2015-09-06 09:54:06      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:

1,所有业务的测试机不同的node跑不同的业务(通过hosts查看)

[root@localhost rex]# cat /etc/hosts
127.0.0.1  mail.weike.com mx localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.128    node1    caisen
192.168.0.129    node2    mail
192.168.0.45     node3    guanwang
192.168.0.164    node4    shopwap
192.168.0.193    node5    gerenwap
192.168.0.196    node6    appwap
192.168.0.224    node7    geren
192.168.0.226    node8    chaoshi
192.168.0.228    node9    quanguo
192.168.0.215    node10    boss


2,分别将不同的web服务以模块的形式组织起来进行集中管理,,Rexfile配置信息如下:

use Rex -feature => [‘1.3‘];
use strict;
use warnings;
#use Data::Dumper;
#针对不同的服务类型通过模块化配置
require Servers::Quanguo;
require Servers::Chaoshi;
require Servers::Geren;
require Servers::Boss;
require Servers::Shopwap;
require Servers::Gerenwap;
require Servers::Appwap;
require Servers::Guanwang;
#远程连接登陆方式
private_key "/root/.ssh/id_rsa";
public_key "/root/.ssh/id_rsa.pub";
#设置线程数
parallelism ‘max‘;
#所有服务器节点
group all_servers       =>"node[1..6]";
group test_servers      =>"node[1..2]";
desc "关闭所有节点上的tomcat和weblogic服务";
task "stop_web",group=>"all_servers",sub{
        #my @ps=ps();
        #print Dumper(@ps);
        #my @list=grep{$_->{"command"}==-5}ps("command","ni");
        for my $proc(ps()){
                if($proc->{"command"}=~/java.*tomcat/is){
                        run "./shutdown.sh",
                                cwd     =>"/usr/local/tomcat/bin",
                                only_if =>"pgrep java";
                        say "tomcat服务关闭完成";
                        exit 0;
                }elsif($proc->{"command"}=~/java.*?node1.*?weblogic/is){
                        run "stop_node.sh",
                                only_if=>"pgrep java";
                        say "weblogic服务关闭完成";
                        exit 0;
                }else{
                        next;
                }
        }
        say "服务已经关闭";
};
desc "启动所有节点上的tomcat和weblogic服务";
task "start_web",group=>"all_servers",sub{
        if(is_file("/usr/local/tomcat/bin/startup.sh")){
                run "./startup.sh",
                        cwd     =>"/usr/local/tomcat/bin",
                        unless  =>"pgrep  java";
        }else{
                run "start_node.sh",
                        unless  =>"pgrep java";
        }
        for my $proc(ps()){
                if($proc->{"command"}=~/java.*tomcat/i){
                        say "tomcat已经启动,进程pid:".$proc->{"pid"};
                        exit 0;
                }elsif($proc->{"command"}=~/java.*?node1.*?weblogic/is){
                        say "weblogic服务已经启动,进程pid:".$proc->{"pid"};
                        exit 0;
                }else{
                        next;
                }
        }
        say "服务启动失败";
};

3,各个模块的配置内容都一样除了分发的文件名。模块内容如下

package Servers::Appwap;
use Rex -feature => [‘1.3‘];
desc "分发数据源配置文件到个人中心wap节点服务器";
task "deploy_gerenwap","appwap",sub{
        if(!is_dir("/usr/local/dbsrc")){
                file "/usr/local/dbsrc",
                        ensure  =>"directory",
                        owner   =>"root",
                        group   =>"root",
                        mode    =>755;
                upload "/rex/conf/jdbc_moser.properties","/usr/local/dbsrc";
        };
        file "/usr/local/dbsrc/jdbc_moser.properties",
                source=>"/rex/conf/jdbc_moser.properties",
                owner=>"root",
                group=>"root",
                mode=>644,
                on_change=> sub {
                        say "数据源配置更新成功";
                };
};
1;

4,通过rex -T可以查看自己定义的所有任务:

[root@localhost rex]# rex -T
Tasks
 start_web   启动所有节点上的tomcat和weblogic服务
 stop_web   关闭所有节点上的tomcat和weblogic服务
 Servers:Appwap:deploy_gerenwap    分发数据源配置文件到个人中心wap节点服务器
 Servers:Boss:deploy_boss   分发数据源配置文件到Boss节点服务器
 Servers:Chaoshi:deploy_chaoshi    分发数据源配置文件到超市节点服务器
 Servers:Geren:deploy_geren   分发数据源配置文件到个人中心节点服务器
 Servers:Gerenwap:deploy_gerenwap  分发数据源配置文件到个人中心wap节点服务器
 Servers:Guanwang:deploy_guanwang  分发数据源配置文件到官网节点服务器
 Servers:Quanguo:deploy_quanguo    分发数据源配置文件到全国节点服务器
 Servers:Shopwap:deploy_shopwap    分发数据源配置文件到商城wap节点服务器
Server Groups
 all_servers   node[1..10]
 test_servers  node[1..2]

5,运行相关的任务只需要rex + task称就可以了(如:rex  start_web就会启动所有节点上的web服务)比如我将不同的配置文件分发到相应的web节点 我将所有的类模块都写到一个shell脚本里如下

[root@localhost rex]# cat deploy_dbsr.sh 
#!/bin/bash
rex Servers:Appwap:deploy_gerenwap Servers:Boss:deploy_boss Servers:Chaoshi:deploy_chaoshi Servers:Geren:deploy_geren Servers:Guanwang:deploy_guanwang Servers:Gerenwap:deploy_gerenwap Servers:Quanguo:deploy_quanguo Servers:Shopwap:deploy_shopwap

然后我在再运行这个脚本

[root@localhost rex]# ./deploy_dbsr.sh 
[2015-09-05 21:15:41] INFO - Running task Servers:Appwap:deploy_gerenwap on appwap
[2015-09-05 21:15:41] INFO - Connecting to appwap:22 (root)
[2015-09-05 21:15:41] INFO - Connected and authenticated to appwap.
[2015-09-05 21:15:41] INFO - Successfully authenticated on appwap.
[2015-09-05 21:15:43] INFO - Running task Servers:Boss:deploy_boss on boss
[2015-09-05 21:15:43] INFO - Connecting to boss:22 (root)
[2015-09-05 21:15:43] INFO - Connected and authenticated to boss.
[2015-09-05 21:15:43] INFO - Successfully authenticated on boss.
[2015-09-05 21:15:44] INFO - Running task Servers:Chaoshi:deploy_chaoshi on chaoshi
[2015-09-05 21:15:44] INFO - Connecting to chaoshi:22 (root)
[2015-09-05 21:15:44] INFO - Connected and authenticated to chaoshi.
[2015-09-05 21:15:44] INFO - Successfully authenticated on chaoshi.
[2015-09-05 21:15:45] INFO - Running task Servers:Geren:deploy_geren on geren
[2015-09-05 21:15:45] INFO - Connecting to geren:22 (root)
[2015-09-05 21:15:45] INFO - Connected and authenticated to geren.
[2015-09-05 21:15:45] INFO - Successfully authenticated on geren.
[2015-09-05 21:15:46] INFO - Running task Servers:Guanwang:deploy_guanwang on guanwang
[2015-09-05 21:15:46] INFO - Connecting to guanwang:22 (root)
[2015-09-05 21:15:46] INFO - Connected and authenticated to guanwang.
[2015-09-05 21:15:46] INFO - Successfully authenticated on guanwang.
[2015-09-05 21:15:47] INFO - Running task Servers:Gerenwap:deploy_gerenwap on gerenwap
[2015-09-05 21:15:47] INFO - Connecting to gerenwap:22 (root)
[2015-09-05 21:15:47] INFO - Connected and authenticated to gerenwap.
[2015-09-05 21:15:47] INFO - Successfully authenticated on gerenwap.
[2015-09-05 21:15:48] INFO - Running task Servers:Quanguo:deploy_quanguo on quanguo
[2015-09-05 21:15:48] INFO - Connecting to quanguo:22 (root)
[2015-09-05 21:15:48] INFO - Connected and authenticated to quanguo.
[2015-09-05 21:15:48] INFO - Successfully authenticated on quanguo.
[2015-09-05 21:15:49] INFO - Running task Servers:Shopwap:deploy_shopwap on shopwap
[2015-09-05 21:15:49] INFO - Connecting to shopwap:22 (root)
[2015-09-05 21:15:49] INFO - Connected and authenticated to shopwap.
[2015-09-05 21:15:49] INFO - Successfully authenticated on shopwap.

如果任何一个连接操作失败的话 都会打印出相关的信息,根据信息可以排查错误的原因!

通过Rex + module的形式来分发配置文件到不同服务节点 以及集中控制各节点的web服务

标签:

原文地址:http://my.oschina.net/u/2420214/blog/501520

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!