pomelo的一些监控和维护插件工具 pomelo cli 工具
1 POMELO-CLI
2 POMELO-ADMIN
3 POMELO-ADMIN-WEB
首先来说第一个POMELO-CLI
狂点传送门
这个其实不算POMELO的插件,只能算辅助管理POMELO的一个客户端命令行工具,通过这个工具我们不在需要到服务器程序的宿主机上去敲打POMELO命令来对服务器进行一系列的操作了(停止,重启,热扩展,获取服务器信息等),工具内部包含了很多命令行可以使用,其本质的原理是通过控制台连接上服务器的MASTER服务器然后远程发送命令给MASTER服务器让其控制所有的游戏服务器。
上面是一张非常经典的POMELO控制架构,MASTER管理着所有的服务器,那么我们只需要可以驱动MASTER就可以实现外部管理服务器了。是不是非常方便?但是这样大家可能会有另外一个问题,这样安全吗?POMELO想到了这个问题,所以在大约0.6版本的时候POMELO加入了MASTER服务器的权限控制,在服务器的CONFIG文件夹下有一个ADMINUSER文件,在里面可以设置允许登录MASTER服务器的用户名密码以及用户等级,通过这样实现了对MASTER服务器的权限和安全性管理:
OK基本的都介绍完了那我们如何使用POMELO-CLI工具呢?详细的使用方式GIT上面都有描述了并且大家可以通过HELP来获取所有可以使用的命令,这里做几个简单的演示
(1)打开你的控制台
(2)输入npm install -g pomelo-cli等待安装完毕
(3) 在控制台中输入连接命令
pomelo-cli-h 127.0.0.1 -P 3005 -u admin -p admin
可以看到在这条连接命令中我们需要输入MASTER服务器的地址端口,以及用户名密码
看到如上画面就代表我们已经登录成功了,之后就可以使用CLI提供的一系列强大的工具了~
显示各服务器状态:
所有可以使用的命令
这里我就不对所有功能一一介绍啦~~大家可以自己使用体会哦~~(我觉得里面比较炫的功能主要还是热扩展服务器了!!非常实用的功能)
OK第二个我们来说说POMELO-ADMIN
同样狂点传送门
pomelo-admin是可以提供对游戏各个服务器的各种数据进行实时监测和回报(CPU,内存,连接数等等),同时也可以自定义游戏逻辑数据的监测(当前有多少用户在副本场景中,当前有多少用户在进行A任务,当前有哪些用户的帐号状态不正确)我们当然可以采用查询数据库和添加LOGGER来统计和监测这些游戏逻辑数据,但是总是不够实时。有些情况比如A场景最大用户容量为200个,当超过200个用户的时候需要热扩展服务器,这个时候通过人工查询可能已经为时已晚了,实时监测可以非常迅速的通知到运维人员当前的数据状态,同样的一些繁重的繁琐的日常查询工作除了使用跑数据库脚本以外也可以通过实时监测来获取数据,当然好处还有许多,同样的相伴随的坏处就是会消耗一部分的服务器性能,所以还是要在各种条件之间平衡使用,这里不再深入讨论其好处和弊处了,主要说下用法,因为POMELO-ADMIN的使用文档并不是那么的尽人意。
(1)首先使用pomelo-admin我们不需要做任何的安装工作,因为POMELO已经自带这个组件了
(2)pomelo本身自己实现了非常多的监控只需要在app.js中添加
app.configure(function () {
app.enable('systemMonitor');
});
就可以在所有已经配置的服务器上打开POMELO自身实现的一系列监控,其中包括(CPU,内存等等)
以下是POMELO注册已经实现的监控代码
虽然使用POMELO自带的监控非常简单,但是这里要注意的一点是,这些监控只有在linux环境下才可以使用,因为监控的底层实现都是直接调用了LINUX命令,如果需要在WINDOW下实现类似的监控就需要自己实现啦(当然是调用WINDOW底层命令)~~具体如何实现自定义监控我会在接下来说~
OK我们现在来说说如何实现自定义的监控模块吧~假设有一个需求,需要实时监控当前连接服务器上的所有用户信息~(其实就是统计当前所有在线用户信息),其实实现起来非常的简单,POMELO-ADMIN作为融入在POMELO框架中的插件,那么我们只需要按照约定实现插件回调就可以了.
(1)创建onlineUser.js文件
(2)构造部分
module.exports = function(opts)
{
return newonlineUser(opts);
};
var moduleId = "onlineUser";
module.exports.moduleId = moduleId;
var onlineUser = function(opts)
{
this.app =opts.app;
this.type ='pull';
this.interval = 10;
};
构造部分没有什么好多说的主要就是按照POMELO框架约定好的方式构造就可以了,主要对几个参数做下解释
moduleId:监控模块标识,用于唯一标识该监控模块,非常重要的一个参数,要向该模块获取和发送数据都靠这个ID作为参数!特别是之后如果需要让外部程序获取该模块的监控数据也必须靠这个参数哦~~
this.app: 当前监控模块监控的服务器实例
this.type:pomelo-admin提供2种获取数据的方式,一种是PULL一种是PUSH,顾名思义,PULL为拉方式,MASTER服务器主动从各个游戏服务器上拉取需要的监控数据,那么PUSH则是推了,就是反过来游戏服务器向MASTER服务器推送监控数据,这个非常好理解
this.interval :每次push 和 pull 的时间间隔
(3)构造好了之后我们就可以在app.js中为服务器注册监控模块了
//配置监控
app.configure('production|development','connector|master', function() {
varonlineUser = require("./monitor/onlineUser");
app.registerAdmin(onlineUser, {app: app});
});
这样就将监控在线用户的模块注册给了所有的连接服务器(K2中是3台)和MASTER服务器,为什么也需要注册给MASTER服务器呢之后的流程可以说明这一点(这里其实很绕,我觉得POMELO设计的不好。。)我们来看需要我们实现的3个回调
//收到游戏服务器PUSH数据回调,或者采用PULL的方式这个回调每次到达PULL间隔时会被调用
onlineUser.prototype.masterHandler = function(agent, msg)
//收到MASTER拉通知回调,或者采用PUSH方式每次到达PUSH间隔时会呗回调
onlineUser.prototype.monitorHandler = function(agent, msg)
//第三方程序调用获取监控数据接口时回调
onlineUser.prototype.clientHandler = function(agent, msg, cb)
我们来解释一下pull模式下的整个流程
完整的onlineUser代码
module.exports = function(opts)
{
return newonlineUser(opts);
};
var moduleId = "onlineUser";
module.exports.moduleId = moduleId;
var onlineUser = function(opts)
{
this.app =opts.app;
this.type ='pull';
this.interval = 10;
};
onlineUser.prototype.monitorHandler = function(agent, msg)
{
varsessionService = this.app.get('sessionService');
var uidmap =sessionService.service.uidMap;
varallUserIds = Object.keys(uidmap);
var uidInfos= new Array();
for(var i=0;i
{
var uid = allUserIds[i];
var infos = uidmap[uid];
var uidInfo =
{
uid:infos[0].uid,
frontendId:infos[0].frontendId,
userName:infos[0].settings.userName,
loginTime:infos[0].settings.loginTime
};
uidInfos.push(uidInfo);
}
agent.notify(moduleId, {serverId:agent.id,infos:uidInfos});
};
onlineUser.prototype.masterHandler = function(agent, msg)
{
if(!msg)
{
agent.notifyByType("connector",moduleId);
}
else
{
agent.set(msg.serverId+moduleId, msg);
}
};
onlineUser.prototype.clientHandler = function(agent, msg, cb)
{
varconnectors = this.app.getServersByType('connector');
var users =new Array();
for(var i=0;i
{
var co = connectors[i];
var key = co.id+moduleId;
var oneConnectorUsers = agent.get(key);
for(var j = 0;j
{
var user = oneConnectorUsers.infos[j];
users.push(user);
}
}
varreturnData = {
result:users
}
cb(null,returnData);
};
这样我们就可以每隔10S获取一次当前在线用户数据了!因为有3台连接服务器所以一次会拉取三台服务器的数据
执行结果:
至此为止关于如何使用POMELO-ADMIN已经完全介绍完毕了,我们可以在LINUX环境下利用其自带的模块来进行监控同样也可以按照自己的业务需求来自定义监控内容是不是很强大呢?因为是插件的形式,所以并不需要将记录的内容以及监控的代码添加在业务逻辑的代码中,这点可以说是他最大的优点了,完全实现监控(统计)和业务逻辑分离!
最后POMELO-ADMIN-WEB
孜孜不倦的狂点传送门
从名字就可以看出这个货是POMELO-ADMIN的一个补充,其实就是一个WEB网站,和POMELO-CLI同样的原理通过MASTER服务器获取POMELO-ADMIN的监控数据(还记得我们之前的实时监控数据缓存在了哪里吗?BINGGO!!!MASTER服务器中!!!) node网站的部署我在这里就不多赘述了。。相信大家都会。只 需要到GIT上下载代码,然后NPM一下,最后在NODEAPP就可以了。。灰常简单!!通过他我们再也不需要将监控数据记录在LOG中去慢慢查了!!我们完全可以在可视化的WEB网站上面看到我们需要的实时监控数据!
(1)通过配置文件配置需要连接的master服务器地址和帐号
QA环境是LINUX的我们通过WEB来看看POMELO自带的监控数据情况吧
SystemInfo模块:
ProcessInfo模块:
这里要注意的是虽然WEB页面上边栏中有许多选项,但是其实真正已经实现的可能只有部分,其余需要开发者按照自己的需求进行添加或者实现! 边栏:
说道这里看的都是POMELO自带的一些监控数据那我们之前实现的监控在线用户的模块如何查看呢?
利用边栏中已经有的但未完全实现的Online User选项卡,
(1) 稍微修改一下WEB的源码
//看到没有我们将请求的模块ID改为了我们自定义的模块ID~~
window.parent.client.request('onlineUser', {type:"onlineUser"},function(err, msg)
(2)回到服务器的onlineUser代码文件中,实现第三个回调,将MASTER中按照KEY所缓存的三台连接服务器的在线用户数据取出然后CALLBACK就可以啦!
onlineUser.prototype.clientHandler = function(agent, msg, cb)
{
varconnectors = this.app.getServersByType('connector');
var users =new Array();
for(var i=0;i
{
var co = connectors[i];
var key = co.id+moduleId;
var oneConnectorUsers = agent.get(key);
for(var j = 0;j
{
var user = oneConnectorUsers.infos[j];
users.push(user);
}
}
varreturnData = {
result:users
}
cb(null,returnData);
};
来看一下结果吧~~
好了~~全讲完了~~主要希望可以帮到运维同学减少他们的学习成本~~~并且可以让大家更加了解一些POMELO的插件和其实现机制~~THXALL~~下次继续
更多阅读
发财树的养殖方法和注意事项 发财树摆放禁忌
发财树的养殖方法和注意事项——简介发财树的养殖方法和注意事项,特点:耐阴,耐旱要诀:防湿,防冻发财树的养殖方法和注意事项——工具/原料盆土水肥料发财树的养殖方法和注意事项——方法/步骤发财树的养殖方法和注意事项 1、一、环境的
怎样设置yy语音的混响和变声 yy语音怎么变声
怎样设置yy语音的混响和变声——简介怎样设置yy语音的混响和变声,有很多人喜欢在yy唱歌,但是没有混响效果是不行的,变声可以和好友玩也是挺有意思的。怎样设置yy语音的混响和变声——工具/原料yy语音怎样设置yy语音的混响和变声——
怎么编辑修改pdf文件的内容(增加和删除) 精 java修改删除增加xml
怎么编辑修改pdf文件的内容(增加和删除) 精——简介pdf格式的文件是Adobe公司开发的一套跨平台阅读方案,其优点在于能够最大程度的保持文档的版面格式和阅读的便利性,但是这也给其编辑和修改带来了较多的问题。在日常工作中,可能很多人
平安树的养殖方法和注意事项 平安树叶子发黄掉落
平安树的养殖方法和注意事项——简介平安树是兰屿肉桂的雅称。能散发出矫正异味、净化空气的香味,花卉种植业、经营业人士,为其取了一个吉祥的名字“平安树”。平安树,寓意吉祥,象征平安如意,生活美满。平安树的养殖方法和注意事项—
幸福树的养殖方法和注意事项 龙骨花的养殖方法
幸福树的养殖方法和注意事项——简介幸福树是一种很好的观叶类大型盆栽植物,在北方,一般情况下在室内养殖,比如大型的宴会厅,办公场所摆放的要多一些。要想在室内养好幸福树,还必须知道它生长的环境,习性,原产地等等,只有了解知道了这些信息