【Nginx】部署负载均衡Windous实战

    技术2023-06-12  61

    一、Nginx简介

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru 站点(俄文:Рамблер)开发的.

    它也是一种轻量级的Web服务器,可以作为独立的服务器部署网站(类似Tomcat)。它高性能和低消耗内存的结构受到很多大公司青睐,如淘宝网站架设。

    先下载直接去官网http://nginx.org/

    点击后就会下载,下载完成后开始安装,其实官网已经告诉了如何安装,右侧“documentation -> nginx windows”就有详细的说明,只是英文而已

    二、安装部署

    1、下载完成后,解压缩,运行cmd,使用命令进行操作,

    不要直接双击nginx.exe 不要直接双击nginx.exe 不要直接双击nginx.exe

    一定要在dos窗口启动,不要直接双击nginx.exe,这样会导致修改配置后重启、停止nginx无效,需要手动关闭任务管理器内的所有nginx进程,再启动才可以

    2、使用命令到达nginx的加压缩后的目录 cd c:\nginx-1.15.2 3、启动nginx服务,启动时会一闪而过是正常的 start nginx 4、查看任务进程是否存在,dos或打开任务管理器都行 tasklist /fi "imagename eq nginx.exe"

    三、nginx负载均衡配置

    nginx的负载均衡主要是对proxy_pass和upstream的配置。

    我们首先需要建立一个Spring Boot的项目对外提供服务,来模拟我们实际的服务,还可以配置其它可以提供网络请求处理的框架来提供服务,这里具体由什么来提供服务和nginx配置并不相关。

    Spring Boot 项目建立的过程就不提了,这里只贴一下主要的代码:

    import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class NginxtestApplication { @Value("${server.port:}") private String port; public static void main(String[] args) { SpringApplication.run(NginxtestApplication.class, args); } @GetMapping("test") public String hello() { System.out.println("call me " + port); return "i am " + port; } }

    将项目打包后,我们执行下面的命令

    java -jar test.jar --server.port=8001 java -jar test.jar --server.port=8002

    看一下效果 接下来我们修改nginx的配置文件

    http { upstream upstream_name{ server localhost:8081; server localhost:8082; } server { listen 8800; server_name localhost; location / { proxy_pass http://upstream_name; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }

    我这里没有把默认的一些配置贴出来。

    首先,在http下添加 upstream upstream_name {} 来配置要映射的服务器。

    其中的upstream_name大家可以指定为服务的域名或者项目的代号。

    server下的location 我们将 / 下的全部请求转发到 http://upstream_name ,也就是我们上面配置的服务器列表中的某一台服务器上。具体是哪台服务器,nginx会根据配置的调度算法来确认。

    我们在浏览器中打开localhost:8800。多刷新几次就可以看到页面上的内容发生了变化。

    nginx负载均衡策略

    nginx的负载均衡策略有4种:

    轮询(默认)

    最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。

    参数有:

    参数描述fail_timeout与max_fails结合使用max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了fail_time服务器会被认为停机的时间长度,默认为10s。backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。down标记服务器永久停机了。

    注意:

    在轮询中,如果服务器down掉了,会自动剔除该服务器。 缺省配置就是轮询策略。 此策略适合服务器配置相当,无状态且短平快的服务使用。

    权重

    在轮询策略的基础上制定沦陷的几率。例如

    upstream foo { server localhost:8001 weight=2; server localhost:8002; server localhost:8003 backup; server localhost:8004 max_fails=3 fail_timeout=20s; }

    这里例子中,weight参数用于制定轮询的几率,weight默认值为1;weight的数值和被访问的几率成正比。

    注意:

    权重越高分配到需要处理的请求越多。 此策略可以与least_conn和ip_hash结合使用。 此策略比较适合服务器的硬件配置差别比较大的情况。 ip_hash

    负载均衡器按照客户端IP地址的分配方式,可以确保相同客户端的请求一直发送到相同的服务器。这样每个访客都固定访问一个后端服务器。

    upstream foo { ip_hash; server localhost:8001 weight=2; server localhost:8002; server localhost:8003; server localhost:8004 max_fails=3 fail_timeout=20s; }

    注意:

    在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。 ip_hash不能与backup同时使用。 此策略适合有状态服务,比如session。 当有服务器需要剔除,必须手动down掉。 least_conn 最小连接

    把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果

    upstream foo { least_conn; server localhost:8001 weight=2; server localhost:8002; server localhost:8003 backup; server localhost:8004 max_fails=3 fail_timeout=20s; }

    注意:

    此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。 除了上面这些调度策略之后,还有一些第三方的调度策略可以集成到nginx中。 在实际运用中,需要根据不同的场景选择不同的策略,大多是多种策略结合使用以达到实际需求的性能。

    Processed: 0.018, SQL: 9