标签:
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