区分其他模块中的节点主集群

Posted

技术标签:

【中文标题】区分其他模块中的节点主集群【英文标题】:distinguish node master cluster in other modules 【发布时间】:2014-02-16 08:37:20 【问题描述】:

我正在开发一个节点项目,我想通过节点集群运行它。由于我有一些可供每个节点集群(Worker)使用的共享资源和配置,在启动时我读取了这些配置并将其保存到 redis db 中。此外,在其他一些模块中,我还需要查询一些外部资源并获取一些数据并保存到 redis db 中(不是在启动时,当我需要时)。为此,在启动时,我将配置部分放入一个函数中,如果集群是 Master(cluster.isMaster) 则调用它:

if (cluster.isMaster) 
configure();

我的问题是如何在其他模块中做同样的事情?在其他模块中,我需要查询外部资源并仅在主集群中放入redis,因为之后它也可用于工作集群。因此,无需在所有集群中查询。

先谢谢了,

【问题讨论】:

试试require('cluster').isMaster 【参考方案1】:

来自 api http://nodejs.org/api/cluster.html

cluster.isMaster# Boolean 如果进程是主进程,则为真。这是 由 process.env.NODE_UNIQUE_ID 确定。如果 process.env.NODE_UNIQUE_ID 未定义,则 isMaster 为真。

在你的模块中,你可以检查require('cluster').isMaster,你不应该直接检查process.env.NODE_UNIQUE_ID,因为它总是在启动后被删除,总是未定义。 https://github.com/nodejs/node/blob/16689e30aeff03c8c47a605425727cf190c169e9/lib/internal/bootstrap_node.js#L129

【讨论】:

谢谢 :),这行得通,我可以在我的 senario 中有全局变量吗? process是一个全局变量,你只需要深入process.env.NODE_UNIQUE_ID

以上是关于区分其他模块中的节点主集群的主要内容,如果未能解决你的问题,请参考以下文章

elasticSearch:避免es集群的“脑裂”现象

Hadoop学习之路Hadoop集群搭建和简单应用

CentOS 7 Redis 集群安装

分布式选举

Elasticsearch深入Elasticsearch集群

谈一谈Elasticsearch的集群部署