TypechoJoeTheme

至尊技术网

统计
登录
用户名
密码
/
注册
用户名
邮箱

悠悠楠杉

网站页面

Nginx负载均衡

2023-04-12
/
0 评论
/
760 阅读
/
正在检测是否收录...
04/12

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

# 代理服务器
# 设置服务器组
upstream backend {
    server 111.173.115.2:80;
    server 111.173.115.3:80;
    server 111.173.115.4:80;
}
server {
    listen 80;
    server_name 111.173.115.1;
    
    location / {
        # backend 就是服务器组的名称
        proxy_pass http://backend/;
    }
}

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

# 代理服务器
# 设置服务器组
upstream backend {
    server 111.173.115.2:80 weight=10;
    server 111.173.115.3:80 weight=8;
    server 111.173.115.4:80 weight=6;
}
server {
    listen 80;
    server_name 111.173.115.1;
    
    location / {
        # backend 就是服务器组的名称
        proxy_pass http://backend/;
    }
}

3、ip_hash
当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来自某一个IP的用户在后端Web服务器A上登录后,再访问该站点的其他URL,能保证其访问的还是后端web服务器A。
注意:使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接受的请求少,而且设置后端服务器权重等方法将不起作用。

# 代理服务器
# 设置服务器组
upstream backend {
    ip_hash;
    server 111.173.115.2:80;
    server 111.173.115.3:80;
    server 111.173.115.4:80;
}
server {
    listen 80;
    server_name 111.173.115.1;
    
    location / {
        # backend 就是服务器组的名称
        proxy_pass http://backend/;
    }
}

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

# 代理服务器
# 设置服务器组
upstream backend {
    least_conn;
    server 111.173.115.2:80;
    server 111.173.115.3:80;
    server 111.173.115.4:80;
}
server {
    listen 80;
    server_name 111.173.115.1;
    
    location / {
        # backend 就是服务器组的名称
        proxy_pass http://backend/;
    }
}

5、url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从缓存中读取。

# 代理服务器
# 设置服务器组
upstream backend {
    hash $request_uri;
    server 111.173.115.2:80;
    server 111.173.115.3:80;
    server 111.173.115.4:80;
}
server {
    listen 80;
    server_name 111.173.115.1;
    
    location / {
        # backend 就是服务器组的名称
        proxy_pass http://backend/;
    }
}

6、fair
fair采用的不是内建负载均衡使用的均衡算法,而是可以根据页面大小、加载时间长短智能地进行负载均衡。那么如何使用第三方模块的fair负载均衡策略?

# 代理服务器
# 设置服务器组
upstream backend {
    fair;
    server 111.173.115.2:80;
    server 111.173.115.3:80;
    server 111.173.115.4:80;
}
server {
    listen 80;
    server_name 111.173.115.1;
    
    location / {
        # backend 就是服务器组的名称
        proxy_pass http://backend/;
    }
}

但是如果直接使用会报错,因为fair属于第三方模块实现的负载均衡。需要添加nginx-upstream-fair,如何添加对应的模块:

1.下载nginx-upstream-fair模块。

https://github.com/gnosek/nginx-upstream-fair

2.将下载的文件上传到服务器并进行解压缩。

unzip nginx-upstream-fair-master.zip

3.重命名资源。

mv nginx-upstream-fair-master fair

4.使用./configure命令将资源添加到Nginx模块中。

./configure --add-module=/root/fair

5.编译。

make

-编译可能会出现如下错误: nginx_http_upstream_srv_conf_t结构中缺少default_port

-解决方案 在Nginx的源码中src/http/nginx_http_upstream.h,找到ngx_http_upstream_srv_conf_s,在模块中添加default_port属性:
in_port_t default_port 然后再进行make。

6.更新Nginx。

1、将sbin目录下的nginx进行备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold

2、将安装目录下的objs中的nginx拷贝到sbin目录
cd objs
cp nginx /usr/local/nginx/sbin

3、更新
cd ../
make upgrade

7.编译测试使用Nginx。

教程经验Linux教程Nginx负载均衡
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/6393/(转载时请注明本文出处及文章链接)

评论 (0)