管理 Meteor 堆栈中第二个节点进程的网络接口

Posted

技术标签:

【中文标题】管理 Meteor 堆栈中第二个节点进程的网络接口【英文标题】:Managing network interfaces for second node process in Meteor stack 【发布时间】:2015-09-09 20:58:19 【问题描述】:

我需要在对网络接口应用了安全限制的基础架构中启动 Meteor 应用程序。

进程必须开始绑定到特定的网络接口,不能绑定为 - 示例:TCP *:26758

当 Meteor 堆栈在线运行时,可以找到两个节点进程。与 Mongo 的连接成功后触发第二个过程:

$ ps -ef |grep -E "node|mongo" |grep -v grep

meteor   13128  5668  9 14:52 pts/0    00:00:07 /home/meteor/.meteor/packages/meteor-tool/.1.1.3.1a15mwv++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/node /home/meteor/.meteor/packages/meteor-tool/.1.1.3.1a15mwv++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/tools/main.js --port 192.168.0.107:8080

meteor   13149 13128  3 14:52 pts/0    00:00:02 /home/meteor/.meteor/packages/meteor-tool/.1.1.3.1a15mwv++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/mongodb/bin/mongod --bind_ip 127.0.0.1 --smallfiles --port 8081 --dbpath /home/meteor/apps/z1j-prod/.meteor/local/db --oplogSize 8 --replSet meteor

meteor   13205 13128  1 14:52 pts/0    00:00:01 /home/meteor/.meteor/packages/meteor-tool/.1.1.3.1a15mwv++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/node /home/meteor/apps/z1j-prod/.meteor/local/build/main.js

我能够为第一个节点进程 (pid 13128) 强制接口绑定,但第二个节点进程 (pid 13205) 开始监听所有接口:

lsof |grep meteor |grep LISTEN  |grep node
node      13128               meteor   13u     IPv4             244552       0t0        TCP oel70.node.com:webcache (LISTEN)
node      13128 13143         meteor   13u     IPv4             244552       0t0        TCP oel70.node.com:webcache (LISTEN)
node      13128 13144         meteor   13u     IPv4             244552       0t0        TCP oel70.node.com:webcache (LISTEN)
node      13128 13145         meteor   13u     IPv4             244552       0t0        TCP oel70.node.com:webcache (LISTEN)
node      13128 13146         meteor   13u     IPv4             244552       0t0        TCP oel70.node.com:webcache (LISTEN)
node      13128 13206         meteor   13u     IPv4             244552       0t0        TCP oel70.node.com:webcache (LISTEN)
node      13205               meteor   11u     IPv4             244597       0t0        TCP localhost:36099 (LISTEN)
node      13205               meteor   25u     IPv4             244618       0t0        TCP *:26758 (LISTEN)
node      13205 13209         meteor   11u     IPv4             244597       0t0        TCP localhost:36099 (LISTEN)
node      13205 13209         meteor   25u     IPv4             244618       0t0        TCP *:26758 (LISTEN)
node      13205 13210         meteor   11u     IPv4             244597       0t0        TCP localhost:36099 (LISTEN)
node      13205 13210         meteor   25u     IPv4             244618       0t0        TCP *:26758 (LISTEN)
node      13205 13211         meteor   11u     IPv4             244597       0t0        TCP localhost:36099 (LISTEN)
node      13205 13211         meteor   25u     IPv4             244618       0t0        TCP *:26758 (LISTEN)
node      13205 13212         meteor   11u     IPv4             244597       0t0        TCP localhost:36099 (LISTEN)
node      13205 13212         meteor   25u     IPv4             244618       0t0        TCP *:26758 (LISTEN)

我使用以下命令启动流星:meteor --port 192.168.0.107:8080

使用流星的 mongo 实例或使用外部 mongo 实例时,此行为是相同的 (导出 MONGO_URL=mongodb://mean.node.com:27017/meteor)

我正在使用 Meteor 1.1.0.2

是否可以为第二个节点进程强制接口绑定??

【问题讨论】:

【参考方案1】:

最后,我在提交问题后找到了答案(感谢 glasser !)

您可以使用--app-port控制内部应用端口(包括接口)。

[root@oel70 ~]# lsof -P |grep meteor |grep LISTEN |grep node |sort
node      15302 15317         meteor   13u     IPv4             119481       0t0        TCP oel70.node.com:8080 (LISTEN)
node      15302 15318         meteor   13u     IPv4             119481       0t0        TCP oel70.node.com:8080 (LISTEN)
node      15302 15319         meteor   13u     IPv4             119481       0t0        TCP oel70.node.com:8080 (LISTEN)
node      15302 15320         meteor   13u     IPv4             119481       0t0        TCP oel70.node.com:8080 (LISTEN)
node      15302 15407         meteor   13u     IPv4             119481       0t0        TCP oel70.node.com:8080 (LISTEN)
node      15302               meteor   13u     IPv4             119481       0t0        TCP oel70.node.com:8080 (LISTEN)
node      15405 15409         meteor   11u     IPv4             120974       0t0        TCP localhost:40219 (LISTEN)
node      15405 15409         meteor   25u     IPv4             128339       0t0        TCP oel70.node.com:9080 (LISTEN)
node      15405 15410         meteor   11u     IPv4             120974       0t0        TCP localhost:40219 (LISTEN)
node      15405 15410         meteor   25u     IPv4             128339       0t0        TCP oel70.node.com:9080 (LISTEN)
node      15405 15411         meteor   11u     IPv4             120974       0t0        TCP localhost:40219 (LISTEN)
node      15405 15411         meteor   25u     IPv4             128339       0t0        TCP oel70.node.com:9080 (LISTEN)
node      15405 15412         meteor   11u     IPv4             120974       0t0        TCP localhost:40219 (LISTEN)
node      15405 15412         meteor   25u     IPv4             128339       0t0        TCP oel70.node.com:9080 (LISTEN)
node      15405               meteor   11u     IPv4             120974       0t0        TCP localhost:40219 (LISTEN)
node      15405               meteor   25u     IPv4             128339       0t0        TCP oel70.node.com:9080 (LISTEN)
[root@oel70 ~]#

你必须按如下方式启动“meteor”:

[meteor@oel70 z1j-prod]$ meteor --port 192.168.0.107:8080 --app-port 192.168.0.107:9080

【讨论】:

以上是关于管理 Meteor 堆栈中第二个节点进程的网络接口的主要内容,如果未能解决你的问题,请参考以下文章

第二个meteor学习项目——(css和main.html)

网络管理和进程管理

以编程方式从 Grid 进程生成第二个 Selenium Grid 节点作为另一个进程时的 ParameterException

String.format()中第二个参数的问题

有啥方法可以获取 PostgreSQL 中第一个、第二个、第三个表的名称?

无法根据 UIPickerview 中第一个组件中的值重新加载第二个组件