Nginx实现简单的负载均衡

247 阅读3分钟

Nginx (engine x) 是一个高性能的HTTP和反向代理服务器。

什么是负载均衡

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行。

简单来说:

当一台服务器的单位时间内的访问量越大时,服务器压力就越大,大到超过自身承受能力时,服务器就会崩溃。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们有很多台服务器,组成一个服务器集群,当用户访问请求时,先访问一个中间服务器,中间服务器可以分发请求给压力最小的一台服务器,这样,可以让每台服务器的压力趋于平衡。

安装nginx

完成安装后,开启nginx,输入127.0.0.1:8080出现下图代表成功

nginx常用命令

启动nginx(windows下start nginx);

nginx -t 查看nginx的配置文件的目录是否配置正确

nginx -s reload 重新载入nginx(当配置信息发生修改时)

nginx -s quit 停止ngix

启动node项目,分别监听3000和3001端口

不懂的童鞋可以查看express hello world实例

如下

配置nginx

1.打开nginx安装目录的conf文件夹下的nginx.conf文件

worker_processes 1;//nginx进程,一般设置为和cpu核数一样
   events{
      worker_connections 1024; //最大连接数(最大并发数)
   }
   http{
   upstream firsttest{  //upstream表示负载服务器池,定义名字为firsttest的服务器池
   #ip_hash;自动定位到第一次的服务器
   #weight 权重
   server 127.0.0.1:3000;
   server 127.0.0.1:3001;
   }
   server {
   listen 8080;//#监听端口
   location / {//# 根目录下
   proxy_pass http://firsttest;//使用那个负载服务器池
   }
   }
   }

2.访问127.0.0.1:8080

Nginx会将访问8080端口的请求反向代理到3000或者3001上,这就是一个很简单的负载均衡,不断刷新,访问到3000或者3001比例大概是1:1这是默认轮询。

3.我们也可以指定轮询几率,设置权重weight.

weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大,如下,请求落在3000的几率是2/3,落到3001的几率是1/3。

upstream firsttest{
   #ip_hash;自动定位到第一次的服务器
   #weight 权重
   server 127.0.0.1:3000 weight=2;
   server 127.0.0.1:3001;
   }

4.ip_hash指令

上述方式存在一个问题就是说,这样同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态,这样显然不行。

我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

upstream firsttest{
   #ip_hash;自动定位到第一次的服务器
   #weight 
权重

ip_hash;
   server 127.0.0.1:3000 weight=2;
   server 127.0.0.1:3001;
   }

这样一个简单的nginx负载均衡就完成了,当然,如果真的要做到真正的负载均衡远远不止这些,还需要配置很多的命令,也需要时间去学习,感谢大家观看。