pm2集群模式mysql配置,pm2集群模式下的快速服务器端口配置问题

Problem: We start pm2 in cluster mode, and pm2 starts as many processes as there are cpu cores, pm2 also tries to start as many node servers as there are cpu cores but the problem here is that it fails to start as many servers because they all try and start on the same port that is 3000, which already gets occupied by the first node server

We using nginx and proxy it to 3000 port.

we are using pm2 in cluster mode with the following configuration:

{

"apps" : [{

"script" : "npm",

"instances" : "max",

"cwd":"/home/nginx/my-pwa" ,

"args" : "run start:server:prod",

"exec_mode" : "cluster",

"wait_ready": true,

"kill_timeout" : 4000,

"watch" : true

}]

}

run start:server:prod is our script to start the server

Our express server:

var app = require('../src/app');

var port = normalizePort(process.env.PORT || '3000');

app.set('port', port);

const http = require('http');

server = http.createServer(app);

server.listen(port));

server.on('error', onError);

server.on('listening', onListening);

function onError(error) {

if (error.syscall !== 'listen') {

throw error;

}

var bind = typeof port === 'string'

? 'Pipe ' + port

: 'Port ' + port;

// handle specific listen errors with friendly messages

switch (error.code) {

case 'EACCES':

console.error(bind + ' requires elevated privileges');

process.exit(1);

break;

case 'EADDRINUSE':

console.error(bind + ' is already in use');

process.exit(1);

break;

default:

throw error;

}

}

process.on('message', function(msg) {

if (msg == 'shutdown') {

server.close();

process.exit(0);

}

});

// Listening logic

function onListening() {

var addr = server.address();

var bind = typeof addr === 'string'

? 'pipe ' + addr

: 'port ' + addr.port;

debug('Listening on ' + bind);

console.log("Server started on ", bind);

process.send('ready');

}

Please help, it's mission critical!

解决方案

The problem is that pm2 doesn't play well with npm. It is not able to start two node servers using npm script. The right way is to use node

My previous config:

{

"apps" : [{

"script" : "npm",

"instances" : "max",

"cwd":"/home/nginx/my-pwa" ,

"args" : "run start:server:prod",

"exec_mode" : "cluster",

"wait_ready": true,

"kill_timeout" : 4000,

"watch" : true

}]

}

My new config:

{

"apps" : [{

"script" : "./server/bin/www",

"instances" : "max",

"exec_mode" : "cluster",

"cwd":"/home/nginx/my-pwa" ,

"env": {"NODE_ENV" : "production"},

"name" : "my-pwa"

}]

}

As you can see that I am no longer using "script": "npm". ./server/bin/www contains my express server which pm2 will execute using node. Now pm2 is able to automatically handle clustering.

So how's the output is supposed to look like now?

It makes one god deamon which manages the worker server instances which are according to the number of your cpu cores.

Output on our server: (It has 2 cores)

nginx 1363 1 0 05:20 ? 00:00:03 PM2 v2.10.1: God Daemon (/home/nginx/.pm2)

nginx 1373 1363 0 05:20 ? 00:00:09 node /home/nginx/my-pwa/server/bin/www

nginx 1374 1363 0 05:20 ? 00:00:09 node /home/nginx/my-pwa/server/bin/www

Also, now pm2 reload works fine. When I see logs on reload, pm2 starts new workers first and then shuts down the old workers.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值