不间断的Web服务(Nginx进行负载均衡)

举报
神龙居市 发表于 2022/11/22 21:21:33 2022/11/22
【摘要】 1.Nginx负载均衡nginx已经是一款流行的Web应用代理软件,应用场景包括负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上。一是可以把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器宕机,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。下图为负载均衡示例图,当用户请求发送后,首先发送到负载均衡服务...

1.Nginx负载均衡

nginx已经是一款流行的Web应用代理软件,应用场景包括负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上。一是可以把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器宕机,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。

下图为负载均衡示例图,当用户请求发送后,首先发送到负载均衡服务器,而后由负载均衡服务器根据配置规则将请求转发到不同的web服务器上。
image.png

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;
    }
}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。