nodejs 程序不间断升级
nodejs 程序不间断升级
谢宝龙 发表于4年前
nodejs 程序不间断升级
  • 发表于 4年前
  • 阅读 74
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 众所周知nodejs 和 java 一样都是不支持热部署的,每次升级都需要停掉服务器,如果在正式环境我们仍然每次都去停掉服务来升级那么对用户的体验是非常差的

      众所周知nodejs 和 java 一样都是不支持热部署的,每次升级都需要停掉服务器,如果在正式环境我们仍然每次都去停掉服务来升级那么对用户的体验是非常差的,那么我们怎么来解决这个问题呢,其实很简单只要利用nginx 负载均衡就可以实现无缝升级。

      我们首先用nodejs 启动俩个服务器,监听不同端口:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8080);
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(8090);



修改一下nginx 的配置
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #负载均衡的服务列表
    upstream node1 {
        #权重越高被分配的几率就越大 
        server 127.0.0.1:8080 weight=5;
        server 127.0.0.1:8090 weight=3;
    }

    server {
        listen       8800;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   D:\\node-meishu\\public\\;
            index  index.html index.htm;
            #转发到负载的服务上
            proxy_pass  http://node1;
        }
    }
}



配置好了reload 一下nginx ,然后访问nginx的服务:

配置没问题,接下来我们把一个node服务停掉,再次访问nginx会把所有的请求落到另一个node上

我们将停掉的node 代码修改一下:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('升级成功\n');
}).listen(8080);



重新启动之后我们再把另一个node服务停掉进行修改,此时nginx就会把所有的请求转发到新的node服务上了,

这么我们就实现了无缝升级。

当然这里只是一个事例,真正的应用程序还需要保存用户的Session的,Session 放到一个单独服务里比如redis或者是memcache,以后有机会再和大家分享。

如有问题欢迎指正。

共有 人打赏支持
粉丝 24
博文 8
码字总数 2678
×
谢宝龙
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: