10反向代理和负载均衡

#

1、复习

1、Nginx + Python的流程

1、安装基础环境
python3 pip django uwsgi

2、准备源代码

3、使用uwsgi启动Django

python3 manage.py runserver 0.0.0.0:8000

4、Nginx 代理 uwsgi 服务

5、测试

2、什么叫四层负载均衡什么叫七层负载均衡

四层负载均衡是基于TCP/IP的    代理TCP(MySQL)
七层负载均衡是基于HTTP的 代理HTTP(Nginx,Uwsgi)

 

2、反向代理

1、什么是正向代理,什么是反向代理?
正向代理:客户端去找服务端
反向代理:代理去找服务端

2、反向代理

upstream [链接池名称] {
server [ip]:[端口] [分发策略];
}

proxy_pass http://[连接处名称];

[root@lb01 conf.d]# cat game.conf
upstream game {
  server 172.16.1.8:80;
  server 172.16.1.7:80;
}
server {
  server_name game.test.com;
  listen 80;
  location / {
      proxy_pass http://game;
  }
}


通过负载均衡访问web服务,由于通过IP访问,导致负载均衡错误。
解决:
将域名携带到后端的web服务器中去。

怎么携带?




# 用户请求的时候HOST的值是game.test.com, 那么代理服务会像后端传递请求的还是game.test.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

#nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location

#nginx代理等待后端服务器的响应时间
Syntax:   proxy_read_timeout time;
Default:   proxy_read_timeout 60s;
Context:   http, server, location

#后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location
 
#nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

#设置nginx代理保存用户头信息的缓冲区大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location

#proxy_buffers 缓冲区
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location

[root@lb01 conf.d]# cat ../proxy_params
# 用户请求的时候HOST的值是game.test.com, 那么代理服务会像后端传递请求的还是game.test.com
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# nginx代理与后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 10s;
# nginx代理等待后端服务器的响应时间
proxy_read_timeout 10s;
# 后端服务器数据回传给nginx代理超时时间
proxy_send_timeout 10s;
# nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户
proxy_buffering on;
# 设置nginx代理保存用户头信息的缓冲区大小
proxy_buffer_size 8k;
# proxy_buffers 缓冲区
proxy_buffers 8 8k;
# 状态标记
proxy_next_upstream http_404 http_500 http_502 http_503 http_504 http_403 http_429;

 

3、负载均衡

1、什么是负载均衡

通过反向代理实现多台web服务器共同工作。

2、负载均衡的算法(策略)

1、轮询(默认)

2、权重
weight的值越大,权重越高。
  server 172.16.1.8:80 weight=1;
  server 172.16.1.7:80 weight=10;

3、ip_hash
某一个客户端,固定访问某一个服务端。

4、备用节点
当正常的节点全部丧失服务能力,备用节点立即顶上。
backup;

3、负载均衡的后端服务状态

1、标记为下线状态
down

2、配置错误容忍度
max_fails=3 fail_timeout=10s;

必须增加状态标记:proxy_next_upstream http_404 http_500 http_502 http_503 http_504 http_403 http_429;

3、监控检测(也必须要标记)
check interval=3000 rise=2 fall=3 timeout=1000 type=tcp
   #interval 检测间隔时间,单位为毫秒
   #rise     表示请求2次正常,标记此后端的状态为up
   #fall     表示请求3次失败,标记此后端的状态为down
   #type     类型为tcp
   #timeout   超时时间,单位为毫秒

4、会话保持

1、创建一个django项目
[root@web02 opt]# django-admin startproject pysession

2、创建一个应用
[root@web02 pysession]# django-admin startapp application

3、修改配置文件
[root@web02 pysession]# vim pysession/settings.py
ALLOWED_HOSTS = ['*']
DATABASES = {}

4、测试

知识储备:
session使用来存储数据。

5、设置session
[root@web02 pysession]# pwd
/opt/pysession
[root@web02 pysession]# vim pysession/settings.py
# 设置session存储方式,这里指定使用文件的方式存储session
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
# 指定session保存的路径
SESSION_FILE_PATH = '/tmp/'

6、使用session
1、设置session
request.session['code'] = 'web02'

2、获取session
request.session.get('code')


[root@web02 pysession]# pwd
/opt/pysession
[root@web02 pysession]# >application/views.py
[root@web02 pysession]# vim application/views.py
from django.shortcuts import render, HttpResponse
def create(request):
  request.session['code'] = 'web02'
  return HttpResponse("设置成功")

def getSession(request):
  code = request.session.get('code')
  return HttpResponse(f"获取SESSION:{code}")

[root@web02 pysession]# pwd
/opt/pysession
[root@web02 pysession]# vim pysession/urls.py
[root@web02 pysession]# >pysession/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from application import views

urlpatterns = [
  path('admin/', admin.site.urls),
  url(r'^create/', views.create),
  url(r'^getSession/', views.getSession),
]

7、测试


8、基础环境
yum install python3 -y
pip3 install uwsgi
pip3 install django==2.2.2



在负载均衡中,操作文件不同步(会话不保持)

NFS

1、创建挂载点
[root@nfs /]# vim /etc/exports
/session   172.16.1.0/20(rw,all_squash,sync,anonuid=996,anongid=996)

[root@nfs /]# mkdir /session
[root@nfs /]# chown www.www /session/

[root@nfs /]# systemctl restart nfs-server rpcbind

[root@nfs /]# showmount -e
/session 172.16.1.0/20
/data    172.16.1.0/20

[root@nfs /]# setenforce 0

2、挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/session /tmp/
[root@web04 ~]# mount -t nfs 172.16.1.31:/session /tmp/

 

 

 

 

 

 

 

posted @ 2021-11-06 20:29  vonmo  阅读(109)  评论(0编辑  收藏  举报