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负载均衡就完成了,当然,如果真的要做到真正的负载均衡远远不止这些,还需要配置很多的命令,也需要时间去学习,感谢大家观看。