代码编织梦想

🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊
🌸愿您在此停留的每一刻,都沐浴在轻松愉悦的氛围中。
📖这里不仅有丰富的知识和趣味横生的内容等您来探索,更是一个自由交流的平台,期待您留下独特的思考与见解。🌟
🚀让我们一起踏上这段探索与成长的旅程,携手挖掘更多可能,共同进步!💪✨

一、分发算法介绍

如何将用户请求按照一定的规律分发给业务服务器。主要分为Nginx集群默认算法和基于请求头分发算法。

二、nginx集群默认算法

nginx的upstream 目前支持4种方式的分配

  • 轮询(默认)
      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。用于处理静态页面
  • weight
      指定权重,数值大的服务器,获得的请求的数量越多,用于后端服务器性能不均的情况。用于处理静态页面
  • ip_hash
      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务,好处是可以解决session的问题。可以处理动态网站。
  • url_hash(第三方)
      按访问url的hash结果来分配请求,使每个url定向到同一个后端服务 ,后端服务器为缓存时比较有效。

nginx有很多第三方模块,各位可以去下载使用

https://www.nginx.com/resources/wiki/modules/
  • 1

三、nginx业务服务器状态

每个设备的状态设置参数:

  • down
    表示当前的server暂时不参与负载;
  • weight
    默认为1,weight越大,负载的权重就越大;
  • max_fails
    允许请求失败的次数默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;
  • fail_timeout
    失败超时时间,在连接Server时,如果在超时时间之内超过max_fails指定的失败次数,会认为在fail_timeout时间内Server不可用,默认为10s
  • backup
    其他所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

四、nginx集群默认算法测试

实验环境

实验机 :四台虚拟机,一台测试机,一台分发器,两台web服务器。

网卡:vmnet4

系统:CentOS8.0

SELinux&防火墙:关闭

网段:192.168.0.0/24

在这里插入图片描述

实验拓扑

在这里插入图片描述

4.1、轮询算法
upstream web {
    server 192.168.0.42; 
    server 192.168.0.43;
}
server {
    listen 80;
    server_name localhost; 
    location / {
        proxy_pass http://web;
    } 
}

前面已经测试验证了轮询算法分发。

配置backup参数

upstream web {
    server 192.168.0.42; 
    server 192.168.0.43 backup;
}
server {
    listen 80;
    server_name localhost; 
    location / {
        proxy_pass http://web;
    } 
}

先正常访问测试

[root@client ~]# curl 192.168.0.40
web1
[root@client ~]# curl 192.168.0.40
web1
[root@client ~]# curl 192.168.0.40
web1

关停第一个节点情况,访问尝试:

[root@web1 ~]# systemctl stop httpd
[root@client ~]# curl 192.168.0.40
web2
[root@client ~]# curl 192.168.0.40
web2
[root@client ~]# curl 192.168.0.40
web2

启动第一个节点测试

[root@web1 ~]# systemctl start httpd
[root@client ~]# curl 192.168.0.40
web1
[root@client ~]# curl 192.168.0.40
web1
[root@client ~]# curl 192.168.0.40
web1
4.2、基于权重

通过配置权重,可以让性能好的服务器承担更多的负载

upstream web {
    # 设置权重比例1:2
    server 192.168.0.42 weight=1; 
    server 192.168.0.43 weight=2;
}
server {
    listen 80;
    server_name localhost; 
    location / {
        proxy_pass http://web;
    } 
}

测试

[root@client ~]# curl 192.168.0.40 
    web1
[root@client ~]# curl 192.168.0.40 
    web2
[root@client ~]# curl 192.168.0.40 
    web2
[root@client ~]# curl 192.168.0.40 
    web1
[root@client ~]# curl 192.168.0.40 
    web2
[root@client ~]# curl 192.168.0.40 
    web2
4.3、基于ip_hash分发

ip_hash算法能够保证来自同样源地址的请求都分发到同一台主机。
  需要注意:ip_hash算法不支持backup、weight设置。默认权重为1。

upstream web { 
    ip_hash;    # 指定ip_hash即可,默认weight权重比例1: 1
    server 192.168.0.42;
    server 192.168.0.43; 
}
server { 
    listen 80;
    server_name localhost; 
    location / {
        proxy_pass http://web;
    } 
}

测试

[root@client ~]# curl 192.168.0.40
web2
[root@client ~]# curl 192.168.0.40
web2
[root@client ~]# curl 192.168.0.40
web2
切换到另外一台不同网段的主机
MacBook-Pro:~ hello$ ifconfig
vmnet8: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 00:50:56:c0:00:08 
	inet 172.16.121.1 netmask 0xffffff00 broadcast 172.16.121.255

