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

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

[[email protected] 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可以查看自己定义的所有任务:

[[email protected] 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脚本里如下

[[email protected] 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

然后我在再运行这个脚本

[[email protected] 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.

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

时间: 2024-07-29 09:51:14

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

Axis2 Web服务配置文件services.xml详解

在Axis1中部署服务时,我们使用service.wsdd文件来配置服务.在Axis2中,不再使用service.wsdd文件来配置服务,改用services.xml了.这两个配置文件的语法是截然不同的. 本文涵盖了services.xml文件的语法和使用说明.在Apache Axis2/Java中,同一个服务包文件既可以用于部署单个服务,也可以部署多个服务.不论以何种方式部署服务,一个有效的服务包文件必须包含services.xml文件.随着我们部署服务的方式不同,services.xml文件

实现快速读写配置文件的内容,可以用于读取*.exe.config文件或者Web.Config文件的内容,或者可以读取指定文件的配置项.

形如: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microso

C二叉树求节点个数和叶子节点个数(递归形式)

1 struct BiTree 2 { 3 struct BiTree *lchild; 4 struct BiTree *rchild; 5 }; 6 7 int Node(struct BiTree *T) 8 { 9 if(T == NULL) 10 return 0; 11 return 1+Node(T->lchild)+Node(T->rchild); 12 } 13 14 int Leaf(struct BiTree *T) 15 { 16 if(T==NULL) 17 retu

Web的形式发布静态文件

Web的形式发布静态文件 虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件的请求.针对不同格式的静态文件请求的处理,ASP.NET Core为我们提供了三个中间件,它们将是本系列文章论述的重点.不过在针对对它们展开介绍之前,我们照理通过一些简单的实例来体验一下如何在一个ASP.NET Core应用中发布静态文件.[本文已经同步到<ASP.NET Co

PP66 EEPPPPMM SSyysstteemm AAddmmiinniissttrraattiioonn GGuuiiddee 16 R1

※★◆●PP66 EEPPPPMM SSyysstteemm AAddmmiinniissttrraattiioonn GGuuiiddee 16 R1AApprriill 22001166ContentsPrimavera P6 Administrator Setup Tasks .. 7What's Changed 8Launching the Primavera P6 Administrator 9Launching the Primavera P6 Administrator Local

系统架构师-基础到企业应用架构-服务层

一.上章回顾 上篇我们主要讲解了系统架构中的四种架构模式,并且分析了四种架构模式的实现及应用场景,那么先来回顾下架构中的业务逻辑层的使用及总结.  如果大家对图中讲述的内容不明白或者说是不深入那么可以参考上篇讲 解的内容:系统架构师-基础到企业应用架构-业务逻辑层. 二.摘要 本文将已架构的方式去分析分层结构中的服务层的设计,如何设计出来满足我们说的业务需求及设计规范的服务层将是我们的目标,可能我想大家在项目架构的 过程中可能有些同仁,没有用到该层,或者说是采用的是常用的分层结构的设计,而没有把

[Node.js] OAuth 2 和 passport框架

原文地址:http://www.moye.me/?p=592 OAuth是什么 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. OAuth 2.0   OAuth的版本有v1.0, v1.0a 和 v2.0.OAuth 2.0 的出现主要是解决1.0+中的几个问题,提升开发简易度和应用安全性: 更好的支持非浏览器APP(移动和桌面客户端,可以省略v1.0的交换token过程,增强

Java技术体系大全,准备面试的可以参考一下!

1. JAVA技术体系1.1 Java程序员 ·高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变参数.可变返回类型.增强循环.静态导入 ·核心编程 IO.多线程.实体类.集合类.正则表达式.XML和属性文件 ·图形编程 AWT(Java2D/JavaSound/JMF).Swing.SWT.JFace ·网路编程 Applet.Socket/TCP/UDP.NIO.RMI.CORBA ·Java语法基础 类.抽象类.接口.最终类.静态类.匿名类.内部类.异常类.编码规范 ·Java开发

微服务实践(总)-原文

本系列文章为 dockone.io 首发,转载请标明出处,以示尊重!! http://dockone.io/people/hokingyang   希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂单体式应用,日常开发和部署经验非常缓慢和痛苦,而微服务看起来是远方一个极乐世界.幸运的是,有可以参考的脱离苦海的策略,本篇文章中,我将描述如何逐步将单体式应用迁移到微服务架构. 本系列七篇文章列表如下: 微服务实战