分布式 - 服务器Nginx:一小时入门系列之负载均衡

这篇具有很好参考价值的文章主要介绍了分布式 - 服务器Nginx:一小时入门系列之负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 负载均衡

跨多个应用程序实例的负载平衡是一种常用技术,用于优化资源利用率、最大化吞吐量、减少延迟和确保容错配置。‎使用 nginx 作为非常有效的HTTP负载平衡器,将流量分配到多个应用程序服务器,可以提升Web应用程序的性能,提高扩展性和可靠性。

分布式 - 服务器Nginx:一小时入门系列之负载均衡,【分布式-服务器Nginx】,分布式,服务器,nginx

使用 upstream定义一组服务 。

# 启动ruoyi-admin服务
[root@nginx-dev conf.d]# cd /home/apps
[root@nginx-dev apps]# java -jar ruoyi-admin.jar

# 启动tomcat服务
[root@nginx-dev ~]# /home/apache-tomcat-8.5.81/bin/startup.sh

# 在 /etc/nginx/conf.d文件夹下添加nginx配置文件:8003.conf
[root@nginx-dev ~]# cd /etc/nginx/conf.d
[root@nginx-dev conf.d]# vi 8003.conf   
[root@nginx-dev conf.d]# nginx -s reload

8003.conf 配置文件内容:

upstream ruoyi-apps {
    #不写,采用轮循机制
    server localhost:8080;
    server localhost:8088;
}

server {
    listen 8003;
    server_name ruoyi.loadbalance;

    location / {
        proxy_pass http://ruoyi-apps;
    }
    
    # 请求ie页面
    location = /html/ie.html {
        root  /some/path/static;
    }

    # 请求字体文件
    location ^~ /fonts/ {
        root  /some/path/static;
    }

    # css|js|png|jpg|gif|ico 页面
    location ~ \.(css|js|png|jpg|gif|ico) {
        root /some/path/static;
    }  
}

2. 负载均衡策略

1. 轮询策略

upstream ruoyi-apps {
    #不写,采用轮循机制
    server localhost:8080;
    server localhost:8088;
}

轮询策略(Round Robin):默认的负载均衡策略,将请求依次分配给每个后端服务器,循环往复。

例如,当请求 nginx 的 8003 端口时,会将请求轮询转发给 tomcat 和 ruoyi-admin 两个后端服务器,即第1次请求会访问8080端口,第2次请求会访问8088端口,循环往复。

当访问 nginx 的 8003 端口时 ,请求会进入 8088 端口的 ruoyi-admin 服务,当填写完密码以后点击登录,这次请求会进入 8080 端口的 tomcat 服务,因此总是登录不成功。

分布式 - 服务器Nginx:一小时入门系列之负载均衡,【分布式-服务器Nginx】,分布式,服务器,nginx

2. 最小连接策略

最少连接策略(Least Connections):将请求分配给当前连接数最少的后端服务器,以达到负载均衡的目的。

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

请注意,使用轮循机制或最少连接的负载平衡,每个客户端的请求都可能分发到不同的服务器。不能保证同一客户端将始终定向到同一服务器。‎

3. IP 哈希策略

IP 哈希策略(IP Hash):根据客户端 IP 地址的哈希值来选择后端服务器,同一个客户端的请求总是被分配到同一个后端服务器上。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}
upstream ruoyi-apps {
    ip_hash;
    server localhost:8080;
    server localhost:8088;
}

server {
    listen 8003;
    server_name ruoyi.loadbalance;

    location / {
        proxy_pass http://ruoyi-apps;
    }
    
    # 请求ie页面
    location = /html/ie.html {
        root  /some/path/static;
    }

    # 请求字体文件
    location ^~ /fonts/ {
        root  /some/path/static;
    }

    # css|js|png|jpg|gif|ico 页面
    location ~ \.(css|js|png|jpg|gif|ico) {
        root /some/path/static;
    }  
}

此方法可确保来自同一客户端的请求将始终定向到同一服务器,除非此服务器不可用。

Nginx的配置文件中定义了一个名为 ruoyi-apps 的 upstream 块,其中包含两个服务器 localhost:8080 和 localhost:8088,并使用 ip_hash 算法进行负载均衡。这意味着每个客户端的请求将被发送到同一个服务器,以确保会话一致性。接下来,该配置文件定义了一个名为ruoyi.loadbalance的服务器块,它监听端口8003,并将所有请求代理到 ruoyi-apps 中定义的服务器组。这意味着所有来自客户端的请求都将被转发到localhost:8080或localhost:8088中的一个服务器上,以实现负载均衡。

4. 哈希策略

通用hash,允许用户自定义hash的key,key可以是字符串、变量或组合。例如,key可以是配对的源 IP 地址和端口,也可以是 URI,如以下示例所示:‎

upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

请注意:基于 IP 的哈希算法存在一个问题,那就是当有一个上游服务器宕机或者扩容的时候,会引发大量的路由变更,进而引发连锁反应,导致大量缓存失效等问题。

