Django项目部署(四)NGINX实现负载均衡

可参考博客:https://blog.51cto.com/gaowenlong/1887997
https://blog.csdn.net/z406245159/article/details/72821285
https://www.cnblogs.com/jsonhc/p/7199295.html?utm_source=itdadao&utm_medium=referral

负载均衡:
A---应用服务器:运行项目的服务器 同一个项目 单独的存在的时候正常运行项目 web服务器运行 192.168.1.186
(上面有 nginx ,uwsgi, 虚拟环境 ,80端口 ,mysql数据库 )
B----应用服务器:运行项目的服务器 同一个项目 单独的存在的时候正常运行项目 web服务器运行 192.168.1.187
C---应用服务器:运行项目的服务器 同一个项目 单独的存在的时候正常运行项目 web服务器运行 192.168.1.188
D---反向代理服务器:192.168.1.189,用户通过访问p服务器的地址之后间接的来访问A/B/C应用服务器其中的一台服务器的项目
E---服务器 安装mysql数据库 47.100.xxx.xxx

如何去做反向代理配置nginx web服务器

根据之前做的,如今有两台web服务器 1.186和1.187 。 负载均衡服务器1.189只安装NGINX
在这里插入图片描述
先确认189的NGINX能正常运行
在这里插入图片描述

一对一的反向代理 (了解即可)

当url 匹配路径的时候 /
一对一的反向代理 访问192.168.1.189 ---> 187
proxy_pass http://192.168.1.187;

vim /etc/nginx/conf.d/default.conf
在这里插入图片描述
192.168.1.189/admin/login
访问 (此时访问的是187的内容)
在这里插入图片描述
在这里插入图片描述

这是186的界面(为了区别187)
在这里插入图片描述

一对多 负载均衡 (186,187)

在这里插入图片描述

1、权重的

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

upstream local_servers {
    server 192.168.1.187:8996 weight=1;
    server 192.168.1.185:8997 weight=1;
   server 192.168.1.185:8997 weight=1;
}

upstream local_servers1 {
    server 192.168.1.187 weight=1;
    server 192.168.1.185 weight=1;
   server 192.168.1.185 weight=1;
}


server {
        listen       80;
        server_name  localhost;
        charset utf-8;
        location / {
            proxy_pass http://local_servers1;
				proxy_set_header Host $host;       // $host就是nginx代理服务器
 			proxy_set_header X-Real-IP $remote_addr;   //客户端真实ip
 			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
proxy_buffering off;               //代理缓存删除

        }
    }

#出现的频率大概是1:1。这就是upstream中weight的作用,表示weight表示权重,权重越大,请求转发到这个地址的概率就越大。

修改后重启 systemctl restart nginx.service
在这里插入图片描述
访问,看效果
在这里插入图片描述

分割线=

2、ip_hash的

将刚才的权重注释掉,换成ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
在这里插入图片描述
当访问的时候会生成个session值 ,写在数据库里的

管理员在登录的时候把用户名存session数据库中,生成一条session数据的时候,session_data:用户名, session_key:django
自动生成写入数据库中django_session , 同时又把session_key存储到了cookie

在这里插入图片描述
可看出 lvn开头的sessionid 是存在数据库里的
在这里插入图片描述
此时当web项目都访问同一个数据库的时候,使用weight是没有问题的。 但是如果访问的是不同的数据库,比如都使用自身机器的数据库,这时候会出问题,你访问页面的时候,他会访问两台数据库的内容。他会一直循环在登录页面。 使用ip_hash能处理session问题
session 默认数据是存储在数据库中,存储数据的位置是可以改变存储到指定服务器的某个文件中,需要配置django只能用ip_hash

小结:

1、如果多台应用服务器连接的是同一台服务器上的数据库的话,使用权重,分配IP_Hash 都可以
2、如果多台应用服务器连接的是不同服务器的数据库,那么使用权重的分配方式就出问题了,那么可以使用的方式 ip_hash解决问题

END

猜你喜欢

转载自blog.csdn.net/Nightwish5/article/details/111931209