如何在多台机器上群集Node应用程序

我正在使用Express js和节点群集来利用群集我也使用PM2进行进程和内存pipe理。 对于一台机器,它工作正常,但我的机器有两个核心,我想提供更多的核心。 所以我决定join3台机器,现在所有4台机器都使用LAN连接。 我也可以在networking浏览器中使用IP地址访问其他机器。

现在我想连接所有的机器,并希望共享他们的内核,以便我的应用程序最终拥有2 + 6 = 8个内核。 怎么可能? 有没有任何节点模块可以实现这一目标? 谢谢。

节点集群是利用多核处理器的好处,但是当涉及水平扩展(增加更多机器)时,您需要使用负载平衡器或反向代理。 对于反向代理,您可以使用任何Web服务器,如Apache或Nginx。 如果你想依赖node和npm,那么nodejitsu有一个模块:http-proxy。 以下是运行您的节点应用程序的3台机器的http代理示例。

  1. 创build一个新的节点项目。
  2. 安装http代理模块。

新版本:

npm install –save http-proxy

如果你喜欢旧版本:

npm install –save http-proxy@0.8

  1. 创build一个新的js文件(server.js或任何你喜欢的东西)。

对于版本1.xx(新)

server.js

var http = require('http'), httpProxy = require('http-proxy'); var addresses = [ { host: "localhost", port: 8081 }, { host: "localhost", port: 8082 }, { host: "localhost", port: 8083 } ]; //Create a set of proxy servers var proxyServers = addresses.map(function (target) { return new httpProxy.createProxyServer({ target: target }); }); var server = http.createServer(function (req, res) { var proxy = proxyServers.shift(); proxy.web(req, res); proxyServers.push(proxy); }); server.listen(8080); 

对于版本0.xx(旧)

server.js

 var proxyServer = require('http-proxy'); var servers = [ { host: "localhost", port: 8081 }, { host: "localhost", port: 8082 }, { host: "localhost", port: 8083 } ]; proxyServer.createServer(function (req, res, proxy) { var target = servers.shift(); proxy.proxyRequest(req, res, target); servers.push(target); }).listen(8080); 
  1. 现在运行这个文件。
  2. 对localhost:8080的请求将被路由到8081,8082或8083
  3. 您可以将本地主机更改为您的机器的IP地址(和端口号)。

向8080端口发出请求的客户端不知道8081,8082和8083服务器的存在。他们向8080发出请求,就好像它是唯一的服务器并获得响应。

现在,群集中的一台机器将作为节点平衡器工作,而应用程序则位于其他三台机器上。 负载均衡器的IP地址可以作为公有IP使用。

节点的水平缩放可以通过多种方式完成:

  1. npm安装http-proxy

    代码var proxyServer = require('http-proxy'); var port = parseInt(process.argv [2]); var servers = [{host:“localhost”,port:8081},{host:“localhost”,port:8080}];

    proxyServer.createServer(function(req,res,proxy){var target = servers.shift();

    proxy.proxyRequest(req,res,target); servers.push(目标); })听(端口);

  2. nginx的

有关更多详细信息,请查看以下URL 节点js的水平缩放比例