1.环境配置

我这有三台服务器,三台服务器配置都是 Centos 7.6, django 2.1, mysql 8.0,三台服务器都配置uwsgi,但是只有一台服务器中配置了nginx.

注意: 首先请确保三台服务器上的django项目都能正常运行,建议先用 python manage.py runserver 127.0.0.1:8000 运行看看项目运行是否正常


121.196.187.***:8000   master    安装了nginx,mysql数据放在该服务器

121.40.18.***:8001  slave1    安装了mysql服务,但是连接的是远程master主机的mysql

121.196.190.***:8002  slave2   安装了mysql服务,但是连接的是远程master主机的mysql

我也是第一次配置,所以我不知道mysql是不是应该单独拿出来放一台服务器,关键我也没有钱再买一台服务器了,然后需要注意的是,我用的是mysql 8.0,django远程连接mysql服务时会出现 django.db.utils.OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded:  错误,原因是 mysql8.0 对用户密码的加密方式为caching_sha2_password, django暂时还不支持这种新增的加密方式.

更新mysql用户密码加密方式

use mysql;
select user,plugin from user where user='root';alter user 'root'@'%' identified with mysql_native_password by '你的密码'flush privileges

还有需要注意的是,记得开通3306端口,我用的是阿里云服务器,所以还得在阿里云上给服务器的网络开启3306端口。


2.nginx文件配置,以及 slave 服务器的uwsgi配置

my_nginx.conf 内容如下:

这个文件我是添加软连接到 /etc/nginx/conf.d/ 下面,你也可以直接修改nginx下的nginx.conf