假设我们基于 key 来做 hash,现在有 4 台上游服务器,如果 hash 算法对 key 取模,请求根据用户定义的哈希键值均匀分布在所有上游服务器之间。当有一台服务器宕机的时候,就需要重新对 key 进行 hash,最后会发现所有的对应关系全都失效了,从而会引发缓存大范围失效。

分布式 - 服务器Nginx:一小时入门系列之负载均衡,【分布式-服务器Nginx】,分布式,服务器,nginx

consistent参数启用 ‎‎ketama‎‎ 一致哈希算法,如果在上游组中添加或删除服务器,只会重新映射部分键,从而最大限度地减少缓存失效。‎

分布式 - 服务器Nginx:一小时入门系列之负载均衡,【分布式-服务器Nginx】,分布式,服务器,nginx

5. 加权轮询策略

加权轮询策略(Weighted Round Robin):根据后端服务器的权重来分配请求,权重越高的服务器被分配到的请求越多。

upstream my-server {
    server performance.server weight=3;
    server app1.server;
    server app2.server;
}

如上所示,每 5 个新请求将按如下方式分布在应用程序实例中:3 个请求将定向到 performance.server,一个请求将转到 app1.server,另一个请求将转到 app2.server。‎文章来源地址https://www.toymoban.com/news/detail-650826.html

到了这里,关于分布式 - 服务器Nginx:一小时入门系列之负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式 - 服务器Nginx:一小时入门系列之HTTPS协议配置

    1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来

    2024年02月11日
    浏览(53)
  • 分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

    1. HTTPS 协议 HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来

    2024年02月11日
    浏览(52)
  • 分布式 - 服务器Nginx:一小时入门系列之代理缓冲与缓存

    官方文档:https://nginx.org/en/docs/http/ngx_http_proxy_module.html 代理缓冲用于临时存储从后端服务器返回的响应数据。通过使用代理缓冲,Nginx可以在接收完整的响应后再将其发送给客户端,从而提高性能和效率。 ① 客户端往往是用户网络,情况复杂,可能出现网络不稳定,速度较

    2024年02月11日
    浏览(48)
  • 分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

    1. 正向代理和反向代理 正向代理是 客户端 通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器发送请求,获取资源并返回给客户端。正向代理的典型应用场景是翻墙,即通过代理服务器访问被封锁的网站

    2024年02月14日
    浏览(58)
  • 分布式 - 服务器Nginx:一小时入门系列之TCP反向代理和负载均衡

    1. HTTP反向代理和TCP反向代理 Nginx可以作为HTTP反向代理和TCP反向代理。 HTTP反向代理是指Nginx作为Web服务器的代理服务器,接收客户端的HTTP请求,然后将请求转发给后端的Web服务器,最后将Web服务器的响应返回给客户端。这种方式可以实现负载均衡、缓存、SSL终止等功能。 T

    2024年02月11日
    浏览(57)
  • Windows服务器设置Nginx实现分布式服务

    下载Nginx-1.16.1版本。解压到如下目录: 设置环境变量: 检查版本: 启动nginx.exe ,出现黑框一闪而过,进程中出现如下情况代表启动成功: 下载wiremock-standalone-2.25.1.jar,可以使用Maven配置pom.xml下载。注意下载standalone版本。新建ServerA、ServerB两个目录,分别拷贝jar,新建启动

    2024年02月07日
    浏览(55)
  • 分布式 - 服务器Nginx:基础系列之Nginx配置文件结构

    Nginx的核心配置文件默认是放在 /usr/local/nginx/conf/nginx.conf : nginx.conf 配置文件中默认有三大块:全局块、events块、http块。其中http 块中可以配置多个server块,每个server块又可以配置多个location块。 01. user 指令 user指令也可以用于指定Nginx服务器worker进程的运行用户和用户组。它

    2024年02月10日
    浏览(42)
  • 分布式 - 服务器Nginx:基础系列之Nginx简介 | 下载安装 | 启动和停止服务

    Nginx是一个高性能的Web服务器,同时也是一个反向代理服务器。它最初是为了解决C10K问题而开发的,即如何让一个服务器同时处理成千上万个并发连接。Nginx采用了事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接,因此被广泛应用于高并发的Web应用场景中。 此

    2024年02月10日
    浏览(68)
  • 分布式 - 服务器Nginx:应知应会系列之Nginx简介 | 下载安装 | 启动和停止服务

    Nginx是一个高性能的Web服务器,同时也是一个反向代理服务器。它最初是为了解决C10K问题而开发的,即如何让一个服务器同时处理成千上万个并发连接。Nginx采用了事件驱动的异步非阻塞处理方式,能够高效地处理大量并发连接,因此被广泛应用于高并发的Web应用场景中。 此

    2024年02月11日
    浏览(62)
  • 分布式 - 服务器Nginx:基础系列之Nginx静态资源配置优化sendfile | tcp_nopush | tcp_nodelay

    1. sendfile 指令 请求静态资源的过程:客户端通过网络接口向服务端发送请求,操作系统将这些客户端的请求传递给服务器端应用程序,服务器端应用程序会处理这些请求,请求处理完成以后,操作系统还需要将处理得到的结果通过网络适配器传递回去。 sendfile 指令是用于将

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包