简介
负载均衡模块,通过一个简单的调度算法来实现客户ip到后端服务器的负载平衡
负载均衡分发请求给服务器。
- 简单理解:负载均衡是反向代理的衍生品,当真实服务器有多台时,可以合理分配负载。
- 也可认为:反向代理是负载均衡的一种,当真实的服务器只有一台时就是反向代理。
示意图:
upstream
写法
upstream myproject{
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001 down;
server 127.0.0.1:8002 weight=3;
server 127.0.0.1:8003 backup;
fair;
}
负载均衡算法
- weight 负载权重,云主机配置越高权重越大
- down 当前server不参与负载均衡
- backup 其它机器全down掉或满载使用此服务(备份)
- ip_hash 按每个请求的hash结果分配(比较不错的方案,第一次访问的和后面访问的都是同一个主机,这样对于一个用户而言session就一直存放在访问的那台服务器中,不需要去其他地方去读取)
实践
主机远程连接mysql
这里的负载均衡是两台服务器连接同一个数据库,所以需要远程连接数据库(如果规模扩大,数据库也可以有集群)
这个时候需要修改settings.py中的mysql配置参数中的ip地址(修改成装有数据库所在的服务器Ip地址)
(留一个坑,但是头像传输会涉及到本地静态资源)
config.conf
upstream配置
upstream是记录参加负载服务器的IP地址的地方
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream webserver{
ip_hash; # 利用哈希ip,让固定服务器处理固定ip,解决静态资源,session问题。
server 47.99.192.206:80;
server 111.230.175.230:80;
}
server {
listen 80;
server_name localhost;
root /var/www/PeiQi1;
location /static {
#alias /var/www/PeiQi1/static;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
include /etc/nginx/uwsgi_params;
proxy_pass http://webserver;
}
location / {
proxy_set_header Host $host; #传递主机信息
proxy_set_header X-Real-IP $remote_addr; #传递用户IP
include /etc/nginx/uwsgi_params;
proxy_pass http://webserver;
}
}
}
此处评论已关闭