1.负载均衡的实现.
1.准备三台虚拟机,比如
192.168.119.146 提供资源
192.168.119.147 提供nginx的负载均衡
192.168.119.148 提供资源
2.分别配置三台机器的nginx.conf确保能实现自己需要的功能
3.在提供负载均衡的服务器192.168.119.147中的nginx.conf做修改
添加负载均衡地址池的参数,默认是服务器轮询方式
upstream crm {
server 192.168.119.146;
server 192.168.119.148;
}
在location /中修改成
location / {
proxy_pass http://crm;
}
4.添加完成后重启nginx,检查负载均衡,浏览器会有缓存,所以用curl来访问代理服务器,会轮询着打印两台服务器的资源,丢给upstream负载池中的IP轮询访问
5.nginx中的轮询算法:
1.权重轮询,在upstream中的IP加入weight权重,按比例来轮询访问
upstream crm {
server 192.168.119.146 weight=2;
server 192.168.119.148 weight=3;
}
访问146两次,访问148三次
2.ip_hash方式,对你的IP进行还是计算,不能与权重共用
upstream s18django {
server 192.168.226.128;
server 192.168.226.130;
ip_hash;
}
对访问的负载均衡的IP进行哈希,自动分配所对应的资源服务器的IP,之后这个IP就只能访问这个自动分配的服务器.
2.crm项目的部署
1.nginx + uwsgi + django + 虚拟环境 + supervisor + mysql
2.django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?
django只是一个web逻辑框架,用python3 manage.py runserver 127.0.0.1:8000启动项目,只是用django内置的wsgi框架,wsgiref框架来实现的,它是个单机模块,单进程模块,性能很低,主要用来做测试.因此在线上只能应用用C语言编写的uwsgi软件来启动django
3.由低到高的性能框架
djano
flask
tornado
sanic
4.再进行uwsgi启动Django的时候,是要找到项目下面的wsgi.py这个文件模块的,如果报错找不到application,说明uwsgi找不到wsgi.py
5.为什么要用nginx和uwsgi来部署项目?
nginx可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保护后天服务器的安全等等.
uwsgi支持多进程,多线程的方式.性能很高,启动django性能更好,但是uwsgi不解析Django的静态文件.我们会收集django的所有的静态文件,交给nginx去处理
6.准备crm代码
7.准备一个新的虚拟环境,去启动crm,使用virtualwrapper创建新的虚拟环境
1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
在windows本地上操作 pip3 freeze > requirements.txt,就能将python3中的所有需要的模块的版本信息导入到此文件中.
2.然后传输到服务上,执行pip3 install requirements.txt就能安装所有的所需要的软件.
8.使用uwsgi启动项目,确保进入创建的虚拟环境,安装uwsgi
workon nginx_crm
pip3 install uwsgi
9.使用uwsgi命令启动django项目
uwsgi支持热加载的启动方式命令如下
uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1
uwsgi --http :8088 --module Crm_Project.wsgi
--http指定http协议启动在 8088端口
--module 找到项目第二层的目录,里面的wsgi.py文件
如果你想启动一个http页面,提供测试访问,就用--http参数
如果要用nginx反向代理,则要使用--socket
不建议使用此方法,因为参数过多容易出错
10.推荐使用在项目里面新建配置文件uwsgi.ini,与manage.py同级
[uwsgi]
# Django-related settings
# the base directory (full path)
#填写项目的绝对路径(第一层路径)
chdir = /opt/Crm_Project
# Django's wsgi file
#填写crm第二层目录下的wsgi.py文件的路径
module = Crm_Project.wsgi
# the virtualenv (full path)
#填写虚拟环境的绝对路径
home = /root/Envs/nginx_crm
# process-related settings
# master
master = true
# maximum number of worker processes
#基于uwsgi的多进程,根据cpu来优化
processes = 4
# the socket (use the full path to be safe
#如果你用了nginx反向代理,就填写socket参数
socket = 0.0.0.0:8000
#如果你没用nginx,想直接通过浏览器测试后端,使用http
#http = 0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket = 664
# clear environment on exit
vacuum = true
虚拟环境的绝对路径:先用cdvirturalenv进入绝对路径,然后pwd查出绝对路径.
配置完成后使用 uwsgi --ini uwsgi.ini方式启动代码
11.配置settings,收集所有的静态文件
写入STATIC_ROOT= '/opt/crmstatic' 意思是静态文件都放到/opt下面的crmstatic
然后在命令行执行 python3 manage.py collectstatic 这样就将所有的静态文件放到了/opt下面的crmstatic
此时后端就配置完成,然后去配置nginx
12.配置nginx,nginx不止能支持反向代理,还可以支持静态文件的加载,修改nginx.conf
当用户访问的时候会进入下面的location
location / {
uwsgi_pass 0.0.0.0:8088;
include uwsgi_params;
}
下面这个location是解决静态文件的
location /static{
#alias参数就是将static转化为/opt/crmstatic也就找到了我们所有的静态文件
alias /opt/crmstatic
}
13.重启nginx,查看反向代理的结果
14.配置supervisor工具(要退出虚拟环境,因为要用它控制好多东西,就要安装到物理本机).
1.安装easy_install
pip3是python3的软件包管理工具
easy_install是python2的软件包管理工具
yum install python-setuptools
2.安装supervisor
easy_install supervisor
3.创建supervisor的配置文件
echo_supervisord_conf > /etc/supervisor.conf
4.修改supervisor的配置文件,添加启动uwsgi的命令.
supervisor就是执行了咱们需要手动执行的命令.
vim /etc/supervisor.conf
[program:s18crm]
#虚拟环境uwsgi的绝对路径 启动文件uwsgi.ini的绝对路径
command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.ini
stopasgroup=true
killasgroup=true
posted @
2019-06-10 17:49
small_caier
阅读(
144)
评论()
编辑
收藏
举报