MacBook-Pro:~ hello$ curl 172.16.121.134
web1
MacBook-Pro:~ hello$ curl 172.16.121.134
web1
MacBook-Pro:~ hello$ curl 172.16.121.134
web1
4.4、基于url的hash

不同的URL我去找不同的机器访问,就是把url计算出一个值然后除以机器的数量取余 ,需要安装第三方插件

nginx分发器上,将nginx主程序包和下载好的第三方软件包放在同一个目录下解压
[root@master ~]# cd nginx-1.15.12/
[root@master ~]# ./configure --prefix=/usr/local/nginx --add-module=/root/ngx_http_consistent_hash-master
第三方模块的安装方法

[root@master ~]# make & make install
[root@master ~]# 	vim /usr/local/nginx/conf/nginx.conf


worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream web {
        consistent_hash $request_uri;
        server 192.168.0.42 ;
        server 192.168.0.43 ;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            proxy_pass http://web;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@master ~]# /usr/local/nginx/sbin/nginx

在web主机上生成测试页面
[root@web1 ~]# for i in `seq 1 10`; do echo "web1_$i" > /var/www/html/$i.html; done

[root@web2 ~]# for i in `seq 1 10`; do echo "web2_$i" > /var/www/html/$i.html; done
这样我们就知道测试的时候访问的是哪台机器的页面文件了

测试访问
[root@client ~]# for i in `seq 1 10`; do curl http://192.168.0.40/$i.html; done
web1_1
web1_2
web1_3
web2_4
web2_5
web1_6
web2_7
web1_8
web2_9
web2_10

这个方式一般用在我们的缓存上,目的是为了命中率,什么是命中率,也就是说同样是下数据,你要是从源下就是没有命中,从缓存下就是命中

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44624290/article/details/139641444

nginx分发配置_tjc荣光的博客-爱代码爱编程_nginx路由分发配置

nginx 分发配置 1.确保nginx.conf中包含   include /etc/nginx/conf.d/*.conf;(读取conf.d目录下所有.conf文件) 2.在conf.d目录下可创建多个.conf文件 3.文件内容 server{         listen    80;         serve

nginx分发模板_花仙子子的博客-爱代码爱编程

#user nobody; worker_processes 8; #error_log logs/error.log; #error_log logs/error.log notice; #error_log

nginx集群分发配置_小王同志_的博客-爱代码爱编程_怎么查看nginx集群分发

•  Nginx集群其实是:虚拟主机+反向代理+upstream分发模块组成的 虚拟主机:接受和响应请求 反向代理: 带⽤户去数据服务器拿数据 upstream: 告诉Nginx去哪个数据服务器拿数据 •  数据⾛向 1)虚

nginx的upstream目前支持5种方式的分配 _午夜听雨的博客-爱代码爱编程

nginx的upstream目前支持5种方式的分配 1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 例如: upstream bakend { server 192.168.0.14 we

nginx分发算法-爱代码爱编程

nginx分发算法upstream 分发算法有:轮询,weight(权重),ip_hash(每个访客固定访问一个后端服务器),fair(按响应时间分类),url_hash(每个url定向一个后端服务器) 轮询和weight适合静态页面,不适合动态页面 ip_hash 适合动态页面 基于请求分发: 基于host分发基于开发语言分发基于浏览器分发基于源i

使用nginx反向代理简单实现服务分发-爱代码爱编程

我们在实际开发中后端其实经常会有很多的微服务,因此接口地址有很多,但是前端中只有一个api地址的配置位置。 这时我们可以使用nginx反向代理让不同的api路径分发到对应的服务器中 要使用nginx我们需要先安装到我们的电脑上,nginx有Linux版本的也有Windows版本的,Linux版的功能相对来说会更加强大一些。这里我们用Windows版做一下

nginx负载均衡及分发设定-爱代码爱编程

配置文件所在目录 nginx目录/conf/nginx.conf 配置文件举例 #user  nobody;worker_processes  4; #error_log  logs/error.log; #error_log  logs/error.log  notice; #error_log  logs/error.log

nginx常见分发算法实现-爱代码爱编程

nginx常见分发算法实现 之前我在 几种均衡负载算法里介绍了几种均衡算法。 这篇文章,主要介绍如何在nginx配置。 流量的分类 1. 单个请求消耗的资源大致一样,返回的响应大小也都差不多,如一些常见web服务的接

nginx根据url将请求分发到不同的服务器_nginx根据url分发不同服务器-爱代码爱编程

在nginx的配置文件nginx.conf中做如下配置: 找到service块,写入如下内容: server { listen 10008; server_name localhost; location / { proxy_pass