暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Nginx-负载均衡策略

IT运维大爆炸 2022-07-19
217

1、简介

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。2011年6月1日,nginx 1.0.4发布。

其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

2、Nginx作用

Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理。

正向代理

反向代理

3、nginx搭建

安装gcc等编译环境

[root@localhost ~]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel openssl openssl-devel

下载nginx1.18.0并解压

[root@localhost ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz
[root@localhost ~]# tar -xzvf nginx-1.18.0.tar.gz
[root@localhost ~]# cd nginx-1.18.0

配置编译选项

[root@localhost nginx-1.8.0]#./configure --prefix=/usr/local/nginx --user=root --group=root --with-http_stub_status_module --with-http_ssl_module --with-stream

编译安装

#进入/usr/local/nginx查看文件是否存在conf、sbin、html文件夹,若存在则安装成功
[root@localhost nginx-1.18.0]# make && make install

测试启动

# 如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件。
[root@localhost ~]# usr/local/nginx/sbin/nginx -c usr/local/nginx/conf/nginx.conf

4、Nginx负载均衡策略

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的。

轮询

是upstream模块负载均衡默认的策略。每个请求会按时间顺序逐个分配到不同的后端服务器。轮询不需要额外的配置。

upstream backend{
    server 192.168.200.146:9001;
    server 192.168.200.146:9002;
    server 192.168.200.146:9003;
}
server {
    listen 8083;
    server_name localhost;
    location  {
        proxy_pass http://backend;
    }
}

加权轮询[weight加权]

weight=number:用来设置服务器的权重,默认为1,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所以此策略比较适合服务器的硬件配置差别比较大的情况。

upstream backend{
    server 192.168.200.146:9001 weight=10;
    server 192.168.200.146:9002 weight=5;
    server 192.168.200.146:9003 weight=3;
}
server {
    listen 8083;
    server_name localhost;
    location {
        proxy_pass http://backend;
    }
}

ip hash

iphash对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。通过客户端请求ip的前三段进行hash求模,再通过hash值选择后端server。当需要某ip一直请求同一台服务器时候,例如分片上传文件场景。注意:当需要删除某台服务器时候,使用down,不可以直接删除。直接删除hash会重新计算,会导致用户会话,缓存失效等很多问题。

#ip_hash
upstream tomcats {
    ip_hash;
    server 192.168.8.1:8088;
    server 192.168.8.2:8088;
    server 192.168.8.3:8088;
}
#url_hash 和 least_conn根据每次请求的url地址,hash后访问到固定的服务器节点
upstream tomcats {
   # url_hash
    hash $request_uri;
    # 最少连接数
    # least_conn

    server 192.168.8.1:8088;
    server 192.168.8.2:8088;
    server 192.168.8.3:8088;
}

动静分离

在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

#其中第一个location负责处理后台请求,第二个负责处理静态资源。
worker_processes  1;

events {
     worker_connections  1024;
}

http {

     server {
           listen       10000;
           server_name localhost;
       
          #拦截后台请求
           location {
                  proxy_pass http://localhost:8888;
                  proxy_set_header X-Real-IP $remote_addr;
           }

          #拦截静态资源
           location ~  .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
                  root /Users/dalaoyang/Downloads/static;
           }
        }
}

欢迎大家扫码关注:

本公众号只写原创,不接广告、不接广告、不接广告。下期小伙伴想学习什么技术,可以私信发我吆。


文章转载自IT运维大爆炸,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论