深入理解nginx采用ip_hash配置负载均衡

1)需求,我们在客户端统一使用 

http://localhost:3000/

去访问一个网页,我们得express作为web后端,我们想动态的添加一些web服务器或者删除一些web服务器,这时客户端的访问地址不变,则可以利用nginx作如下配置:

#Include the following lines into the global nginx.conf 
#configuration file

events {
    worker_connections  1024;
}

http {
  upstream io_nodes {
    ip_hash;
    server 127.0.0.1:6007;
    server 127.0.0.1:6008;
    server 127.0.0.1:6004;
    server 127.0.0.1:6002;
    server 127.0.0.1:6001;
    server 127.0.0.1:6006;
    server 127.0.0.1:6003;
    server 127.0.0.1:6005;
  }
  server {
    listen 3000;
    server_name 127.0.0.1;
    location / {
      alias static/; # 静态文件目录
  
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $host;
      proxy_http_version 1.1;
      proxy_pass http://io_nodes; # upstream那个名字决定
    }
  }  
}

2)web服务器

app.js

var fork = require("child_process").fork;
var cpuNum = require("os").cpus().length;

for(var i = 0; i < cpuNum; i++){
    fork("./fork.js", [6001 + i]);
}

fork.js

var express = require("express");
var app = express();

var port = parseInt(process.argv[2]);

app.get("/", function(req, res){
    res.send("hello:"+port);
});

console.log("port:", port);
app.listen(port);

3)在自己编译的nginx上启动nginx

第一次启动nginx

mynginx sudo sbin/nginx -c conf/nginx.conf

修改配置重启nginx

➜  mynginx sudo sbin/nginx -s reload

干掉nginx进程

➜  mynginx sudo pkill -9 nginx

4)效果

深入理解nginx采用ip_hash配置负载均衡_第1张图片

结论:

访问:localhost:3000端口,这个时候发现被nginx转发到了访问localhost:6007端口;

实际上负载均衡的原理是:根据客户端的ip地址,每次访问,都会采用固定的hash算法,一定会落到某个固定的地址上,避免出现,记录住密码了,下次访问又让重新填写密码等这些情况,但是客户端不知道后端究竟配置了多少台机器达到负载均衡的效果

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(深入理解nginx采用ip_hash配置负载均衡)