分享(1)之一个将pomelo config解析为pm2 config的脚本

pomelo原生自带的pomelo start等命令可以很好的在开发过程中使用,但是到产品部署阶段就显得有些力不从心。在pomelo集群部署方面,推荐使用pm2来运维部署pomelo服务器组。用过才知道真的比pomelo start等命令爽快很多,墙裂推荐。

本文主要分享一个将pomelo config解析为pm2 config的脚本。

parse_pomelo_to_pm2_config.js

/**

* 将pomelo默认配置servers.json转为pm2配置

* Created by kikoroc on 16/4/26.

*/

varenv ='production';

varservers =require('../servers.json')[env];

varmaster =require('../master.json')[env];

varmasterha =require('../masterha.json').masterha;

varfs =require('fs');

/**

* 一台服务器可能有多个网络类型的ip地址(电信移动联通局域网等),这里主要配置将服务器多个ip解析为同一个ip

* 这样就可以将同服务器的pomelo config配置到一个pm2 config json文件中。

*/

var_SERVER_IPMAP = {

"your_server_telecom_ip":"your_server_telecom_ip",

"mobile_ip":"your_server_telecom_ip",

"unicom_ip":"your_server_telecom_ip",

"local_ip":"your_server_telecom_ip"

};

var_RESULT = {};

for(varserverTypeinservers){

servers[serverType].forEach(function(conf){

varprocess = {

"name":"",

"cwd":"/data/xxx/game-server/",

"script":"app.js",

"args":null,

"exec_mode":"fork",

"watch":false,

"env": {

"NODE_ENV":"production"

            },

"merge_logs":true,

"error_file":"",

"out_file":"",

"autorestart":true,

"max_memory_restart":"1G"

        };

        process.name = conf.id;

process.error_file ="/data/xxx/game-server/logs/"+conf.id+"_error.log";

process.out_file ="/data/xxx/game-server/logs/"+conf.id+"_normal.log";

varargs = [];

args.push("env=production");

args.push("serverType="+serverType);

for(varkinconf){

args.push(k+"="+conf[k]);

        }

        process.args = args;

vardestHost = _SERVER_IPMAP[conf.host];

if(_RESULT.hasOwnProperty(destHost)){

            _RESULT[destHost].apps.push(process);

}else{

            _RESULT[destHost] = {};

_RESULT[destHost]['apps'] = [];

            _RESULT[destHost].apps.push(process);

        }

    });

}

masterha.forEach(function(conf){

fs.writeFileSync('./out/masterha@'+_SERVER_IPMAP[conf.host]+'.json',JSON.stringify({

"apps": [{

"name": conf.id,

"cwd":"/data/xxx/game-server/",

"script":"app.js",

"args": [

"serverType=master",

"id="+conf.id,

"host="+conf.host,

"port="+conf.port,

"env=production",

"mode=stand-alone",

"masterha=true"

            ],

"exec_mode":"fork",

"watch":false,

"env": {

"NODE_ENV":"production"

            },

"merge_logs":true,

"error_file":"/data/xxx/game-server/logs/"+conf.id+"_error.log",

"out_file":"/data/xxx/game-server/logs/"+conf.id+"_normal.log",

"autorestart":true,

"max_memory_restart":"1G"

        }]

},null,2), {

flag:'w'

    });

});

//write master config

fs.writeFileSync('./out/master@'+_SERVER_IPMAP[master.host]+'.json',JSON.stringify({

"apps": [{

"name": master.id,

"cwd":"/data/xxx/game-server/",

"script":"app.js",

"args": [

"serverType=master",

"id="+master.id,

"host="+master.host,

"port="+master.port,

"env=production",

"mode=stand-alone"

        ],

"exec_mode":"fork",

"watch":false,

"env": {

"NODE_ENV":"production"

        },

"merge_logs":true,

"error_file":"/data/xxx/game-server/logs/"+master.id+"_error.log",

"out_file":"/data/xxx/game-server/logs/"+master.id+"_normal.log",

"autorestart":true,

"max_memory_restart":"1G"

    }]

},null,2), {

flag:'w'

});

for(varhostin_RESULT){

fs.writeFileSync('./out/'+host+'.json',JSON.stringify(_RESULT[host],null,2), {

flag:'w'

    });

}

运行

node parse_pomelo_to_pm2_config.js

pm2的json config文件就会生成在./out/目录下。然后分发到对应的服务器执行pm2 start xxx.json即可。

在实际运维过程中,可能需要重启某些serverType的服务器进程,这里再分享一个根据serverType生成对应服务器进程重启的脚本。

gen_restart_shell_by_serverType.js

/**

* 生成重启业务服务进程的pm2代码

* Created by kikoroc on 16/4/27.

*/

varserverType ='chat';

varservers =require('../../servers.json')['production'][serverType];

if(servers && servers.length >0){

servers.forEach(function(svr){

console.log('ssh '+svr.host+' /usr/local/bin/pm2 restart '+svr.id);

    });

}else{

console.error('no server of '+serverType);

}

运行

node gen_restart_shell_by_serverType.js > restart_chat.sh

bash restart_chat.sh

即可完成chat servers的重启。:)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • NAME dnsmasq - A lightweight DHCP and caching DNS server....
    ximitc阅读 2,840评论 0 0
  • =========================================================...
    lavor阅读 3,488评论 0 5
  • 入门指南 1. 简介 Quickstart会让你启动和运行一个单节点单机HBase。 2. 快速启动 – 单点HB...
    和心数据阅读 4,538评论 1 41
  • 时光 漫过了我们的童年 把我们带进了 成熟的年代 我以为我拥有的更多了 其实我拥有的变少了 没有了单纯 自然 帅真...
    万物升阅读 153评论 0 0