如何在多台机器上群集Node应用程序
我正在使用Express js和节点群集来利用群集我也使用PM2进行进程和内存pipe理。 对于一台机器,它工作正常,但我的机器有两个核心,我想提供更多的核心。 所以我决定join3台机器,现在所有4台机器都使用LAN连接。 我也可以在networking浏览器中使用IP地址访问其他机器。
现在我想连接所有的机器,并希望共享他们的内核,以便我的应用程序最终拥有2 + 6 = 8个内核。 怎么可能? 有没有任何节点模块可以实现这一目标? 谢谢。
节点集群是利用多核处理器的好处,但是当涉及水平扩展(增加更多机器)时,您需要使用负载平衡器或反向代理。 对于反向代理,您可以使用任何Web服务器,如Apache或Nginx。 如果你想依赖node和npm,那么nodejitsu有一个模块:http-proxy。 以下是运行您的节点应用程序的3台机器的http代理示例。
- 创build一个新的节点项目。
- 安装http代理模块。
新版本:
npm install –save http-proxy
如果你喜欢旧版本:
npm install –save http-proxy@0.8
- 创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);
- 现在运行这个文件。
- 对localhost:8080的请求将被路由到8081,8082或8083
- 您可以将本地主机更改为您的机器的IP地址(和端口号)。
向8080端口发出请求的客户端不知道8081,8082和8083服务器的存在。他们向8080发出请求,就好像它是唯一的服务器并获得响应。
现在,群集中的一台机器将作为节点平衡器工作,而应用程序则位于其他三台机器上。 负载均衡器的IP地址可以作为公有IP使用。
节点的水平缩放可以通过多种方式完成:
-
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(目标); })听(端口);
-
nginx的
有关更多详细信息,请查看以下URL 节点js的水平缩放比例
- expressja使用xhr或者fetch取得http请求
- Access-Control-Allow-Origin使用Node.js,express和socket.io在OpenShift上
- 快递中间件来为所有app.get()填充一个Jadevariables
- 使用Jade模板当地人设置input值
- 在Express / Jade视图中访问当前请求
- 错误:在Ubuntu上发布应用程序时,ENOENT,没有这样的文件或目录'/ var / www / html / views
- 带有oracleDB可重用function的Node JS
- Express 3.x最佳布局实现(模板引擎)
- 问题在Node.js代码中实现callback