1.负载均衡的实现.

  1. 1.准备三台虚拟机,比如
  2. 192.168.119.146 提供资源
  3. 192.168.119.147 提供nginx的负载均衡
  4. 192.168.119.148 提供资源
  5. 2.分别配置三台机器的nginx.conf确保能实现自己需要的功能
  6. 3.在提供负载均衡的服务器192.168.119.147中的nginx.conf做修改
  7. 添加负载均衡地址池的参数,默认是服务器轮询方式
  8. upstream crm {
  9. server 192.168.119.146;
  10. server 192.168.119.148;
  11. }
  12. 在location /中修改成
  13. location / {
  14. proxy_pass http://crm;
  15. }
  16. 4.添加完成后重启nginx,检查负载均衡,浏览器会有缓存,所以用curl来访问代理服务器,会轮询着打印两台服务器的资源,丢给upstream负载池中的IP轮询访问
  17. 5.nginx中的轮询算法:
  18. 1.权重轮询,在upstream中的IP加入weight权重,按比例来轮询访问
  19. upstream crm {
  20. server 192.168.119.146 weight=2;
  21. server 192.168.119.148 weight=3;
  22. }
  23. 访问146两次,访问148三次
  24. 2.ip_hash方式,对你的IP进行还是计算,不能与权重共用
  25. upstream s18django {
  26. server 192.168.226.128;
  27. server 192.168.226.130;
  28. ip_hash;
  29. }
  30. 对访问的负载均衡的IP进行哈希,自动分配所对应的资源服务器的IP,之后这个IP就只能访问这个自动分配的服务器.

2.crm项目的部署

  1. 1.nginx + uwsgi + django + 虚拟环境 + supervisor + mysql
  2. 2.django的启动方式 python3 manage.py runserver 为什么不能在生产环境用?
  3. django只是一个web逻辑框架,用python3 manage.py runserver 127.0.0.1:8000启动项目,只是用django内置的wsgi框架,wsgiref框架来实现的,它是个单机模块,单进程模块,性能很低,主要用来做测试.因此在线上只能应用用C语言编写的uwsgi软件来启动django
  4. 3.由低到高的性能框架
  5. djano
  6. flask
  7. tornado
  8. sanic
  9. 4.再进行uwsgi启动Django的时候,是要找到项目下面的wsgi.py这个文件模块的,如果报错找不到application,说明uwsgi找不到wsgi.py
  10. 5.为什么要用nginx和uwsgi来部署项目?
  11. nginx可以解决uwsgi的静态文件问题,并且支持高并发请求,还能限流,保护后天服务器的安全等等.
  12. uwsgi支持多进程,多线程的方式.性能很高,启动django性能更好,但是uwsgi不解析Django的静态文件.我们会收集django的所有的静态文件,交给nginx去处理
  13. 6.准备crm代码
  14. 7.准备一个新的虚拟环境,去启动crm,使用virtualwrapper创建新的虚拟环境
  15. 1.解决虚拟环境依赖的问题,也就是保障本地开发环境和线上一致性的问题
  16. 在windows本地上操作 pip3 freeze > requirements.txt,就能将python3中的所有需要的模块的版本信息导入到此文件中.
  17. 2.然后传输到服务上,执行pip3 install requirements.txt就能安装所有的所需要的软件.
  18. 8.使用uwsgi启动项目,确保进入创建的虚拟环境,安装uwsgi
  19. workon nginx_crm
  20. pip3 install uwsgi
  21. 9.使用uwsgi命令启动django项目
  22. uwsgi支持热加载的启动方式命令如下
  23. uwsgi --http :8000 --module mysite.wsgi --py-autoreload=1
  24. uwsgi --http :8088 --module Crm_Project.wsgi
  25. --http指定http协议启动在 8088端口
  26. --module 找到项目第二层的目录,里面的wsgi.py文件
  27. 如果你想启动一个http页面,提供测试访问,就用--http参数
  28. 如果要用nginx反向代理,则要使用--socket
  29. 不建议使用此方法,因为参数过多容易出错
  30. 10.推荐使用在项目里面新建配置文件uwsgi.ini,与manage.py同级
  31. [uwsgi]
  32. # Django-related settings
  33. # the base directory (full path)
  34. #填写项目的绝对路径(第一层路径)
  35. chdir = /opt/Crm_Project
  36. # Django's wsgi file
  37. #填写crm第二层目录下的wsgi.py文件的路径
  38. module = Crm_Project.wsgi
  39. # the virtualenv (full path)
  40. #填写虚拟环境的绝对路径
  41. home = /root/Envs/nginx_crm
  42. # process-related settings
  43. # master
  44. master = true
  45. # maximum number of worker processes
  46. #基于uwsgi的多进程,根据cpu来优化
  47. processes = 4
  48. # the socket (use the full path to be safe
  49. #如果你用了nginx反向代理,就填写socket参数
  50. socket = 0.0.0.0:8000
  51. #如果你没用nginx,想直接通过浏览器测试后端,使用http
  52. #http = 0.0.0.0:8000
  53. # ... with appropriate permissions - may be needed
  54. # chmod-socket = 664
  55. # clear environment on exit
  56. vacuum = true
  57. 虚拟环境的绝对路径:先用cdvirturalenv进入绝对路径,然后pwd查出绝对路径.
  58. 配置完成后使用 uwsgi --ini uwsgi.ini方式启动代码
  59. 11.配置settings,收集所有的静态文件
  60. 写入STATIC_ROOT= '/opt/crmstatic' 意思是静态文件都放到/opt下面的crmstatic
  61. 然后在命令行执行 python3 manage.py collectstatic 这样就将所有的静态文件放到了/opt下面的crmstatic