upstream website {# 这里我设置的127.0.0.1就是我的master主机,因为在这台主机上部署的nginxserver 127.0.0.1:8000;server 121.40.18.***:8001;server 121.196.190.***:8002;
}server {listen      80;server_name 121.196.187.***; # substitute your machine's IP address or FQDNcharset     utf-8;client_max_body_size 75M;   # adjust to tastelocation /static {alias /usr/local/untitled/static/; # static path}location / {include     uwsgi_params; # the uwsgi_params file you installedproxy_pass http://website;}# 设置静态文件过期时间location /usr/local/untitled/static/.*\.(jpg|jpeg|png|gif|icon)${expires 30d;}location /usr/local/untitled/static/.*\.(js|css)?$ {expires 10d;}}

nginx 负载均衡的配置和一般nginx的配置主要区别在于 upstream 设置,以及由之前单机的 uwsgi_pass 变为 proxy_pass, 网上给的理由是由之前的socket通信变为http通信。

两台 slave 服务器的uwsgi.ini 文件配置如下 ,端口记得改,我没有尝试设置过一样,不知道有什么影响

[uwsgi]
# Django-related settings
# the base directory (full path)
chdir = /usr/local/untitled
# Django's wsgi file
module = untitled.wsgi
# the virtualenv (full path)# process-related settings
# master
master = true
# maximum number of worker processes
processes = 1
threads = 1#socket = 127.0.0.1:8002
http = 0.0.0.0:8002# chmod-socket = 664
# clear environment on exit
vacuum = true
virtualenv = /root/.virtualenvs/python_company
pidfile = /usr/local/untitled/conf/uwsgi.pid

我的项目名就是untitled,这个名字看着改, 一开我设置的是 http=127.0.0.1:8002, 但是master的nginx一直连接不上,提示

connect() failed (111: Connection refused) while connecting to upstream, 干脆设置个 http=0.0.0.0:8002,结果还真连接了,不知道这样设置有什么问题,先这样吧。。。

同时还需要打开slave服务器对应的端口,这里以打开8002端口为例

# 开启端口
firewall-cmd --zone=public --add-port=8002/tcp --permanent#重启生效
firewall-cmd --reload

3.测试nginx负载均衡是否有效

master开启 nginx 和uwsgi, 两台 slave 开启uwsgi,uwsgi最好通过 uwsgi  uwsgi.ini 来启动,这样可以看到请求网站请求信息,默认配置的nginx负载均衡使用的是轮询, 每个请求会依次发给三台服务器处理,所以刷新几次页面,三台服务器依次收到请求,则表示nginx负载均衡是有效的


分组查看各种连接状态

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
返回结果示例:
LAST_ACK 5  (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数) LAST_ACK 21  (正在等待处理的请求数)
SYN_RECV 29
ESTABLISHED 8458  (正常数据传输状态)
FIN_WAIT1 160
FIN_WAIT2 728
TIME_WAIT 3774  (处理完毕,等待超时结束的请求数) 状态:描述
CLOSED:无连接是活动的或正在进行
LISTEN:主机在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

使用这上面的命令是可以查看主机的种连接状态,其中ESTABLISHED 就是并发连接状态的显示数的了。如果仅仅只是想查看并发连接数,可以简化一下命令,如下:

netstat -nat|grep ESTABLISHED|wc -l

django 使用nginx实现负载均衡相关推荐

  1. Nginx搭建负载均衡集群

    (1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策 ...

  2. docker nginx 配置负载均衡

    在上篇的文章中我们介绍了docker nginx配置简单的代理 在这篇文章我们介绍docker 利用nginx配置负载均衡 所谓的负载均衡是两台服务器,或者是多台服务器上面部署项目,但是访问的方式是通 ...

  3. lnmp架构——nginx的负载均衡

    lnmp架构--nginx的负载均衡 1 什么是nginx 2 nginx的作用 3 nginx的特点 4 nginx的安装以及优化 4.1 安装nginx 4.2 优化 5 nginx主配置文件操作 ...

  4. Nginx+keepalived负载均衡高可用篇第③版

    Nginx+keepalived负载均衡高可用篇第③版 对付中.小型企业,假如没有资金去购买昂贵的四/七层负载均衡交换机,那么Nginx是不错的七层负载均衡选择,并且可以通过Nginx + Keepa ...

  5. Nginx+Tomcat 负载均衡集群方案

    2019独角兽企业重金招聘Python工程师标准>>> Nginx+Tomcat 负载均衡集群方案 该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试 ...

  6. nginx 之负载均衡 :PHP session 跨多台服务器配置

    公司一个项目单点压力越来越大,考虑到稳定性和降压,使用nginx做负载均衡,将请求分发到多个docker上去,这里记录下PHP多服务器间的会话session共享问题,解决方案是把session单独存在 ...

  7. windows配置nginx实现负载均衡集群

    windows配置nginx实现负载均衡集群 2014-08-20 09:44:40   来源:www.abcde.cn   评论:0 点击:617 网上大部分关于nginx负载均衡集群的教程都是li ...

  8. Nginx之负载均衡(四)

    在上一篇博客我们介绍了 Nginx 一个很重要的功能--代理,包括正向代理和反向代理.这两个代理的核心区别是:正向代理代理的是客户端,而反向代理代理的是服务器.其中我们又重点介绍了反向代理,以及如何通 ...

  9. 配置Nginx实现负载均衡

    在关于高并发负载均衡一文中已经提到,企业在解决高并发问题时,一般有两个方向的处理策略,软件.硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库+web服务器两处添加解决方案,其中w ...

最新文章

  1. 01 背包问题 --- 待续 - -
  2. 【测试】小龟小车A2裸板下载arduino程序
  3. MyBatis-04 MyBatis XML方式之insert元素
  4. redis——NOSQL及redis概述
  5. java门槛_Java的入行门槛高吗?对学历有限制吗?
  6. Python库大全,建议收藏留用!
  7. Android 学习笔记 databinding简单使用:使用databinding在listview加入不同类型的view
  8. html标题代码字号,HTML 标题
  9. 【LeetCode】347-前K个高频元素
  10. HCIE Security 防火墙带宽管理 备考笔记(幕布)
  11. asp.net页面的生存周期
  12. linux 清空history以及记录原理
  13. [2021]免费下载外文文献
  14. 详解Haar特征与AdaBoost方法原理
  15. java api接口签名验证失败_简单API接口签名验证
  16. 【问答】区块链遇到Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is heWaiting for
  17. openstack compute service list报错(HTTP 503)
  18. 敏捷开发与GeneXus哲学
  19. 什么样的软件架构是好的?
  20. mLife | DANMEL:面向细菌耐药移动元件分析的手工精细注释参考数据库

热门文章

  1. 上下行链路NOMA的比较
  2. 网易云课堂-思维导图训练营笔记
  3. ios逆向入门笔记-HOOK-QQ登录
  4. 288所高校开大数据专业,你母校out了吗?
  5. 一周AI要闻 | 苹果陷禁售令烦恼,锤子科技艰难过冬,蔚来发新车ES6,陈天石向高通骁龙855下战书...
  6. win10鼠标不受控制乱动_电脑鼠标灵敏度怎么调?一般人不会用!
  7. Windows - bat 文件目录处理、生成
  8. ie历史记录值不能触发onchange事件
  9. 美国兰德公司《未来战争2030》(the Future of Warfare in 2030)系列研究报告概述(上)
  10. Linux学习笔记07_搜索查找类和管道符