不间断的Web服务(Nginx进行负载均衡)
1.Nginx负载均衡
nginx已经是一款流行的Web应用代理软件,应用场景包括负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上。一是可以把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器宕机,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。
下图为负载均衡示例图,当用户请求发送后,首先发送到负载均衡服务器,而后由负载均衡服务器根据配置规则将请求转发到不同的web服务器上。
2.Nginx负载均衡策略
nginx内置负载均衡策略主要分为三大类,分别是轮询、最少连接和ip hash
- 最少连接
请求分配给活动连接数最少的服务器,哪台服务器连接数最少,则把请求交给哪台服务器,由nginx统计服务器连接数
- ip hash
基于客户端ip的分配方式
2.1轮询
以循环方式分发对应用服务器的请求,将请求平均分发到每台服务器上。
2.2最少连接
轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果,适合请求处理时间长短不一造成服务器过载的情况。
2.3 ip hash
这个方法确保了相同的客户端的请求一直发送到相同的服务器,这样每个访客都固定访问一个后端服务器。如用户需要分片上传文件到服务器下,然后再由服务器将分片合并,这时如果用户的请求到达了不同的服务器,那么分片将存储于不同的服务器目录中,导致无法将分片合并,该场景则需要使用ip hash策略。
需要注意的是,ip_hash不能与backup同时使用,另外当有服务器需要剔除,必须手动down掉,此模式适合有状态服务,比如session。
3.Nginx负载均衡搭建示例
在华为云上购买了2台ECS服务器,严格来说或,3台比较容易理解,1台Nginx,2台Web服务器,Nginx放到其中一台Web服务器上也是一样的。
3.1 Nginx的安装
我的系统选择的是Ubuntu18.04,直接用命令
# 安装命令
sudo apt-get install nginx
# 查看安装结果
nginx -v
# 启动
sudo service nginx start
安装完毕后,进入nginx目录下的conf目录,编辑 nginx.conf 文件,修改内容为在http节点下增加,其中反向代理写在其中一台上
http {
upstream www.51iot.com.cn {
server 192.168.1.101:8081;
server 192.168.1.102:8082;
}
server {
listen 80;
server_name www.51iot.com.cn;
location / {
proxy_pass http://www.51iot.com.cn;
proxy_set_header Host $proxy_host;
}
}
}
为了方便说明,下面用一个文件最小化配置来说明
events {
}
http {
#upstream 模块应放于 http 模块中,默认的分配方式是轮寻
upstream www.51iot.com.cn {
server 192.168.1.101:8081 weight=3;#weight 分配权重,值越大负载的权重越大
server 192.168.1.102:8082 down;#表示当前 server 不参与负载
#以下表明如果此分发节点在10秒内出现2次不可用,那10秒内不会再分发到此节点,直到10秒后再次重新检测节点健康情况
#如果将 max_fails=0 则停止检查节点健康情况
server 192.168.1.103:8083 max_fails=2 fail_timeout=10s;
}
server {
listen 80;
location / {
#配置一个反向代理,这里的设置和上面的 upstream 相对应的,你也可以将这里设置成 http://www.baidu.com
#这样你访问你的ip浏览器出现的就是百度的内容了
#如果你将这里设置成和上面的 myweb 一样,那么所有的请求都代理到 upstream 服务器组 myweb
proxy_pass http://www.51iot.com.cn;
}
}
server {
listen 8081;
root /usr/local/nginx/html/web1;
}
server {
listen 8082;
root /usr/local/nginx/html/web2;
}
}
- 点赞
- 收藏
- 关注作者
评论(0)