此时后端就配置完成,然后去配置nginx

  1. 12.配置nginx,nginx不止能支持反向代理,还可以支持静态文件的加载,修改nginx.conf
  2. 当用户访问的时候会进入下面的location
  3. location / {
  4. uwsgi_pass 0.0.0.0:8088;
  5. include uwsgi_params;
  6. }
  7. 下面这个location是解决静态文件的
  8. location /static{
  9. #alias参数就是将static转化为/opt/crmstatic也就找到了我们所有的静态文件
  10. alias /opt/crmstatic
  11. }
  12. 13.重启nginx,查看反向代理的结果
  13. 14.配置supervisor工具(要退出虚拟环境,因为要用它控制好多东西,就要安装到物理本机).
  14. 1.安装easy_install
  15. pip3是python3的软件包管理工具
  16. easy_install是python2的软件包管理工具
  17. yum install python-setuptools
  18. 2.安装supervisor
  19. easy_install supervisor
  20. 3.创建supervisor的配置文件
  21. echo_supervisord_conf > /etc/supervisor.conf
  22. 4.修改supervisor的配置文件,添加启动uwsgi的命令.
  23. supervisor就是执行了咱们需要手动执行的命令.
  24. vim /etc/supervisor.conf
  25. [program:s18crm]
  26. #虚拟环境uwsgi的绝对路径 启动文件uwsgi.ini的绝对路径
  27. command=/root/Envs/nginx_crm/bin/uwsgi --ini /opt/Crm_Project/uwsgi.ini
  28. stopasgroup=true
  29. killasgroup=true

07 Nginx负载均衡的更多相关文章

  1. Nginx 负载均衡-加权轮询策略剖析

    本文介绍的是客户端请求在多个后端服务器之间的均衡,注意与客户端请求在多个nginx进程之间的均衡相区别(Nginx根据每个工作进程的当前压力调整它们获取监听套接口的几率,那些当前比较空闲的工作进程有更 ...

  2. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  3. nginx负载均衡集群

    nginx负载均衡集群  0.前言:nginx 负载均衡,属于网络7层模型中的应用层,说白了就是一个代理,要用 upstrem 模块实现,代理则用proxy模块 1.可以针对域名做转发,lvs只能针对 ...

  4. 手把手教你玩转nginx负载均衡(二)----安装虚拟机操作系统

    引言 在上一篇,我们组装好了虚拟机的硬件部分,那么现在我们就要把操作系统装上了,既然是服务器,那么安装linux操作系统是个比较好的选择,如果你喜欢的话,安装windows也是没有任何问题的 我这里选 ...

  5. nginx负载均衡基于ip_hash的session粘帖

    nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...

  6. Net分布式系统之二:CentOS系统搭建Nginx负载均衡

    一.关于CentOS系统介绍 CentOS(Community Enterprise Operating System,中文意思是:社区企业操作系统)是Linux发行版之一,它是来自于Red Hat ...

  7. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  8. 配置nginx负载均衡

    配置nginx负载均衡 执行命令:vi /usr/local/nginx/sbin/nginx/conf/nginx.conf 修改为: worker_processes  2; events {   ...

  9. 烂泥:nginx负载均衡

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 今天我们来学习下有关nginx的负载均衡配置.nginx的负载均衡是通过nginx的upstream模块和proxy_pass反向代理来实现的. 说明: ...

随机推荐

  1. 【免费电子书】这可能是全网最齐的程序员编程电子书PDF合集了!

    [toc] 最近博主

  2. SSL及TLS

    SSL SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议. ...

  3. [SQL server2008筛选时报错,无法为该请求检索数据 解决方案]

    当SQL数据太多时,我们需要通过筛选来查询自己需要的数据. 当我在使用SQLserver 2008的时候 遇到了这个错误1 以下是微软提供的解决方案的网址 (SQL SERVER SP1补丁) htt ...

  4. 电脑里明明安装了net4.7但是VS里不显示?

    我系统中明明已经安装了Net4.7,但是VS中却只显示到4.6.2 再下载4.7进行安装也提示,系统中已经安装,无法安装. 为啥呢,最后发现原来是装上.NET Framework 4.7.2 开发人员 ...

  5. ubuntu最近升级到最新的linux内核后,网络无法使用怎么办?

    答:进入旧的内核中编译需要的网卡模块 1. 启动旧的内核进入系统 2. 安装新内核源码 3. 找出当前的网卡型号 4. 尝试卸载某个与网卡相关的内核模块,观察是否影响当前网卡的使用,如果有影响,那么便 ...

  6. linux常用命令(15)whereis命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息.和find相比,whereis查找的速度非常 ...

  7. python解压压缩包

    默认解压到当前目录 import shutil shutil.unpack_archive('/root/redis-3.2.3.tar.gz') 解压到home目录下 import shutil s ...

  8. 使用docker-client创建NFS挂载

    docker命令行挂载NFS如下: docker volume create --driver local --opt type=nfs --opt o=addr=192.168.11.129,rw ...

  9. gin框架教程三:JWT的使用

    JWT介绍 JWT (JSON Web Token) 是一种规范.这个规范允许我们使用JWT在用户和服务器之间安全传递信息. JWT的组成: jwt分3个部分,Header 头部.Payload 载荷 ...

  10. Botanical Dimensions:借助第九代智能英特尔® 酷睿™ 处理器实现独特沉浸式体验

    本文介绍位于洛杉矶的互动体验设计工作室 Master of Shapes (MOS) 打造 Botanical Dimensions 时所做出的技术努力.在这种互动式多世界体验中,参与者将穿越丛林,寻 ...