07 Nginx负载均衡
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 + mysql2.django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?django只是一个web逻辑框架,用python3 manage.py runserver 127.0.0.1:8000启动项目,只是用django内置的wsgi框架,wsgiref框架来实现的,它是个单机模块,单进程模块,性能很低,主要用来做测试.因此在线上只能应用用C语言编写的uwsgi软件来启动django3.由低到高的性能框架djanoflasktornadosanic4.再进行uwsgi启动Django的时候,是要找到项目下面的wsgi.py这个文件模块的,如果报错找不到application,说明uwsgi找不到wsgi.py5.为什么要用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启动项目,确保进入创建的虚拟环境,安装uwsgiworkon nginx_crmpip3 install uwsgi9.使用uwsgi命令启动django项目uwsgi支持热加载的启动方式命令如下uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1uwsgi --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# mastermaster = 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 exitvacuum = 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当用户访问的时候会进入下面的locationlocation / {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_installpip3是python3的软件包管理工具easy_install是python2的软件包管理工具yum install python-setuptools2.安装supervisoreasy_install supervisor3.创建supervisor的配置文件echo_supervisord_conf > /etc/supervisor.conf4.修改supervisor的配置文件,添加启动uwsgi的命令.supervisor就是执行了咱们需要手动执行的命令.vim /etc/supervisor.conf[program:s18crm]#虚拟环境uwsgi的绝对路径 启动文件uwsgi.ini的绝对路径command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.inistopasgroup=truekillasgroup=true
07 Nginx负载均衡的更多相关文章
- Nginx 负载均衡-加权轮询策略剖析
本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更 ...
- 对比Haproxy和Nginx负载均衡效果
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...
- nginx负载均衡集群
nginx负载均衡集群 0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ...
- 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统
引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...
- nginx负载均衡基于ip_hash的session粘帖
nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...
- Net分布式系统之二:CentOS系统搭建Nginx负载均衡
一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ...
- Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用
上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...
- 配置nginx负载均衡
配置nginx负载均衡 执行命令:vi /usr/local/nginx/sbin/nginx/conf/nginx.conf 修改为: worker_processes 2; events { ...
- 烂泥:nginx负载均衡
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天我们来学习下有关nginx的负载均衡配置.nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的. 说明: ...
随机推荐
- SpringMVC——Servlet容器启动时初始化SpringMVC应用的原理
在 Servlet 3.0标准中含有一个 ServletContainerInitializer接口,所有实现了这个接口的类会在容器启动的时候得到一个通知,并且会调用其 onStartup()方法,这 ...
- GitHub 访问慢
绕过 DNS 解析,配置 hosts 文件直连. 速度取决与服务器和你所在的网络环境,不一定换了就速度快. DNS 查询网址 https://www.ipaddress.com/ https://to ...
- redis宕机时哨兵的处理
https://blog.csdn.net/a67474506/article/details/50435498 redis宕机是的故障处理 重启故障机 sentinel.conf 的配置会改变
- RN在Mac环境下开发环境搭建
1.推荐使用Homebrew来安装 Node 和 Watchman.在命令行中执行下列命令安装: brew install node brew install watchman 如果你已经安装了 No ...
- Failed to install the following Android SDK packages as some licences have not been accepted.
问题描述: 执行gradle tasks报错: gradle tasks > Configure project :app Exception /package.xml. Probably th ...
- androidstudio导入新项目build tools不符合问题解决
问题描述:从网上或者其他地方拷贝来完整代码导入androidstudio的时候,gradle过程显示build tools不符合 问题分析:你安装的SDK版本可能与其他人不一样,那么build的工具也 ...
- springboot集成springcloud,启动时报错java.lang.AbstractMethodError: null
出现这个问题是springboot和springcloud的版本不匹配. 我此处使用了springboot 2.0.4.RELEASE,springcloud 使用了Finchley.SR2. 修改方 ...
- DES加密解密工具
using System; using System.Text; using System.Security.Cryptography; using System.IO; namespace DESP ...
- MybatisPlus使用代码篇
package spring.server.consumer; import com.baomidou.mybatisplus.annotation.DbType; import com.baomid ...
- 利用nginx做反向代理解决前端跨域问题
最近朋友再群里提了一个问题,他们公司给他提供了一个获取数据的接口,在浏览器访问这个接口能获取到json数据,但是放在项目里使用ajax就产生了跨域问题,一般这个需要提供接口的后台方面需要做跨域处理,但 ...